diff --git a/.aiexclude b/.aiexclude new file mode 100644 index 00000000000..8b06c02d885 --- /dev/null +++ b/.aiexclude @@ -0,0 +1,6 @@ +* +*token.xml +*tokens.xml +.json +.keystore +.jks diff --git a/.editorconfig b/.editorconfig index f386731a256..d87cbdefbcc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,11 +1,13 @@ root = true [*.{kt,kts}] +ktlint_code_style=ktlint_official indent_style = space indent_size = 4 continuation_indent_size=4 -ktlint_disabled_rules=trailing-comma-on-call-site,trailing-comma-on-declaration-site +ij_kotlin_allow_trailing_comma=true +ij_kotlin_allow_trailing_comma_on_call_site=true ij_kotlin_imports_layout=*,java.**,javax.**,kotlin.**,^ insert_final_newline=true @@ -14,10 +16,13 @@ insert_final_newline=true max_line_length=100 [**/qa_test_app/**.kt] -ktlint_disabled_rules=package-name,trailing-comma-on-call-site,trailing-comma-on-declaration-site +ktlint_disabled_rules=package-name [**/test/**.kt] ktlint_ignore_back_ticked_identifier=true [**/instrumentation_tests/**.kt] -ktlint_disabled_rules=package-name,filename,trailing-comma-on-call-site,trailing-comma-on-declaration-site \ No newline at end of file +ktlint_disabled_rules=package-name,filename + +[**/screenshot_tests/**.kt] +ktlint_disabled_rules=package-name,filename \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index 4157440bf27..a19ade077d3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1 @@ -CHANGELOG.md merge=union \ No newline at end of file +CHANGELOG.md merge=union diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index e8e2bd79091..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ -* @mapbox/navigation-android-v2 \ No newline at end of file diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 1ca42d202ba..00000000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: "CodeQL" - -on: - push: - branches: [ "main", publisher-production, release-* ] - pull_request: - branches: [ "main" ] - schedule: - - cron: '39 3 * * 0' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'java', 'python' ] - - env: - SDK_REGISTRY_TOKEN: ${{ secrets.SDK_REGISTRY_TOKEN }} - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - - - name: Build java - if: ${{ matrix.language == 'java' }} - run: | - make assemble-core-debug - make assemble-ui-debug - - - name: Autobuild python - if: ${{ matrix.language == 'python' }} - uses: github/codeql-action/autobuild@v2 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 - with: - category: "/language:${{matrix.language}}" diff --git a/.gitignore b/.gitignore index 281465eb021..b772ad0f764 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,7 @@ build/ jacoco.exec qa-test-app/src/main/res/values/mapbox_access_token.xml + + +# SDK configuration +/**/src/main/assets/sdk_versions/* diff --git a/CHANGELOG.md b/CHANGELOG.md index 792e0d71ade..f146b0fffb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,76 +1,53 @@ -# Changelog for the Mapbox Navigation SDK for Android - -Mapbox welcomes participation and contributions from everyone. - -## Unreleased -#### Features -#### Bug fixes and improvements - -## Mapbox Navigation SDK 2.20.2 - 29 August, 2024 -### Changelog -[Changes between v2.20.1 and v2.20.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.20.1...v2.20.2) - -#### Features -- The `PredictiveCacheController(PredictiveCacheOptions)` constructor is now deprecated. Use `PredictiveCacheController(MapboxNavigation, PredictiveCacheOptions)` instead. [#7856](https://github.com/mapbox/mapbox-navigation-android/pull/7856) - -#### Bug fixes and improvements -- Fixed an issue where native memory was not being properly released after the `MapboxNavigation` object was destroyed. [#7856](https://github.com/mapbox/mapbox-navigation-android/pull/7856) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.18.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.18.3)) -- Mapbox Navigation Native `v206.0.0` -- Mapbox Core Common `v23.10.1` -- Mapbox Java `v7.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v7.1.0)) - - -## Mapbox Navigation SDK 2.20.1 - 22 July, 2024 -### Changelog -[Changes between v2.20.0 and v2.20.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.20.0...v2.20.1) - -#### Features -- Optimized memory usage in Directions API model classes by interning frequently occurring strings in JSON. [#7840](https://github.com/mapbox/mapbox-navigation-android/pull/7840) - -#### Bug fixes and improvements -- Fixed UI jank caused by on-device TextToSpeech player. [#7833](https://github.com/mapbox/mapbox-navigation-android/pull/7833) -- Fixed a crash caused by cache inconsistency. [#7836](https://github.com/mapbox/mapbox-navigation-android/pull/7836) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.18.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.18.3)) -- Mapbox Navigation Native `v206.0.0` -- Mapbox Core Common `v23.10.1` -- Mapbox Java `v7.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v7.1.0)) - - -## Mapbox Navigation SDK 2.20.0 - 14 June, 2024 -### Changelog -[Changes between v2.19.0 and v2.20.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.19.0...v2.20.0) +# Changelog for the Mapbox Navigation SDK Core Framework for Android +## Navigation SDK Core Framework 3.4.0-beta.1 - 05 September, 2024 #### Features - +- Signature of experimental `EtcGateApi#updateEtcGateInfo` function has been changed, now it accepts `EtcGateApi.EtcGateInfo` as a function parameter. [#6508](https://github.com/mapbox/mapbox-navigation-android/pull/6508) +- Experimental Data Inputs functionality has been removed from the `core` module to a separate `datainputs` module (`MapboxNavigation#dataInputs` and everything from the package `com.mapbox.navigation.datainputs` have been removed). [Contact us](https://www.mapbox.com/support) to get more information on how to get access to the module. [#6508](https://github.com/mapbox/mapbox-navigation-android/pull/6508) +- Experimental Adasis functionality has been removed from the `core` module (`MapboxNavigation`'s functions `setAdasisMessageObserver`, `resetAdasisMessageObserver`, `updateExternalSensorData`, and `GraphAccessor#getAdasisEdgeAttributes` have been removed). [Contact us](https://www.mapbox.com/support) in case you're interested in ADASIS functionality. [#6508](https://github.com/mapbox/mapbox-navigation-android/pull/6508) +- Added experimental `RoutingTilesOptions#fallbackNavigationTilesVersion` which lets define version of navigation tiles to fallback in case of offline routing failure with navigation tiles defined in `RoutingTilesOptions#tilesVersion`. [#6475](https://github.com/mapbox/mapbox-navigation-android/pull/6475) +- Added experimental `MapboxRouteLineViewOptions#fadeOnHighZoomsConfig` and `MapboxRouteArrowOptions#fadeOnHighZoomsConfig` to configure smooth fading out of route line or/and arrows on high zoom levels. [#6367](https://github.com/mapbox/mapbox-navigation-android/pull/6367) +- The `PredictiveCacheController(PredictiveCacheOptions)` constructor is now deprecated. Use `PredictiveCacheController(MapboxNavigation, PredictiveCacheOptions)` instead. [#6376](https://github.com/mapbox/mapbox-navigation-android/pull/6376) +- Added `NavigationScaleGestureHandlerOptions#followingRotationAngleThreshold` that define threshold angle for rotation for `FOLLOWING` Navigation Camera state. [#6234](https://github.com/mapbox/mapbox-navigation-android/pull/6234) +- Added the ability to filter road names based on the system language [#6163](https://github.com/mapbox/mapbox-navigation-android/pull/6163) +- `com.mapbox.navigation.base.road.model.RoadComponent` objects that contain only slashes in their text are filtered out [#6163](https://github.com/mapbox/mapbox-navigation-android/pull/6163) +- Now `EHorizonResultType.Type` has a new element called `EHorizonResultType.NOT_AVAILABLE`. [#6290](https://github.com/mapbox/mapbox-navigation-android/pull/6290) +- Old `MapboxNavigation.postUserFeedback()` functions have been deprecated, use an overloading that accepts `UserFeedback` as a parameter. [#5781](https://github.com/mapbox/mapbox-navigation-android/pull/5781) +- Introduce MapboxRouteCalloutApi and MapboxRouteCalloutView to attach callouts to route lines with info about duration [#2743](https://github.com/mapbox/mapbox-navigation-android/pull/2743) #### Bug fixes and improvements - -- Fixed a crash due to incorrect OpenLR input data. +- Fixed a bug causing some history files recorded during the previous app sessions not to be uploaded by the Copilot. [#6359](https://github.com/mapbox/mapbox-navigation-android/pull/6359) +- Fixed an issue where native memory was not being properly released after the `MapboxNavigation` object was destroyed. [#6376](https://github.com/mapbox/mapbox-navigation-android/pull/6376) +- Fixed the issue of unwanted rerouting occurring immediately after setting a new route [#6163](https://github.com/mapbox/mapbox-navigation-android/pull/6163) +- Fixed a crash caused by an overflow in the JNI global reference table. [#6290](https://github.com/mapbox/mapbox-navigation-android/pull/6290) +- Fixed an issue with vignettes in Romania and Bulgaria for offline routing when tolls are excluded. [#6290](https://github.com/mapbox/mapbox-navigation-android/pull/6290) +- Addressed several issues that occurred when switching to an alternative route. [#6290](https://github.com/mapbox/mapbox-navigation-android/pull/6290) ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.18.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.18.1)) -- Mapbox Navigation Native `v206.0.0` -- Mapbox Core Common `v23.10.1` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - +- Mapbox Maps SDK `v11.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.7.0-beta.1)) +- Mapbox Navigation Native `v318.0.0` +- Mapbox Core Common `v24.7.0-beta.2` +- Mapbox Java `v7.2.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v7.2.0)) -## Mapbox Navigation SDK 2.20.0-beta.1 - 04 June, 2024 -### Changelog -[Changes between v2.19.1 and v2.20.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.19.1...v2.20.0-beta.1) +## Navigation SDK Core Framework 3.3.0-beta.1 - 19 July, 2024 #### Features - +- Optimized memory usage in Directions API model classes by interning frequently occurring strings in JSON. [#5854](https://github.com/mapbox/mapbox-navigation-android/pull/5854) +- Added experimental `MapboxNavigation#replanRoute` to handle cases when user changes route options during active guidance, [#5286](https://github.com/mapbox/mapbox-navigation-android/pull/5286) +for example enabling avoid ferries. +- Added `DataInputsManager` to allow the provision of data from external sensors to the navigator, see `MapboxNavigation.dataInputsManager`. Experimental `EtcGateInfo` has been moved to `com.mapbox.navigation.core.datainputs` package. `EtcGateApi` has been deprecated. [#5957](https://github.com/mapbox/mapbox-navigation-android/pull/5957) +- Removing the ExperimentalMapboxNavigationAPI flag for Search predictive cache. [#5615](https://github.com/mapbox/mapbox-navigation-android/pull/5615) +- [BREAKING CHANGE] `PredictiveCacheOptions.unrecognizedTilesetDescriptorOptions` has been renamed to `PredictiveCacheOptions.predictiveCacheSearchOptionsList`. Additionally, `PredictiveCacheUnrecognizedTilesetDescriptorOptions` has been renamed to `PredictiveCacheSearchOptions`. Now, only search-related options can be passed to `PredictiveCacheSearchOptions`. [#5244](https://github.com/mapbox/mapbox-navigation-android/pull/5244) +- Introduced experimental traffic adjustment mechanism during a drive and added `TrafficOverrideOptions` to control this feature [#2811](https://github.com/mapbox/mapbox-navigation-android/pull/2811) +- Changed `Alternatives` that deviate close to a destination point are removed before a fork is reached. [#5848](https://github.com/mapbox/mapbox-navigation-android/pull/5848) #### Bug fixes and improvements -- Fixed a crash due to incorrect OpenLR input data. +- Implementation of `RerouteController#registerRerouteStateObserver` now invokes observer immediately with current state instead of posting invocation to the main looper. [#5286](https://github.com/mapbox/mapbox-navigation-android/pull/5286) +- Fixed UI jank caused by on-device TextToSpeech player. [#5638](https://github.com/mapbox/mapbox-navigation-android/pull/5638) +- Removed `PredictiveCacheController#removeSearchControllers` and `PredictiveCacheController#createSearchControllers`. Now search predictive cache controller is created and destroyed together with `PredictiveCacheController` instance if `PredictiveCacheOptions.predictiveCacheSearchOptionsList` is provided. [#5714](https://github.com/mapbox/mapbox-navigation-android/pull/5714) +- Improve performance when handling large road objects on the eHorizon's MPP. [#6014](https://github.com/mapbox/mapbox-navigation-android/pull/6014) +- Fixed `Routes` that origin is out of primary route cannot be added as alternatives. [#5848](https://github.com/mapbox/mapbox-navigation-android/pull/5848) #### Known issues :warning: @@ -80,200 +57,78 @@ This release depends on, and has been tested with, the following Mapbox dependen ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.18.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.18.1)) -- Mapbox Navigation Native `v206.0.0` -- Mapbox Core Common `v23.10.1` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.19.1 - 30 May, 2024 -### Changelog -[Changes between v2.19.0 and v2.19.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.19.0...v2.19.1) - -#### Features -- Added a new option `historyAverageSpeed` to `AdasisConfigProfileShortTypeOptions`. [#7813](https://github.com/mapbox/mapbox-navigation-android/pull/7813) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.6` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.6)) -- Mapbox Navigation Native `v205.0.0` -- Mapbox Core Common `v23.9.3` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.18.2 - 23 May, 2024 -### Changelog -[Changes between v2.18.1 and v2.18.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.18.1...v2.18.2) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v182.0.2` -- Mapbox Core Common `v23.8.7` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - +- Mapbox Maps SDK `v11.6.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.6.0-beta.1)) +- Mapbox Navigation Native `v315.0.0` +- Mapbox Core Common `v24.6.0-beta.1` +- Mapbox Java `v7.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v7.1.0)) -## Mapbox Navigation SDK 2.17.13 - 26 April, 2024 -### Changelog -[Changes between v2.17.12 and v2.17.13](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.12...v2.17.13) +## Navigation SDK Core Framework 3.2.0-beta.1 - 13 June, 2024 #### Features - +- Added `RerouteStrategyForMapMatchedRoutes` to `RerouteOptions`. Reroute option `enableLegacyBehaviorForMapMatchedRoute` was removed, use `NavigateToFinalDestination` strategy instead. [#5256](https://github.com/mapbox/mapbox-navigation-android/pull/5256) #### Bug fixes and improvements -- Fixed an issue where cached ADAS data was not released. [#7791](https://github.com/mapbox/mapbox-navigation-android/pull/7791) +- Fixed a crash due to incorrect OpenLR input data [#5400](https://github.com/mapbox/mapbox-navigation-android/pull/5400) +- Fixed a bug with spinning smoothed coordinate [#5400](https://github.com/mapbox/mapbox-navigation-android/pull/5400) +- Fixed issue for calculating the trim-offset value for the vanishing route line feature when the current geometry index emitted by route progress is greater than the value expected. -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v162.0.5` -- Mapbox Core Common `v23.8.6` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) +#### Known issues :warning: -## Mapbox Navigation SDK 2.17.12 - 04 April, 2024 -### Changelog -[Changes between v2.17.11 and v2.17.12](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.11...v2.17.12) +#### Other changes -#### Bug fixes and improvements -- Updated internal dependencies ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v162.0.4` -- Mapbox Core Common `v23.8.6` +- Mapbox Maps SDK `v11.5.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.5.0-beta.1)) +- Mapbox Navigation Native `v312.0.0` +- Mapbox Core Common `v24.5.0-beta.4` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.19.0 - 15 March, 2024 -### Changelog -[Changes between v2.18.0 and v2.19.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.18.0...v2.19.0) - +## Navigation SDK Core Framework 3.1.0-rc.1 - 17 May, 2024 #### Features - -- Added new property `AdasisDataSendingConfig.treeTrailingLength` that allows to specify the trailing length of the path tree, relative to the map-matched position, in the ADASIS provider. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed an issue where `RouterFailure.code` could have been null for Directions API errors. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Added billing explanation logs. Now Navigation SDK explains in the logs why certain Active Guidance or Free Drive Trip session started/stopped/paused/resumed. Billing explanations have `[BillingExplanation]` prefix in the logcat. [#7710](https://github.com/mapbox/mapbox-navigation-android/pull/7710) +- Improved `MapboxNavigationViewportDataSource` behavior, it updates view port data only when map size is calculated which prevents from using incorrect data. [#5017](https://github.com/mapbox/mapbox-navigation-android/pull/5017) +- Optimized network consumption of Continuous Alternatives feature. #### Bug fixes and improvements -- Resolved an issue where a crash could occur if telemetry sending settings were changed after creating `MapboxNavigation`. [#7755](https://github.com/mapbox/mapbox-navigation-android/pull/7755) -- Fixed ADASIS generator errors related to the split edges. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed ADAS cache tiles eviction mechanism. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Started handling "unlilimited" speed limits in ADASIS. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed possible `java.lang.UnsatisfiedLinkError` crash on application startup when Mapbox native libraries could not yet be found. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed leak of CarAppLifecycleOwner on every Copilot start. [#7669](https://github.com/mapbox/mapbox-navigation-android/pull/7669) -- Started sending special type POSITION messages in OFF-ROAD mode. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.6` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.6)) -- Mapbox Navigation Native `v203.0.0` -- Mapbox Core Common `v23.9.1` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.19.0-beta.2 - 26 February, 2024 -### Changelog -[Changes between v2.19.0-beta.1 and v2.19.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.19.0-beta.1...v2.19.0-beta.2) - -#### Features -- Added new property `AdasisDataSendingConfig.treeTrailingLength` that allows to specify the trailing length of the path tree, relative to the map-matched position, in the ADASIS provider. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed an issue where `RouterFailure.code` could have been null for Directions API errors. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Added billing explanation logs. Now Navigation SDK explains in the logs why certain Active Guidance or Free Drive Trip session started/stopped/paused/resumed. Billing explanations have `[BillingExplanation]` prefix in the logcat. [#7710](https://github.com/mapbox/mapbox-navigation-android/pull/7710) - -#### Bug fixes and improvements -- Resolved an issue where a crash could occur if telemetry sending settings were changed after creating `MapboxNavigation`. [#7755](https://github.com/mapbox/mapbox-navigation-android/pull/7755) -- Fixed ADASIS generator errors related to the split edges. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed ADAS cache tiles eviction mechanism. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Started handling "unlilimited" speed limits in ADASIS. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed possible `java.lang.UnsatisfiedLinkError` crash on application startup when Mapbox native libraries could not yet be found. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) -- Fixed leak of CarAppLifecycleOwner on every Copilot start. [#7669](https://github.com/mapbox/mapbox-navigation-android/pull/7669) -- Started sending special type POSITION messages in OFF-ROAD mode. [#7753](https://github.com/mapbox/mapbox-navigation-android/pull/7753) #### Known issues :warning: #### Other changes -- Added Polish translation for UI elements. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.5` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.5)) -- Mapbox Navigation Native `v202.0.0` -- Mapbox Core Common `v23.9.0` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.18.1 - 23 February, 2024 -### Changelog -[Changes between v2.18.0 and v2.18.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.18.0...v2.18.1) - -#### Features - - -#### Bug fixes and improvements -- Resolved an issue where a crash could occur if telemetry sending settings were changed after creating `MapboxNavigation`. [#7757](https://github.com/mapbox/mapbox-navigation-android/pull/7757) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v182.0.0` -- Mapbox Core Common `v23.8.6` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.17.11 - 02 February, 2024 -### Changelog -[Changes between v2.17.10 and v2.17.11](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.10...v2.17.11) -#### Features - - -#### Bug fixes and improvements -- Fix of ADAS cache eviction mechanism bug led to missing ADAS data. [#7737](https://github.com/mapbox/mapbox-navigation-android/pull/7737) ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v162.0.3` -- Mapbox Core Common `v23.8.6` +- Mapbox Maps SDK `v11.4.0-rc.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.4.0-rc.2)) +- Mapbox Navigation Native `v309.0.0` +- Mapbox Core Common `v24.4.0-rc.2` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.14.3 - 26 January, 2024 -### Changelog -[Changes between v2.14.2 and v2.14.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.14.2...v2.14.3) - -#### Features - - -#### Bug fixes and improvements -- Fixed a bug with multiple instances of cache which resulted in excessive memory consumption. [#7693](https://github.com/mapbox/mapbox-navigation-android/pull/7693) -- Improved location accuracy for walking and cycling profiles. [#7730](https://github.com/mapbox/mapbox-navigation-android/pull/7730) -- Added an options to `DeviceProfile#customConfig` to disable initialized state. [#7730](https://github.com/mapbox/mapbox-navigation-android/pull/7730) -- Disabled initialized state by default for snapping profile. [#7730](https://github.com/mapbox/mapbox-navigation-android/pull/7730) -- Prevented old predictive cache groups from staying on disk forever. [#7730](https://github.com/mapbox/mapbox-navigation-android/pull/7730) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.14.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.14.1)) -- Mapbox Navigation Native `v137.1.7` -- Mapbox Core Common `v23.6.0` -- Mapbox Java `v6.12.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.12.0)) - - -## Mapbox Navigation SDK 2.19.0-beta.1 - 23 January, 2024 -### Changelog -[Changes between v2.18.0 and v2.19.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.18.0...v2.19.0-beta.1) - +## Navigation SDK Core Framework 3.1.0-beta.1 - 07 May, 2024 #### Features -- Added Advanced Driver Assistance Systems (ADAS) functionality as an experimental API. [#7538](https://github.com/mapbox/mapbox-navigation-android/pull/7538) -- Added `NavigationViewApi#recenterCamera()` that allows to programatically recenter the camera position as if the recenter button was clicked. [#7713](https://github.com/mapbox/mapbox-navigation-android/pull/7713) +- Added `androidauto` module, that brings Navigation Android Auto SDK. The module was carried over from Nav SDK v2 and has been adapted to work with the Maps v11. [#4454](https://github.com/mapbox/mapbox-navigation-android/pull/4454) +- Optimized predictive cache usage. [#4601](https://github.com/mapbox/mapbox-navigation-android/pull/4601) +- Added a new option `PredictiveCacheMapsOptions.extraOptions` that allows to specify extra tileset descriptor options. [#4749](https://github.com/mapbox/mapbox-navigation-android/pull/4749) +- Added a new option `AdasisConfigProfileShortTypeOptions.historyAverageSpeed` which specifies whether `historyAverageSpeed` data should be generated in ADASis messages. [#4931](https://github.com/mapbox/mapbox-navigation-android/pull/4931) #### Bug fixes and improvements -- Fixed an issue where reroute for multi-leg routes used to fail in case waypoint_names or waypoint_targets parameters were specified without an explicit waypoint_indices parameter. [#7709](https://github.com/mapbox/mapbox-navigation-android/pull/7709) +- Made RerouteState.Failed retryable in case reroute failed due to not having yet received a route progress for a new route that had just been set. [#4861](https://github.com/mapbox/mapbox-navigation-android/pull/4861) +- Added support for custom users in map matching requests. [#4808](https://github.com/mapbox/mapbox-navigation-android/pull/4808) +- Fixed an issue where there was no fallback to onboard router in some cases. Now we allow onboard routing in all cases except when the request was cancelled. [#4754](https://github.com/mapbox/mapbox-navigation-android/pull/4754) +- Fixed an issue related to cached ADAS data not being released. [#4754](https://github.com/mapbox/mapbox-navigation-android/pull/4754) +- Removed route alerts for border crossings in neutral waters. [#4754](https://github.com/mapbox/mapbox-navigation-android/pull/4754) +- Fixed a crash caused by filtered alternatives in cases where the primary route status is different from the incoming route status. [#4754](https://github.com/mapbox/mapbox-navigation-android/pull/4754) +- Fixed `PredictiveCacheLocationOptions::routeBufferRadiusInMeters` default value. [#4673](https://github.com/mapbox/mapbox-navigation-android/pull/4673) +- Fixed an issue where there was no fallback to onboard router in some cases. Now we allow onboard routing in all cases except when the request was cancelled. [#4931](https://github.com/mapbox/mapbox-navigation-android/pull/4931) +- Fixed an issue related to cached ADAS data not being released. [#4931](https://github.com/mapbox/mapbox-navigation-android/pull/4931) +- Removed route alerts for border crossings in neutral waters. [#4931](https://github.com/mapbox/mapbox-navigation-android/pull/4931) +- Fixed a crash caused by filtered alternatives in cases where the primary route status is different from the incoming route status. [#4931](https://github.com/mapbox/mapbox-navigation-android/pull/4931) +- Fixed context leak on Activity recreation [#4626](https://github.com/mapbox/mapbox-navigation-android/pull/4626) +- Improved alternative routes Navigation SDK generates during reroute. [#4831](https://github.com/mapbox/mapbox-navigation-android/pull/4831) #### Known issues :warning: @@ -283,296 +138,248 @@ This release depends on, and has been tested with, the following Mapbox dependen ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v201.0.0` -- Mapbox Core Common `v23.8.6` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.17.10 - 19 January, 2024 -### Changelog -[Changes between v2.17.9 and v2.17.10](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.9...v2.17.10) - -#### Features - - -#### Bug fixes and improvements - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v162.0.2` -- Mapbox Core Common `v23.8.6` +- Mapbox Maps SDK `v11.4.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.4.0-beta.3)) +- Mapbox Navigation Native `v308.0.0` +- Mapbox Core Common `v24.4.0-beta.3` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.17.9 - 10 January, 2024 -### Changelog -[Changes between v2.17.8 and v2.17.9](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.8...v2.17.9) - - -#### Bug fixes and improvements -- Fixed a bug with multiple instances of cache which resulted in excessive memory consumption. [#7692](https://github.com/mapbox/mapbox-navigation-android/pull/7692) -- Fixed a bug where old navigation tiles could stay on the disk instead of being cleaned up. [#7702](https://github.com/mapbox/mapbox-navigation-android/pull/7702) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.3)) -- Mapbox Navigation Native `v162.0.1` -- Mapbox Core Common `v23.8.5` +## Navigation SDK Core Framework 3.0.0 - 12 April, 2024 +#### Features +- Modules structure (mostly UI components modules) has been significantly changed. See migration guide for more information https://docs.mapbox.com/android/navigation/guides/migration-from-v2/#artifacts +- Deprecated classes, functions and fields have been removed. See [Nav SDK v2 documentation](https://docs.mapbox.com/android/navigation/api/2.17.7/) for more information about missing parts and migration guides. +- `com.mapbox.navigation.core.reroute.NavigationRerouteController` has been merged with `com.mapbox.navigation.core.reroute.RerouteController` +- Introduced support of Mapbox Map Matching API, see `MapboxNavigation#requestMapMatching`. [#2874](https://github.com/mapbox/navigation/pull/2874) +- Changed LocationOptions API. Now custom location providers that emit mocked locations are allowed. See documentation to get more information. [#3392](https://github.com/mapbox/navigation/pull/3392) +- Added Advanced Driver Assistance Systems (ADAS) functionality as an experimental API. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Added `NavigationViewApi#recenterCamera()` that allows to programatically recenter the camera position as if the recenter button was clicked. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Introduced support for highlighting 3D buildings. +- Navigation Core Framework doesn't let creating `NavigationRoute` from json anymore. Use `MapboxNavigation#requestRoutes` and `MapboxNavigation#requestMapMatching` to request `NavigationRoute`s. +- Changed type of `RouterOrigin`. Now it's an annotation which defines possible string values for router origin. `RouterOrigin.Offboard` is renamed to `RouterOrigin.ONLINE`, `RouterOrigin.Onboard` is renamed to `RouterOrigin.OFFLINE`, `RouterOrigin.Custom` is removed. +- Navigation Core Framework automatically updates alternative routes and switches to an online alternative in case of an offline primary route. Register `RoutesObserver` to keep track of current routes. Use `MapboxNavigation#setContinuousAlternativesEnabled` to enable/disable automatic update. +- `NavigationRouteAlternativesObserver`, `RouteAlternativesObserver`, `NavigationRouteAlternativesRequestCallback`, `MapboxNavigation#registerRouteAlternativesObserver`, `MapboxNavigation#requestAlternativeRoutes` were removed in favour of automatic alternatives update. +- Added support for `RouteOptions#suppressVoiceInstructionLocalNames` to onboard router. +- Changed the semantics of `Location#timestamp` that you receive in `onLocationMatcherResult`, instead of being set to current system time it is now has location input time + lookahead (extrapolation) time. +- Route Line component has been refactored and significantly changed. See migration guide for more information: https://docs.mapbox.com/android/navigation/guides/migration-from-v2/#mapboxroutelineapi +- Removed `LongRoutesOptimisationOptions`. Navigation Core Framework is now optimized to handle long routes by default. [#3741](https://github.com/mapbox/mapbox-navigation-android/pull/3741) +- `RouterFailure.code` has been replaced with `RouterFailure.type`. See `RouterFailureType` to find all possible error types. [#3555](https://github.com/mapbox/mapbox-navigation-android/pull/3555) +- Added "mbx.RouteLine" history events. They will be collected automatically by NavSDK for both manual recorder and Copilot recorder when the recording is started. [#3785](https://github.com/mapbox/mapbox-navigation-android/pull/3785) + You can enable route line events collection for Copilot using `CopilotOptions#shouldRecordRouteLineEvents` option. It is disabled by default. +- Improved EHorizon path evaluation. [#3555](https://github.com/mapbox/mapbox-navigation-android/pull/3555) +- Added experimental property `NavigationRoute#responseOriginAPI` which describes API that Navigation CF used to generate data for `NavigationRoute`. `NavigationRoute#responseOriginAPI` could be used to form expectations from navigation experience given the fact that routes with `ResponseOriginAPI.MAP_MATCHING_API` has limited support currently. [#4010](https://github.com/mapbox/mapbox-navigation-android/pull/4010) +- Public data classes have been replaces with normal classes with generated `equals`, `hashCode`, `toString`. `copy` function and destructuring declarations are not available for affected classes. [#4142](https://github.com/mapbox/mapbox-navigation-android/pull/4142) +- Added support of seamless switch to an alternative route in case of deviation to the alternative route from a route received via `MapboxNavigation#requestMapMatching`. [#3972](https://github.com/mapbox/mapbox-navigation-android/pull/3972) + +#### Bug fixes and improvements +- Made `MapboxNavigation` constructor and `onDestroy` internal. To create an instance of `MapboxNavigation` use `MapboxNavigationProvider#create`; to destroy it use `MapboxNavigationProvider#destroy`. [3274](https://github.com/mapbox/navigation/pull/3274) +- Fixed a bug with multiple instances of cache which resulted in excessive memory consumption. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Fixed an issue where reroute for multi-leg routes used to fail in case waypoint_names or waypoint_targets parameters were specified without an explicit waypoint_indices parameter. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Improved handling of no storage available during navigation tiles downloading. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Improved handling of invalid config in `DeviceProfile#customConfig`. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Fixed a native crash in E-Horizon implementation caused by internal race condition. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Made `MapboxReplayer` constructor public. [#3392](https://github.com/mapbox/navigation/pull/3392) +- Removed `OnlineRouteAlternativesSwitch`. Use `NavigationRouteAlternativesObserver` to receive an online alternative for the current offline route. Unlike `OnlineRouteAlternativesSwitch`, `NavigationRouteAlternativesObserver` doesn't switch to an online alternative automatically. [#3441](https://github.com/mapbox/navigation/pull/3441) +- Changed structure of `NavigationRoute`. Now it can represent routes received from Mapbox Map Matching API as well as Mapbox Directions API. + `NavigationRoute#directionsResponse` has been removed. Use `NavigationRoute#waypoints` and `NavigationRoute#responseUUID` to access data which used to be available via `NavigationRoute#directionsResponse`. + `NavigationRoute#routeOptions` has been removed. Try to utilise data available in `NavigationRoute`, for example instead of using coordinates from route options, use `NavigationRoute#waypoints`. Temporary property `NavigationRoute#evMaxCharge` has been added to access maximum possible charge for the vehicle the route was requested for instead of `navigationRoute.routeOptions.getUnrecognizedProperty("ev_max_charge")`. + [#3441](https://github.com/mapbox/navigation/pull/3441) +- Improve GNSS jump detection for better pitch based map-matching in tunnels +- Eliminate border crossing object when moving to neutral waters and back +- Fixed leak of CarAppLifecycleOwner on every copilot start. [#3803](https://github.com/mapbox/mapbox-navigation-android/pull/3803) +- Resolved an issue where a crash could occur if telemetry sending settings were changed after creating `MapboxNavigation`. [#3900](https://github.com/mapbox/mapbox-navigation-android/pull/3900) +- Fixed an issue with vanishing route line not working for single-leg routes. [#3818](https://github.com/mapbox/mapbox-navigation-android/pull/3818) +- Eliminated waiting for online route in case of reroute if onboard is ready. For rerouting return the route that was calculated sooner will be returned, and the back-online feature is expected to handle the case of switching back to online. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Improved highway exits detection. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Improved passed alternatives handling. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed an issue when onboard route calculation might have been cancelled if online router returned critical error. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed an issue in processing ETC signals when distant projections where treated as valid map-matched locations. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed leak of CarAppLifecycleOwner on every copilot start. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Started sending special type POSITION messages in OFF-ROAD mode. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed ANR `at com.mapbox.common.LifecycleUtils.hasServiceRunningInForeground(LifecycleUtils.kt:25)`. [#dd](https://github.com/mapbox/mapbox-navigation-android/pull/dd) +- Added `RerouteOptions#enableLegacyBehaviorForMapMatchedRoute` which lets enable reroute logic from Nav SDK v2 for routes generated by Mapbox Map Matching API. [#4130](https://github.com/mapbox/mapbox-navigation-android/pull/4130) +- Changed reroute state transition in case of deviation from a primary route which is received via `MapboxNavigation#requestMapMatching` when no alternative routes available to switch to. Reroute state used to be `Idle`, but now performs the following transition: `Idle` -> `FetchingRoute` -> `Failed` -> `Idle`. [#3972](https://github.com/mapbox/mapbox-navigation-android/pull/3972) +- Made `RouteShieldError#url` and `RouteShieldOrigin#originalUrl` nullable. They can be null in case the request had been cancelled before the URL was formed. [#4164](https://github.com/mapbox/mapbox-navigation-android/pull/4164) +- Improved road shield rendering behaviour for long text: now the closest length-wise available icon will be downloaded, previously it had been fixed to a maximum of 6 characters. [#4164](https://github.com/mapbox/mapbox-navigation-android/pull/4164) +- Added a Copilot option that allows to provide a different user id for history recording context. [#4301](https://github.com/mapbox/mapbox-navigation-android/pull/4301) +- Fixed an issue where incidents and closures far ahead along the route might have disappeared after route refresh. [#4410](https://github.com/mapbox/mapbox-navigation-android/pull/4410) +- Made `RouteShieldError#url` and `RouteShieldOrigin#originalUrl` nullable. They can be null in case the request had been cancelled before the URL was formed. [#4164](https://github.com/mapbox/mapbox-navigation-android/pull/4164) +- Improved road shield rendering behaviour for long text: now the closest length-wise available icon will be downloaded, previously it had been fixed to a maximum of 6 characters. [#4164](https://github.com/mapbox/mapbox-navigation-android/pull/4164) +- Improved tunnel exit detection. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Internal dependencies updated, which includes removal of unwanted URLs from the binary. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Improved incidents behavior: far away incidents are kept after partial route refresh. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Improved incidents behavior: expired incidents are removed on route refresh. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Improved incidents behavior: incidents with incorrect endTime are not removed. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Fixed EV route parsing issue. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Fixed a crash that could happen on incorrect waypoints in the route response. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) +- Fixed continuous alternatives bugs leading to excessive `getRoute` calls. [#4578](https://github.com/mapbox/mapbox-navigation-android/pull/4578) + +### Mapbox dependencies +This release depends on, and has been tested with, the following Mapbox dependencies: +- Mapbox Maps SDK `v11.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.3.0)) +- Mapbox Navigation Native `v305.0.0` +- Mapbox Core Common `v24.3.1` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.18.0 - 09 January, 2024 -### Changelog -[Changes between v2.17.0 and v2.18.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.0...v2.18.0) - +## Navigation SDK Core Framework 3.0.0-rc.5 - 29 March, 2024 #### Features - -- Adds support for applications compiled with compileSdkVersion 30 or above. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) +- The new `ui-components` module is now available. This module offers UI components that were previously accessible in Nav SDK v2. [#4235](https://github.com/mapbox/mapbox-navigation-android/pull/4235) #### Bug fixes and improvements -- Improved Map Matching to avoid false deviation of the location puck to a parallel street. [#7694](https://github.com/mapbox/mapbox-navigation-android/pull/7694) -- Improved handling of no storage available during navigation tiles downloading. [#7694](https://github.com/mapbox/mapbox-navigation-android/pull/7694) -- Improved handling of invalid config in `DeviceProfile#customConfig`. [#7694](https://github.com/mapbox/mapbox-navigation-android/pull/7694) -- Fixed a native crash in E-Horizon implementation caused by internal race condition. [#7694](https://github.com/mapbox/mapbox-navigation-android/pull/7694) -- Fixed a bug with multiple instances of cache which resulted in excessive memory consumption. [#7688](https://github.com/mapbox/mapbox-navigation-android/pull/7688) -- Fixed an issue where some old tiles were never evicted. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) -- Fixed an error of retrieving an offline route on app start. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) -- Improved switching to online route: now in case of too long response time, the request will not be cancelled when offline rout is built, but the alternative online route will be available as soon the calculation finishes. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) -- Improved map matching in dead reckoning mode for high curvature road edges. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) +- Made `RouteShieldError#url` and `RouteShieldOrigin#originalUrl` nullable. They can be null in case the request had been cancelled before the URL was formed. [#4164](https://github.com/mapbox/mapbox-navigation-android/pull/4164) +- Improved road shield rendering behaviour for long text: now the closest length-wise available icon will be downloaded, previously it had been fixed to a maximum of 6 characters. [#4164](https://github.com/mapbox/mapbox-navigation-android/pull/4164) +- Added a Copilot option that allows to provide a different user id for history recording context. [#4301](https://github.com/mapbox/mapbox-navigation-android/pull/4301) ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.4)) -- Mapbox Navigation Native `v182.0.0` -- Mapbox Core Common `v23.8.6` +- Mapbox Maps SDK `v11.2.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.2.2)) +- Mapbox Navigation Native `v304.0.0` +- Mapbox Core Common `v24.2.3` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.18.0-beta.1 - 20 December, 2023 -### Changelog -[Changes between v2.17.8 and v2.18.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.8...v2.18.0-beta.1) +## Navigation SDK Core Framework 1.0.0-rc.3 - 01 March, 2024 #### Features -- Adds support for applications compiled with compileSdkVersion 30 or above. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) +- Added new property `AdasisDataSendingConfig.treeTrailingLength` that allows to specify the trailing length of the path tree, relative to the map-matched position, in the ADASIS provider. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) #### Bug fixes and improvements -- Fixed an issue where some old tiles were never evicted. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) -- Fixed an error of retrieving an offline route on app start. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) -- Improved switching to online route: now in case of too long response time, the request will not be cancelled when offline rout is built, but the alternative online route will be available as soon the calculation finishes. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) -- Improved map matching in dead reckoning mode for high curvature road edges. [#7663](https://github.com/mapbox/mapbox-navigation-android/pull/7663) - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.3)) -- Mapbox Navigation Native `v180.0.0` -- Mapbox Core Common `v23.8.5` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) +- Resolved an issue where a crash could occur if telemetry sending settings were changed after creating `MapboxNavigation`. [#3900](https://github.com/mapbox/mapbox-navigation-android/pull/3900) +- Fixed an issue with vanishing route line not working for single-leg routes. [#3818](https://github.com/mapbox/mapbox-navigation-android/pull/3818) +- Eliminated waiting for online route in case of reroute if onboard is ready. For rerouting return the route that was calculated sooner will be returned, and the back-online feature is expected to handle the case of switching back to online. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Improved highway exits detection. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Improved passed alternatives handling. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed an issue when onboard route calculation might have been cancelled if online router returned critical error. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed an issue in processing ETC signals when distant projections where treated as valid map-matched locations. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed leak of CarAppLifecycleOwner on every copilot start. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed ADASIS generator errors related to the split edges. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed ADAS cache tiles eviction mechanism. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Started handling "unlilimited" speed limits in ADASIS. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Started sending special type POSITION messages in OFF-ROAD mode. [#3968](https://github.com/mapbox/mapbox-navigation-android/pull/3968) +- Fixed ANR `at com.mapbox.common.LifecycleUtils.hasServiceRunningInForeground(LifecycleUtils.kt:25)`. [#dd](https://github.com/mapbox/mapbox-navigation-android/pull/dd) - -## Mapbox Navigation SDK 2.17.8 - 12 December, 2023 -### Changelog -[Changes between v2.17.7 and v2.17.8](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.7...v2.17.8) - -#### Features +#### Known issues :warning: -#### Bug fixes and improvements -- Fixed an issue where route parsing might have crashes for invalid Directions Response. [#7667](https://github.com/mapbox/mapbox-navigation-android/pull/7667) -- Fixed an issue where the first voice instruction might have been played thrice when switching between regular session and replay with route being set. [#7661](https://github.com/mapbox/mapbox-navigation-android/pull/7661) +#### Other changes +- Improved performance of the `MapboxRouteLineView#renderRouteLineUpdates` function, especially when `MapboxRouteLineApiOptions#styleInactiveRouteLegsIndependently` is enabled. ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.3)) -- Mapbox Navigation Native `v162.0.0` -- Mapbox Core Common `v23.8.5` +- Mapbox Maps SDK `v11.2.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.2.0)) +- Mapbox Navigation Native `v303.0.0` +- Mapbox Core Common `v24.2.0` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.17.7 - 08 December, 2023 -### Changelog -[Changes between v2.17.6 and v2.17.7](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.6...v2.17.7) +## Navigation SDK Core Framework 1.0.0-rc.2 - 16 February, 2024 #### Features - +- Removed `LongRoutesOptimisationOptions`. Navigation Core Framework is now optimized to handle long routes by default. [#3741](https://github.com/mapbox/mapbox-navigation-android/pull/3741) +- Added billing explanation logs. Now Navigation SDK explains in the logs why certain Active Guidance or Free Drive Trip session started/stopped/paused/resumed. Billing explanations have `[BillingExplanation]` prefix in the logcat. [#3803](https://github.com/mapbox/mapbox-navigation-android/pull/3803) +- Removed `NavigaitonRoute#deserializeFrom` and `NavigationRoute#serialize` from public API because it's too easy to misuse them and create a leak of resources. [#3767](https://github.com/mapbox/mapbox-navigation-android/pull/3767) +- `RouterFailure.code` has been replaced with `RouterFailure.type`. See `RouterFailureType` to find all possible error types. [#3555](https://github.com/mapbox/mapbox-navigation-android/pull/3555) +- Improve map-matching on elevated roads. [#3555](https://github.com/mapbox/mapbox-navigation-android/pull/3555) +- Added "mbx.RouteLine" history events. They will be collected automatically by NavSDK for both manual recorder and Copilot recorder when the recording is started. [#3785](https://github.com/mapbox/mapbox-navigation-android/pull/3785) + You can enable route line events collection for Copilot using `CopilotOptions#shouldRecordRouteLineEvents` option. It is disabled by default. +- Improved EHorizon path evaluation. [#3555](https://github.com/mapbox/mapbox-navigation-android/pull/3555) +- `libnav-ui` module has been renamed to `libnavigation-voice`. Package name has been changed to `com.mapbox.navigation.voice`. #### Bug fixes and improvements -- Fixed an issue where route might have hung on reroute after a deviation had occurred. [#7650](https://github.com/mapbox/mapbox-navigation-android/pull/7650) -- Fixed an issue where a user might have received constant off-route events and no route progress. [#7650](https://github.com/mapbox/mapbox-navigation-android/pull/7650) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.2)) -- Mapbox Navigation Native `v161.1.3` -- Mapbox Core Common `v23.8.4` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) +- Fixed leak of CarAppLifecycleOwner on every copilot start. [#3803](https://github.com/mapbox/mapbox-navigation-android/pull/3803) +#### Known issues :warning: -## Mapbox Navigation SDK 2.17.6 - 28 November, 2023 -### Changelog -[Changes between v2.17.5 and v2.17.6](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.5...v2.17.6) -#### Bug fixes and improvements -- Fixed the crash which sometimes happens during stopping of active guidance [#7636](https://github.com/mapbox/mapbox-navigation-android/pull/7636) +#### Other changes +- Added Polish translation for UI elements. ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.2)) -- Mapbox Navigation Native `v161.1.2` -- Mapbox Core Common `v23.8.4` +- Mapbox Maps SDK `v11.2.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.2.0-rc.1)) +- Mapbox Navigation Native `v302.0.0` +- Mapbox Core Common `v24.2.0-rc.2` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.17.5 - 23 November, 2023 -### Changelog -[Changes between v2.17.4 and v2.17.5](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.4...v2.17.5) - +## Navigation SDK Core Framework 1.0.0-rc.1 - 06 February, 2024 + +#### Features +- Changed type of `RouterOrigin`. Now it's an annotation which defines possible string values for router origin. +- `RouterOrigin.Offboard` is renamed to `RouterOrigin.ONLINE`. +- `RouterOrigin.Onboard` is renamed to `RouterOrigin.OFFLINE`. +- `RouterOrigin.Custom` is removed. +- Navigation Core Framework automatically updates alternative routes and switches to an online alternative in case of an offline primary route. Register `RoutesObserver` to keep track of current routes. Use `MapboxNavigation#setContinuousAlternativesEnabled` to enable/disable automatic update. +- `NavigationRouteAlternativesObserver`, `RouteAlternativesObserver`, `NavigationRouteAlternativesRequestCallback`, `MapboxNavigation#registerRouteAlternativesObserver`, `MapboxNavigation#requestAlternativeRoutes` were removed in favour of automatic alternatives update. +- `libnavui-voice` module has been renamed to `libnavigation-voice`. Package name has been changed to `com.mapbox.navigation.voice`. +- Added support for `RouteOptions#suppressVoiceInstructionLocalNames` to onboard router. +- Changed the semantics of `Location#timestamp` that you receive in `onLocationMatcherResult`, instead of being set to current system time it is now has location input time + lookahead (extrapolation) time. +- Implement ADASIS message batching. +- Split `MapboxRouteLineOptions` into `MapboxRouteLineApiOptions` and `MapboxRouteLineViewOptions`. +- Split `MapboxRouteLineOptions#displayRestrictedRoadSections` into `MapboxRouteLineApiOptions#calculateRestrictedRoadSections` and `MapboxRouteLineViewOptions#displayRestrictedRoadSections`. You can have a set-up where some of your `MapboxRouteLineView`s display the restricted data and others don't. Set `MapboxRouteLineApiOptions#calculateRestrictedRoadSections` if at least one of your `MapboxRouteLineView`s will display the restricted data. Set `MapboxRouteLineViewOptions#displayRestrictedRoadSections` only to those views, who are going to display it. +- Moved: +1. `MapboxRouteLineOptions.Builder#withRouteLineBelowLayerId` to `MapboxRouteLineViewOptions.Builder#routeLineBelowLayerId`; +2. `MapboxRouteLineOptions.Builder#withTolerance` to `MapboxRouteLineViewOptions.Builder#tolerance`; +3. `MapboxRouteLineOptions.Builder#withVanishingRouteLineEnabled` to `MapboxRouteLineApiOptions.Builder#vanishingRouteLineEnabled`; +4. `MapboxRouteLineOptions#styleInactiveRouteLegsIndependently`, `MapboxRouteLineOptions#vanishingRouteLineEnabled` and `MapboxRouteLineOptions#vanishingRouteLineUpdateIntervalNano` to `MapboxRouteLineApiOptions`. +5. `MapboxRouteLineOptions#softGradientTransition`, `MapboxRouteLineOptions#displaySoftGradientForTraffic`, `MapboxROuteLineOptions#shareLineGeometrySources`, `MapboxRouteLineOptions#lineDepthOcclusionFactor`, `MapboxRouteLineOptions#waypointLayerIconOffset`, `MapboxRouteLineOptions#waypointLayerIconAnchor` and `MapboxRouteLineOptions#iconPitchAlignment` to `MapboxRouteLineViewOptions`. +- Removed `RouteLineResources` class: +1. `routeLineColorResources`, `originWaypointIcon`, `destinationWaypointIcon`, `restrictedRoadDashArray`, `restrictedRoadOpacity` and `restrictedRoadLineWidth` were moved to `MapboxRouteLineViewOptions` +2. `trafficBackfillRoadClasses` was moved to `MapboxRouteLineApiOptions` +3. `scaleExpression` properties were moved to `MapboxRouteLineViewOptions#scaleExpressions` wrapper of type `RouteLineScaleExpressions` +4. `roundedLineCap` property was removed +- Moved `congestionRange` properties from `RouteLineColorResources` to `MapboxRouteLineApiOptions`. +- Removed `MapboxRouteLineOptions#routeStyleDescriptors` option. +- Removed the possibility of modify and reading data from `RouteLineSetValue`, `RouteLineClearValue` and `RouteLineUpdateValue`. Do not use these classes on your side, just pass the objects between `MapboxRouteLineAPI` and `MapboxRouteLineView`. +- `MapboxRouteLineAPI#options` and `MapboxRouteLineView#options` properties are no longer public. +- Made `RouteLineExpressionProvider` and `RouteLineTrimExpressionProvider` internal. +- Added a possibility to change a subset of `MapboxRouteLineViewOptions` in runtime without the need to recreate the components. The subset that can be changed is defined in `MapboxRouteLineViewDynamicOptionsBuilder`. To change the dynamic options in runtime, use the following code: +``` +routeLineView.updateDynamicOptions(style) { + routeLineColorResources(newColors) + // ... +} +routeLineApi.getRouteDrawData { + routeLineView.renderRouteDrawData(style, it) +} +``` +- Split `RouteLineConfig#options` into `RouteLineConfig#apiOptions` and `RouteLineConfig#viewOptions` +- Added `RouteLineConfig#viewOptionsUpdates`. +- Removed `MapboxRouteLineApi#showRouteWithLegIndexHighlighted`, `MapboxRouteLineApi#setPrimaryTrafficColor` and `MapboxRouteLineApi#setAlternativeTrafficColor` methods. +- Changed `MapboxRouteLineApi#setVanishingOffset` method behavior in the following way: if the route had not been set to `MapboxRouteLineApi` prior to the point when `setVanishingOffset` was invoked, it will return an error now. Previously it used to return a value, which was, however, useless for rendering without the route. +- Fixed an issue when soft gradient was not applied correctly in `MapboxRouteLineApi#setVanishingOffset` result. #### Bug fixes and improvements -- Optimised memory consumption of Copilot. [#7622](https://github.com/mapbox/mapbox-navigation-android/pull/7622) -- Fixed an issue when navigation could switch between alternative routes in cycle when a user moves backward. [#7626](https://github.com/mapbox/mapbox-navigation-android/pull/7626) +- Fix adas tiles eviction algorithm +- Fixed a mapmatching issue where the position might have been snapped to the wrong part of a highway after leaving tunnel +- Improve GNSS jump detection for better pitch based map-matching in tunnels +- Eliminate border crossing object when moving to neutral waters and back -### Known issues -- Seamless switch in case of deviation to an alternative route doesn't always work for multi legs routes, regular reroute happens instead. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.2)) -- Mapbox Navigation Native `v161.1.1` -- Mapbox Core Common `v23.8.4` -- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - - -## Mapbox Navigation SDK 2.17.4 - 13 November, 2023 -### Changelog -[Changes between v2.17.3 and v2.17.4](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.3...v2.17.4) +#### Known issues :warning: -#### Features +#### Other changes -#### Bug fixes and improvements -- Supported ETC 2.0 payment method. [#7613](https://github.com/mapbox/mapbox-navigation-android/pull/7613) ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.2)) -- Mapbox Navigation Native `v161.1.0` -- Mapbox Core Common `v23.8.4` +- Mapbox Maps SDK `v11.1.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.1.0)) +- Mapbox Navigation Native `v301.0.1` +- Mapbox Core Common `v24.1.0` - Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) - -## Mapbox Navigation SDK 2.17.3 - 03 November, 2023 -### Changelog -[Changes between v2.17.2 and v2.17.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.2...v2.17.3) - -#### Features -- Introduced `RouterFailure#isRetryable` which indicates if that makes sense to retry with this type of failure. [#7597](https://github.com/mapbox/mapbox-navigation-android/pull/7597) - -For convenience, you can use an extension property `isRetryable` for the list of `RouterFailure` in `NavigationRouterCallback.onFailure`. -In case of reroute use `RerouteState.Failed.isRetryable`. - -#### Bug fixes and improvements - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.1)) -- Mapbox Navigation Native `v161.0.1` -- Mapbox Core Common `v23.8.3` -- Mapbox Java `v6.14.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.14.0)) - - -## Mapbox Navigation SDK 2.17.2 - 27 October, 2023 -### Changelog -[Changes between v2.17.1 and v2.17.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.1...v2.17.2) - -#### Features -- Introduced `NavigationOptions#longRoutesOptimisationOptions` which changes the Nav SDK behavior so that it's able to handle heavy routes objects. See documentation of `OptimiseNavigationForLongRoutes` to learn more about it. [#7564](https://github.com/mapbox/mapbox-navigation-android/pull/7564) -- Route refresh now refreshes `LegAnnotation#freeflowSpeed` and `LegAnnotation#currentSpeed`. [#7587](https://github.com/mapbox/mapbox-navigation-android/pull/7587) - -#### Bug fixes and improvements -- Fixed an issue where route refreshes might not have been paused after invoking `RouteRefreshController#pauseRouteRefreshes`. [#7581](https://github.com/mapbox/mapbox-navigation-android/pull/7581) -- Fixed backward positioning jumps after GPS signal jump detection. [#7586](https://github.com/mapbox/mapbox-navigation-android/pull/7586) -- Improved processing of ETC signals. [#7586](https://github.com/mapbox/mapbox-navigation-android/pull/7586) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.1)) -- Mapbox Navigation Native `v161.0.0` -- Mapbox Core Common `v23.8.3` -- Mapbox Java `v6.14.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.14.0)) - - -## Mapbox Navigation SDK 2.17.1 - 18 October, 2023 -### Changelog -[Changes between v2.17.0 and v2.17.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.0...v2.17.1) - -#### Bug fixes and improvements -- Fixed an issue where some of the incident fields might have been lost after refresh. [#7567](https://github.com/mapbox/mapbox-navigation-android/pull/7567) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.1)) -- Mapbox Navigation Native `v160.0.1` -- Mapbox Core Common `v23.8.3` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.17.0 - 13 October, 2023 -### Changelog -[Changes between v2.16.0 and v2.17.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.16.0...v2.17.0) - -#### Bug fixes and improvements -- Optimised memory and network usage. [#7555](https://github.com/mapbox/mapbox-navigation-android/pull/7555) -- Improved ramp detection and reduced unexpected jumps between parallel elevated roads. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Reduced memory consumption. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Improved location accuracy on "walking" and "cycling" profiles. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Fixed false-positive "exiting the tunnel" mapmatching errors. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Improved navigation positioning in tunnels. [#7514](https://github.com/mapbox/mapbox-navigation-android/pull/7514) -- Fixed an issue where route refresh interval might have been too long in case of a specific alternatives update rate. [#7497](https://github.com/mapbox/mapbox-navigation-android/pull/7497) -- Map-matching improvement in dead-reckoning. [#7531](https://github.com/mapbox/mapbox-navigation-android/pull/7531) -- Report Off-Route if LocationOnLeg legIndex is greater than current route leg. [#7531](https://github.com/mapbox/mapbox-navigation-android/pull/7531) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.1)) -- Mapbox Navigation Native `v160.0.0` -- Mapbox Core Common `v23.8.3` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.15.3 - 12 October, 2023 -### Changelog -[Changes between v2.15.2 and v2.15.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.15.2...v2.15.3) - -#### Bug fixes and improvements -- Added a boolean option `disableMinDistancePolicyForMultiLegRouteAndReroutes` to custom config which alters the behaviour for `MinDistanceToPass` completion policy via disabling the min distance check for multi-leg routes and reroutes. [#7548](https://github.com/mapbox/mapbox-navigation-android/pull/7548) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.15.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.15.0)) -- Mapbox Navigation Native `v148.0.3` -- Mapbox Core Common `v23.7.0` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.17.0-rc.1 - 06 October, 2023 -### Changelog -[Changes between v2.17.0-beta.1 and v2.17.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.17.0-beta.1...v2.17.0-rc.1) +## Navigation SDK Core Framework 1.0.0-beta.5 - 02 February, 2024 #### Features - +- The `maneuver` module now offers only API related to maneuver logic. Views was removed from the module +- `MapboxRecenterButton`, `MapboxRouteOverviewButton`, `MapboxRoadNameView`, `MapboxCameraModeButton` have been removed from ui-maps module. `MapboxExtendableButtonLayoutBinding` has been removed from `ui-base` module. +- New module `libnavigation-tripdata` is available. It accumulates core api from `libnavui-shield`, `libnavui-tripprogress`, `libnavui-maneuver`, `libnavui-speedlimit` modules, which have been removed. +- Introduced support for highlighting 3D buildings. +- Navigation Core Framework doesn't let creating `NavigationRoute` from json anymore. Use `MapboxNavigation#requestRoutes` and `MapboxNavigation#requestMapMatching` to request `NavigationRoute`s. +- Added `NavigationRoute#serialize` and `NavigationRoute#deserializeFrom` to support immediate transfer of `NavigationRoute` between applications and processes with the same Navigation Core Framework version. #### Bug fixes and improvements -- Improved ramp detection and reduced unexpected jumps between parallel elevated roads. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Reduced memory consumption. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Improved location accuracy on "walking" and "cycling" profiles. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) -- Fixed false-positive "exiting the tunnel" mapmatching errors. [#7541](https://github.com/mapbox/mapbox-navigation-android/pull/7541) +- Fixed crash in CustomRouterRule caused by invalid url schema in request #### Known issues :warning: @@ -582,6500 +389,63 @@ This release depends on, and has been tested with, the following Mapbox dependen ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.1)) -- Mapbox Navigation Native `v159.0.0` -- Mapbox Core Common `v23.8.3` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) +- Mapbox Maps SDK `v11.1.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.1.0)) +- Mapbox Navigation Native `v300.0.1` +- Mapbox Core Common `v24.1.0` +- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.17.0-beta.1 - 22 September, 2023 +## Navigation SDK Core Framework 1.0.0-beta.4 - 26 January, 2024 ### Changelog -[Changes between v2.16.0 and v2.17.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.16.0...v2.17.0-beta.1) - -#### Features - #### Bug fixes and improvements -- Improved navigation positioning in tunnels. [#7514](https://github.com/mapbox/mapbox-navigation-android/pull/7514) -- Fixed an issue where route refresh interval might have been too long in case of a specific alternatives update rate. [#7497](https://github.com/mapbox/mapbox-navigation-android/pull/7497) -- Map-matching improvement in dead-reckoning. [#7531](https://github.com/mapbox/mapbox-navigation-android/pull/7531) -- Report Off-Route if LocationOnLeg legIndex is greater than current route leg. [#7531](https://github.com/mapbox/mapbox-navigation-android/pull/7531) - -#### Known issues :warning: - - -#### Other changes +- Improved `CustomRouterRule` to work independently from device network setup. [#3430](https://github.com/mapbox/navigation/pull/3430) +- Removed `CustomRouterRule#baseUrl`. Now `CustomRouterRule` intercepts all route and route refresh requests to Mapbox Directions API. [#3430](https://github.com/mapbox/navigation/pull/3430) +- Fixed a bug with multiple instances of cache which resulted in excessive memory consumption. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Fixed an issue where reroute for multi-leg routes used to fail in case waypoint_names or waypoint_targets parameters were specified without an explicit waypoint_indices parameter. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Improved Map Matching to avoid false deviation of the location puck to a parallel street. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Improved handling of no storage available during navigation tiles downloading. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Improved handling of invalid config in `DeviceProfile#customConfig`. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Fixed a native crash in E-Horizon implementation caused by internal race condition. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Made `MapboxReplayer` constructor public. [#3392](https://github.com/mapbox/navigation/pull/3392) +- Removed `OnlineRouteAlternativesSwitch`. Use `NavigationRouteAlternativesObserver` to receive an online alternative for the current offline route. Unlike `OnlineRouteAlternativesSwitch`, `NavigationRouteAlternativesObserver` doesn't switch to an online alternative automatically. [#3441](https://github.com/mapbox/navigation/pull/3441) +- Changed structure of `NavigationRoute`. Now it can represent routes received from Mapbox Map Matching API as well as Mapbox Directions API. + `NavigationRoute#directionsResponse` has been removed. Use `NavigationRoute#waypoints`, `NavigationRoute#responseUUID`, and `NavigationRoute#responseMetadata` to access data which used to be available via `NavigationRoute#directionsResponse`. + `NavigationRoute#routeOptions` has been removed. Try to utilise data available in `NavigationRoute`, for example instead of using coordinates from route options, use `NavigationRoute#waypoints`. Temporary property `NavigationRoute#evMaxCharge` has been added to access maximum possible charge for the vehicle the route was requested for instead of `navigationRoute.routeOptions.getUnrecognizedProperty("ev_max_charge")`. + [#3441](https://github.com/mapbox/navigation/pull/3441) +- Added `MapMatchingSuccessfulResult#navigationRoutes` which represent routes that could be set to navigator using `MapboxNavigation#setNavigationRoutes`. [#3441](https://github.com/mapbox/navigation/pull/3441) +- Changed type of `MapMatchingSuccessfulResult#matches` from `List` to `List`. Now every item from `MapMatchingSuccessfulResult#matches` represents a Match Object from Mapbox Map Matching API. [#3441](https://github.com/mapbox/navigation/pull/3441) +## Features +- Changed LocationOptions API. Now custom location providers that emit mocked locations are allowed. In order to set a custom location provider, you now need to invoke `LocationOptions.Builder#locationProviderFactory` and pass a factory that will create a DeviceLocationProvider implementation based on a request parameter together will location provider type, which can be one of: REAL, MOCKED, MIXED. Note that if your provider can emit non-real locations, it must set `isMock` extra flag value to true for such locations. To set this flag, use: +``` +Location.Builder#extra(Value.valueOf(hashMapOf(LocationExtraKeys.IS_MOCK to Value.valueOf(true/false)))) +``` + [#3392](https://github.com/mapbox/navigation/pull/3392) +- Added Advanced Driver Assistance Systems (ADAS) functionality as an experimental API. [#3489](https://github.com/mapbox/navigation/pull/3489) +- Added `NavigationViewApi#recenterCamera()` that allows to programatically recenter the camera position as if the recenter button was clicked. [#3489](https://github.com/mapbox/navigation/pull/3489) ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.0)) -- Mapbox Navigation Native `v158.0.0` -- Mapbox Core Common `v23.8.0` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) +- Mapbox Maps SDK `v11.1.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.1.0)) +- Mapbox Navigation Native `v300.0.1` +- Mapbox Core Common `24.1.0` +- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) -## Mapbox Navigation SDK 2.16.0 - 15 September, 2023 +## Navigation SDK Core Framework 1.0.0-beta.3 - 19 January, 2024 ### Changelog -[Changes between v2.15.0 and v2.16.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.15.0...v2.16.0) - -#### Features - -- Added Android 14 support. Android 14 users will be able to dismiss the notification associated with navigation. This will result only in the notification not being visible anymore. The navigation will continue and the voice instructions will still be played in background. [#7367](https://github.com/mapbox/mapbox-navigation-android/pull/7367) -- Added `IncidentInfo#length` property. [#7467](https://github.com/mapbox/mapbox-navigation-android/pull/7467) -- Added `IncidentInfo#trafficCodes` property. [#7408](https://github.com/mapbox/mapbox-navigation-android/pull/7408) #### Bug fixes and improvements -- Improved navigation positioning in tunnels. [#7518](https://github.com/mapbox/mapbox-navigation-android/pull/7518) -- Fixed an issue where clicking on primary route resulted in switching to an alternative route. [#7486](https://github.com/mapbox/mapbox-navigation-android/pull/7486) -- Fixed an issue when Nav SDK removed primary route due to false positive detection of deviation to an alternative route. Now previous primary route is removed via continuous alternatives mechanism which has a higher certainty threshold to remove passed alternative. [#7470](https://github.com/mapbox/mapbox-navigation-android/pull/7470) -- Fixed warnings produced by `MapboxMap` when predictive cache controller interacted with an invalid map. [#7466](https://github.com/mapbox/mapbox-navigation-android/pull/7466) -- Fixed an issue when continuous alternatives were provided despite disabling alternative routes in initial route request. [#7490](https://github.com/mapbox/mapbox-navigation-android/pull/7490) -- Fixed a crash when navigator created with `maxAlternatives=0` parameter. [#7490](https://github.com/mapbox/mapbox-navigation-android/pull/7490) -- Added `RouteLineColorResources#inactiveRouteLegCasingColor` to specify the color used for inactive legs casing. [#7393](https://github.com/mapbox/mapbox-navigation-android/pull/7393) -- Added `IncidentInfo#multilingualAffectedRoadNames`. [#7430](https://github.com/mapbox/mapbox-navigation-android/pull/7430) -- Map matching now uses emergency roads. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Improved algorithm that chooses fork during dead-reckoning. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Dead-reckoning is allowed even in short tunnels and bridges. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Improved arrival detection in case of off-road. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where RouteProgress might have contained the same incident twice. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where the app might have crashed due to JNI reference table overflow. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue with broken map-matching after significant teleports. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where map-matching might have jumped on parallel roads. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Started using fallback to onboard routing in case of 5xx Directions Response codes. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where soft gradient was not applied for active legs. [#7416](https://github.com/mapbox/mapbox-navigation-android/pull/7416) -- Fixed an issue where in rare cases `BannerInstructionsObserver` might not have been invoked for an instruction when the route was being refreshed. [#7399](https://github.com/mapbox/mapbox-navigation-android/pull/7399) -- Reverted sticky charging stations feature for rerouting. [#7401](https://github.com/mapbox/mapbox-navigation-android/pull/7401) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.0)) -- Mapbox Navigation Native `v157.0.0` -- Mapbox Core Common `v23.8.0` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.15.2 - 13 September, 2023 -### Changelog -[Changes between v2.15.1 and v2.15.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.15.1...v2.15.2) - -#### Features - +- Support more options for `MapMatchingOptions`. [#3369](https://github.com/mapbox/navigation/pull/3369) +- Made `MapboxNavigation` constructor and `onDestroy` internal. To create an instance of `MapboxNavigation` use `MapboxNavigationProvider#create`; to destroy it use `MapboxNavigationProvider#destroy`. [3274](https://github.com/mapbox/navigation/pull/3274) -#### Bug fixes and improvements -- Report Off-Route if LocationOnLeg legIndex is greater than current route leg. [#7504](https://github.com/mapbox/mapbox-navigation-android/pull/7504) +## Features +- Introduced support of Mapbox Map Matching API, see `MapboxNavigation#requestMapMatching`. [#2874](https://github.com/mapbox/navigation/pull/2874) ### Mapbox dependencies This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.15.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.15.0)) -- Mapbox Navigation Native `v148.0.2` -- Mapbox Core Common `v23.7.0` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.16.0-rc.1 - 31 August, 2023 -### Changelog -[Changes between v2.16.0-beta.1 and v2.16.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.16.0-beta.1...v2.16.0-rc.1) - -#### Features -- Added Android 14 support. Android 14 users will be able to dismiss the notification associated with navigation. This will result only in the notification not being visible anymore. The navigation will continue and the voice instructions will still be played in background. [#7367](https://github.com/mapbox/mapbox-navigation-android/pull/7367) - -#### Bug fixes and improvements -- Fixed an issue where clicking on primary route resulted in switching to an alternative route. [#7486](https://github.com/mapbox/mapbox-navigation-android/pull/7486) -- Fixed an issue when Nav SDK removed primary route due to false positive detection of deviation to an alternative route. Now previous primary route is removed via continuous alternatives mechanism which has a higher certainty threshold to remove passed alternative. [#7470](https://github.com/mapbox/mapbox-navigation-android/pull/7470) -- Fixed warnings produced by `MapboxMap` when predictive cache controller interacted with an invalid map. [#7466](https://github.com/mapbox/mapbox-navigation-android/pull/7466) -- Fixed an issue when continuous alternatives were provided despite disabling alternative routes in initial route request. [#7490](https://github.com/mapbox/mapbox-navigation-android/pull/7490) -- Fixed a crash when navigator created with `maxAlternatives=0` parameter. [#7490](https://github.com/mapbox/mapbox-navigation-android/pull/7490) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.0-rc.1)) -- Mapbox Navigation Native `v156.0.0` -- Mapbox Core Common `v23.8.0-rc.2` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.16.0-beta.1 - 18 August, 2023 -### Changelog -[Changes between v2.15.1 and v2.16.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.15.1...v2.16.0-beta.1) - -#### Features -- Added `IncidentInfo#length` property. [#7467](https://github.com/mapbox/mapbox-navigation-android/pull/7467) -- Added `IncidentInfo#trafficCodes` property. [#7408](https://github.com/mapbox/mapbox-navigation-android/pull/7408) - -#### Bug fixes and improvements -- Added `RouteLineColorResources#inactiveRouteLegCasingColor` to specify the color used for inactive legs casing. [#7393](https://github.com/mapbox/mapbox-navigation-android/pull/7393) -- Added `IncidentInfo#multilingualAffectedRoadNames`. [#7430](https://github.com/mapbox/mapbox-navigation-android/pull/7430) -- Map matching now uses emergency roads. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Improved algorithm that chooses fork during dead-reckoning. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Dead-reckoning is allowed even in short tunnels and bridges. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Improved arrival detection in case of off-road. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where RouteProgress might have contained the same incident twice. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where the app might have crashed due to JNI reference table overflow. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue with broken map-matching after significant teleports. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where map-matching might have jumped on parallel roads. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Started using fallback to onboard routing in case of 5xx Directions Response codes. [#7431](https://github.com/mapbox/mapbox-navigation-android/pull/7431) -- Fixed an issue where soft gradient was not applied for active legs. [#7416](https://github.com/mapbox/mapbox-navigation-android/pull/7416) -- Fixed an issue where in rare cases `BannerInstructionsObserver` might not have been invoked for an instruction when the route was being refreshed. [#7399](https://github.com/mapbox/mapbox-navigation-android/pull/7399) -- Reverted sticky charging stations feature for rerouting. [#7401](https://github.com/mapbox/mapbox-navigation-android/pull/7401) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.16.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.16.0-beta.1)) -- Mapbox Navigation Native `v155.0.0` -- Mapbox Core Common `v23.8.0-beta.1` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.14.2 - 08 August, 2023 -### Changelog -[Changes between v2.14.1 and v2.14.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.14.1...v2.14.2) - -#### Features - - -#### Bug fixes and improvements -- Fixed an issue with broken map-matching after significant teleports. [#7449](https://github.com/mapbox/mapbox-navigation-android/pull/7449) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.14.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.14.1)) -- Mapbox Navigation Native `v137.1.3` -- Mapbox Core Common `v23.6.0` -- Mapbox Java `v6.12.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.12.0)) - - -## Mapbox Navigation SDK 2.15.1 - 07 August, 2023 -### Changelog -[Changes between v2.15.0 and v2.15.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.15.0...v2.15.1) - -#### Features - - -#### Bug fixes and improvements - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.15.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.15.0)) -- Mapbox Navigation Native `v148.0.1` -- Mapbox Core Common `v23.7.0` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.15.0 - 04 August, 2023 -### Changelog -[Changes between v2.14.0 and v2.15.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.14.0...v2.15.0) - -#### Features -- Added `IncidentInfo#trafficCodes` property. [#7407](https://github.com/mapbox/mapbox-navigation-android/pull/7407) -- Introduced `RoutesInvalidatedObserver` to be notified about routes invalidation. When this observer is fired, the routes passed as an argument will not be refreshed anymore, because they expired. It is recommended to rebuild a route in this case. Example usage: [#7318](https://github.com/mapbox/mapbox-navigation-android/pull/7318) -``` -mapboxNavigation.registerRoutesInvalidatedObserver { routes -> - val invalidatedIds = routes.map { it.id } - val currentRoutes = mapboxNavigation.getNavigationRoutes() - val primaryRoute = currentRoutes.firstOrNull() - if (routes.any { it.id == primaryRoute?.id }) { - // primary route is outdated - trigger reroute - mapboxNavigation.getRerouteController()?.reroute(object : NavigationRerouteController.RoutesCallback { - override fun onNewRoutes( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setNavigationRoutes(routes) - } - }) - } else { - // remove outdated alternatives - mapboxNavigation.setNavigationRoutes(currentRoutes.filterNot { it.id in invalidatedIds }) - } -} -``` -- Introduced `MERGING_AREA` RoadObject type. You can receive Merging Areas via `RouteProgress#upcomingRoadObjects` and via `EHorizonObserver`. Note: to enable merging area collection when using EHorizon, set `AlertServiceOptions#collectMergingAreas` to true. [#7358](https://github.com/mapbox/mapbox-navigation-android/pull/7358) -- Added new option to control gender of voice `MapboxSpeechApiOptions.gender`. [#7337](https://github.com/mapbox/mapbox-navigation-android/pull/7337) -- Added new options to `RouteLineColorResources` to style congestion, restrictions, and closures colors on inactive legs when `MapboxRouteLineOptions#styleInactiveRouteLegsIndependently` is enabled. The values default to transparent. [#7322](https://github.com/mapbox/mapbox-navigation-android/pull/7322) - -#### Bug fixes and improvements -- Added `RouteLineColorResources#inactiveRouteLegCasingColor` to specify the color used for inactive legs casing. [#7392](https://github.com/mapbox/mapbox-navigation-android/pull/7392) -- Fixed an issue where in rare cases `BannerInstructionsObserver` might not have been invoked for an instruction when the route was being refreshed. [#7414](https://github.com/mapbox/mapbox-navigation-android/pull/7414) -- Reverted sticky charging stations feature for rerouting. [#7403](https://github.com/mapbox/mapbox-navigation-android/pull/7403) -- Map matching now uses emergency roads. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Improved algorithm that chooses fork during dead-reckoning. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Dead-reckoning is allowed even in short tunnels and bridges. [#7404](https://github.com/mapbox/mapbox-navigation-android/pull/7404) -- Improved arrival detection in case of off-road. [#7429](https://github.com/mapbox/mapbox-navigation-android/pull/7429) -- Fixed an issue where RouteProgress might have contained the same incident twice. [#7429](https://github.com/mapbox/mapbox-navigation-android/pull/7429) -- Fixed an issue where the app might have crashed due to JNI reference table overflow. [#7429](https://github.com/mapbox/mapbox-navigation-android/pull/7429) -- Fixed an issue with broken map-matching after significant teleports. [#7429](https://github.com/mapbox/mapbox-navigation-android/pull/7429) -- Fixed an issue where map-matching might have jumped on parallel roads. [#7429](https://github.com/mapbox/mapbox-navigation-android/pull/7429) -- Started using fallback to onboard routing in case of 5xx Directions Response codes. [#7429](https://github.com/mapbox/mapbox-navigation-android/pull/7429) -- Added `IncidentInfo#multilingualAffectedRoadNames`. [#7428](https://github.com/mapbox/mapbox-navigation-android/pull/7428) -- Fixed an issue where soft gradient was not applied for active legs. [#7410](https://github.com/mapbox/mapbox-navigation-android/pull/7410) -- Now updated via `MapboxNavigation#onEvDataUpdated` parameters are added to continuous alternatives requests. [#7380](https://github.com/mapbox/mapbox-navigation-android/pull/7380) -- Fixed snapping to a tunnel after driving out of underground parking. [#7372](https://github.com/mapbox/mapbox-navigation-android/pull/7372) -- Fixed ADASIS assertion failures on KML files. [#7372](https://github.com/mapbox/mapbox-navigation-android/pull/7372) -- Fixed MapMatching isuue where it might have picked the wrong tunnel. [#7372](https://github.com/mapbox/mapbox-navigation-android/pull/7372) -- Fixes an issue where trail layer that indicates the traveled portion of the route was visible below inactive legs. [#7363](https://github.com/mapbox/mapbox-navigation-android/pull/7363) -- Nav SDK now preserves charging stations after reroute. [#7369](https://github.com/mapbox/mapbox-navigation-android/pull/7369) -- Fixed an issue where `RoutingTilesOptions#tilesBaseUri` was used as a base url for route refresh requests instead of `RouteOptions#baseUrl`. [#7294](https://github.com/mapbox/mapbox-navigation-android/pull/7294) -- Improved Copilot to send a proper type with events of type `DriveEndsEvent`. [#7236](https://github.com/mapbox/mapbox-navigation-android/pull/7236) -- Added a Copilot option that allows to disable recording Free Drive histories. [#7276](https://github.com/mapbox/mapbox-navigation-android/pull/7276) -- Added experimental `metadata` property to `LegWaypoint` class. This property exposes the corresponding `DirectionsWaypoint#metadata`. [#7259](https://github.com/mapbox/mapbox-navigation-android/pull/7259) -- Added Copilot option that allows to split history files by duration. [#7232](https://github.com/mapbox/mapbox-navigation-android/pull/7232) -- Added Copilot options that allow to limit the number and total size of history files to be sent per session. [#7232](https://github.com/mapbox/mapbox-navigation-android/pull/7232) -- Route request timeout errors are now considered failures as opposed to cancellations (`NavigationRouterCallback#onFailure` will be invoked instead of `NavigationRouterCallback#onCanceled`). [#7319](https://github.com/mapbox/mapbox-navigation-android/pull/7319) -- Fixed an issue where location might have been snapped to an incorrect road when previously location updates had been inactive. [#7319](https://github.com/mapbox/mapbox-navigation-android/pull/7319) -- Fixed an issue where in case of poor location signal it might have been snapped to a road, which is above/below the correct one. [#7319](https://github.com/mapbox/mapbox-navigation-android/pull/7319) -- Added experimental `MapboxNavigation#etcGateApi` so that the app can provide data about passed ETC gates. [#7295](https://github.com/mapbox/mapbox-navigation-android/pull/7295) -- Fixed an issue where road closures where not displayed for inactive legs of the route. [#7322](https://github.com/mapbox/mapbox-navigation-android/pull/7322) -- Added experimental and temporary (i.e. it will be removed in one of the next releases) `OnlineRouteAlternativesSwitch` which requests online route when the current route is offline and automatically switches if such a route is found. It's designed for the case when platform's reachability API doesn't work reliably. [#7245](https://github.com/mapbox/mapbox-navigation-android/pull/7245) -- Fixed an issue where RouteReplaySession might not have started playing a route if it was created approximately at the same time when routes were set to `MapboxNavigation`. [#7293](https://github.com/mapbox/mapbox-navigation-android/pull/7293) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.15.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.15.0)) -- Mapbox Navigation Native `v148.0.0` -- Mapbox Core Common `v23.7.0` -- Mapbox Java `v6.13.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0)) - - -## Mapbox Navigation SDK 2.15.0-rc.1 - 20 July, 2023 -### Changelog -[Changes between v2.15.0-beta.1 and v2.15.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.15.0-beta.1...v2.15.0-rc.1) - -#### Features -- Introduced `RoutesInvalidatedObserver` to be notified about routes invalidation. When this observer is fired, the routes passed as an argument will not be refreshed anymore, because they expired. It is recommended to rebuild a route in this case. Example usage: [#7318](https://github.com/mapbox/mapbox-navigation-android/pull/7318) -``` -mapboxNavigation.registerRoutesInvalidatedObserver { routes -> - val invalidatedIds = routes.map { it.id } - val currentRoutes = mapboxNavigation.getNavigationRoutes() - val primaryRoute = currentRoutes.firstOrNull() - if (routes.any { it.id == primaryRoute?.id }) { - // primary route is outdated - trigger reroute - mapboxNavigation.getRerouteController()?.reroute(object : NavigationRerouteController.RoutesCallback { - override fun onNewRoutes( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setNavigationRoutes(routes) - } - }) - } else { - // remove outdated alternatives - mapboxNavigation.setNavigationRoutes(currentRoutes.filterNot { it.id in invalidatedIds }) - } -} -``` -- Introduced `MERGING_AREA` RoadObject type. You can receive Merging Areas via `RouteProgress#upcomingRoadObjects` and via `EHorizonObserver`. Note: to enable merging area collection when using EHorizon, set `AlertServiceOptions#collectMergingAreas` to true. [#7358](https://github.com/mapbox/mapbox-navigation-android/pull/7358) -- Added new option to control gender of voice `MapboxSpeechApiOptions.gender`. [#7337](https://github.com/mapbox/mapbox-navigation-android/pull/7337) - -#### Bug fixes and improvements -- Now updated via `MapboxNavigation#onEvDataUpdated` parameters are added to continuous alternatives requests. [#7380](https://github.com/mapbox/mapbox-navigation-android/pull/7380) -- Fixed snapping to a tunnel after driving out of underground parking. [#7372](https://github.com/mapbox/mapbox-navigation-android/pull/7372) -- Fixed ADASIS assertion failures on KML files. [#7372](https://github.com/mapbox/mapbox-navigation-android/pull/7372) -- Fixed MapMatching isuue where it might have picked the wrong tunnel. [#7372](https://github.com/mapbox/mapbox-navigation-android/pull/7372) -- Fixes an issue where trail layer that indicates the traveled portion of the route was visible below inactive legs. [#7363](https://github.com/mapbox/mapbox-navigation-android/pull/7363) -- Nav SDK now preserves charging stations after reroute. [#7369](https://github.com/mapbox/mapbox-navigation-android/pull/7369) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.15.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.15.0-rc.1)) -- Mapbox Navigation Native `v145.0.0` -- Mapbox Core Common `v23.7.0-rc.1` -- Mapbox Java `v6.13.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.13.0-beta.1)) - - -## Mapbox Navigation SDK 2.15.0-beta.1 - 07 July, 2023 -### Changelog -[Changes between v2.14.1 and v2.15.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.14.1...v2.15.0-beta.1) - -#### Features -- Added new options to `RouteLineColorResources` to style congestion, restrictions, and closures colors on inactive legs when `MapboxRouteLineOptions#styleInactiveRouteLegsIndependently` is enabled. The values default to transparent. [#7322](https://github.com/mapbox/mapbox-navigation-android/pull/7322) - -#### Bug fixes and improvements -- Fixed an issue where `RoutingTilesOptions#tilesBaseUri` was used as a base url for route refresh requests instead of `RouteOptions#baseUrl`. [#7294](https://github.com/mapbox/mapbox-navigation-android/pull/7294) -- Improved Copilot to send a proper type with events of type `DriveEndsEvent`. [#7236](https://github.com/mapbox/mapbox-navigation-android/pull/7236) -- Added a Copilot option that allows to disable recording Free Drive histories. [#7276](https://github.com/mapbox/mapbox-navigation-android/pull/7276) -- Added experimental `metadata` property to `LegWaypoint` class. This property exposes the corresponding `DirectionsWaypoint#metadata`. [#7259](https://github.com/mapbox/mapbox-navigation-android/pull/7259) -- Added Copilot option that allows to split history files by duration. [#7232](https://github.com/mapbox/mapbox-navigation-android/pull/7232) -- Added Copilot options that allow to limit the number and total size of history files to be sent per session. [#7232](https://github.com/mapbox/mapbox-navigation-android/pull/7232) -- Route request timeout errors are now considered failures as opposed to cancellations (`NavigationRouterCallback#onFailure` will be invoked instead of `NavigationRouterCallback#onCanceled`). [#7319](https://github.com/mapbox/mapbox-navigation-android/pull/7319) -- Fixed an issue where location might have been snapped to an incorrect road when previously location updates had been inactive. [#7319](https://github.com/mapbox/mapbox-navigation-android/pull/7319) -- Fixed an issue where in case of poor location signal it might have been snapped to a road, which is above/below the correct one. [#7319](https://github.com/mapbox/mapbox-navigation-android/pull/7319) -- Added experimental `MapboxNavigation#etcGateApi` so that the app can provide data about passed ETC gates. [#7295](https://github.com/mapbox/mapbox-navigation-android/pull/7295) -- Fixed an issue where road closures where not displayed for inactive legs of the route. [#7322](https://github.com/mapbox/mapbox-navigation-android/pull/7322) -- Added experimental and temporary (i.e. it will be removed in one of the next releases) `OnlineRouteAlternativesSwitch` which requests online route when the current route is offline and automatically switches if such a route is found. It's designed for the case when platform's reachability API doesn't work reliably. [#7245](https://github.com/mapbox/mapbox-navigation-android/pull/7245) -- Fixed an issue where RouteReplaySession might not have started playing a route if it was created approximately at the same time when routes were set to `MapboxNavigation`. [#7293](https://github.com/mapbox/mapbox-navigation-android/pull/7293) - -#### Known issues :warning: -- In case an app provides custom `Router` implementation to Nav SDK, the Nav SDK doesn't trigger `NavigationRouteAlternativesObserver` with online alternatives when current route is offline. - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.15.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.15.0-beta.1)) -- Mapbox Navigation Native `v143.0.0` -- Mapbox Core Common `v23.7.0-beta.1` -- Mapbox Java `v6.12.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.12.0)) - - -## Mapbox Navigation SDK 2.14.1 - 06 July, 2023 -### Changelog -[Changes between v2.14.0 and v2.14.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.14.0...v2.14.1) - -#### Features -- Added new options to `RouteLineColorResources` to style congestion, restrictions, and closures colors on inactive legs when `MapboxRouteLineOptions#styleInactiveRouteLegsIndependently` is enabled. The values default to transparent. [#7322](https://github.com/mapbox/mapbox-navigation-android/pull/7322) - -#### Bug fixes and improvements -- Route request timeout errors are now considered failures as opposed to cancellations (`NavigationRouterCallback#onFailure` will be invoked instead of `NavigationRouterCallback#onCanceled`). [#7324](https://github.com/mapbox/mapbox-navigation-android/pull/7324) -- Fixed an issue where road closures where not displayed for inactive legs of the route. [#7322](https://github.com/mapbox/mapbox-navigation-android/pull/7322) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.14.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.14.1)) -- Mapbox Navigation Native `v137.1.2` -- Mapbox Core Common `v23.6.0` -- Mapbox Java `v6.12.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.12.0)) - - -## Mapbox Navigation SDK 2.14.0 - 23 June, 2023 -### Changelog -[Changes between v2.13.0 and v2.14.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.13.0...v2.14.0) - -#### Features - -- Added `RouteProgress#inParkingAisle` field indicating whether the current location belongs to a parking aisle. [#7212](https://github.com/mapbox/mapbox-navigation-android/pull/7212) - -#### Bug fixes and improvements -- Fixed an issue where `RoutingTilesOptions#tilesBaseUri` was used as a base url for route refresh requests instead of `RouteOptions#baseUrl`. [#7292](https://github.com/mapbox/mapbox-navigation-android/pull/7292) -- Fixed an issue where RouteReplaySession might not have started playing a route if it was created approximately at the same time when routes were set to `MapboxNavigation`. [#7299](https://github.com/mapbox/mapbox-navigation-android/pull/7299) -- Added experimental and temporary (i.e. it will be removed in one of the next releases) `OnlineRouteAlternativesSwitch` which requests online route when the current route is offline and automatically switches if such a route is found. It's designed for the case when platform's reachability API doesn't work reliably. [#7263](https://github.com/mapbox/mapbox-navigation-android/pull/7263) -- Fixed an issue with Copilot that caused history files without user feedback to remain on disk when using `shouldSendHistoryOnlyWithFeedback` option. [#7233](https://github.com/mapbox/mapbox-navigation-android/pull/7233) -- Fixed an issue with too high alternative route requests frequency in case of only one route being present in the route response. [#7247](https://github.com/mapbox/mapbox-navigation-android/pull/7247) -- Fixed an issue with positioning lag in tunnels. [#7247](https://github.com/mapbox/mapbox-navigation-android/pull/7247) -- Fixed an issue where no `MapboxRouteLineApi` callbacks or suspensions for any function would have been invoked if map instance was destroyed while `MapboxRouteLineApi#findClosestRoute` was in progress. [#7213](https://github.com/mapbox/mapbox-navigation-android/pull/7213) -- Decreased java memory usage for route requests, alternatives requests, reroutes. [#7201](https://github.com/mapbox/mapbox-navigation-android/pull/7201) -- Deprecated SpeedLimit class and introduced SpeedLimitInfo instead. The latter uses speed in the corresponding units (as opposed to speedKmph in SpeedLimit) and provides unit and sign info even if the limit itself is unknown. [#7214](https://github.com/mapbox/mapbox-navigation-android/pull/7214) -- Fixed an issue where first device location was not used when replay was active either in Drop-In or when using `ReplayRouteSession` directly. [#7246](https://github.com/mapbox/mapbox-navigation-android/pull/7246) -- Supported displaying distances in yards for imperial UnitType in the UK locale. [#6786](https://github.com/mapbox/mapbox-navigation-android/pull/6786) -- Changed `RouteProgress#hasUnexpectedUpcomingClosures` behavior: now it returns false if there are only "expected" closures. A closure is considered expected if it was present in the original route response. An unexpected closure is the one that appears after route refresh. [#7237](https://github.com/mapbox/mapbox-navigation-android/pull/7237) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.14.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.14.1)) -- Mapbox Navigation Native `v137.1.1` -- Mapbox Core Common `v23.6.0` -- Mapbox Java `v6.12.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.12.0)) - - -## Mapbox Navigation SDK 2.13.2 - 15 June, 2023 -### Changelog -[Changes between v2.13.1 and v2.13.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.13.1...v2.13.2) - -#### Features - - -#### Bug fixes and improvements -- Fixed redundant route alternatives request when a single primary route is set. [#7267](https://github.com/mapbox/mapbox-navigation-android/pull/7267) -- Fixed lagging of enhanced location updates, i.e. when they're behind the real position, in tunnels. [#7267](https://github.com/mapbox/mapbox-navigation-android/pull/7267) -- Added experimental and temporary (i.e. it will be removed in one of the next releases) `OnlineRouteAlternativesSwitch` which requests online route when the current route is offline and automatically switches if such a route is found. It's designed for the case when platform's reachability API doesn't work reliably. [#7264](https://github.com/mapbox/mapbox-navigation-android/pull/7264) -- Changed `RouteProgress#hasUnexpectedUpcomingClosures` behavior: now it returns false if there are only "expected" closures. A closure is considered expected if it was present in the original route response. An unexpected closure is the one that appears after route refresh. [#7240](https://github.com/mapbox/mapbox-navigation-android/pull/7240) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.13.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.13.0)) -- Mapbox Navigation Native `v132.5.1` -- Mapbox Core Common `v23.5.0` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.7.5 - 15 June, 2023 -### Changelog -[Changes between v2.7.4 and v2.7.5](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.4...v2.7.5) - -#### Features - - -#### Bug fixes and improvements - -- Fixed an issue where `RoutingTilesOptions#tilesBaseUri` was used as a base url for route refresh requests instead of `RouteOptions#baseUrl`. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.7.0)) -- Mapbox Navigation Native `v111.2.0` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.14.0-rc.1 - 09 June, 2023 -### Changelog -[Changes between v2.14.0-beta.1 and v2.14.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.14.0-beta.1...v2.14.0-rc.1) - -#### Features -- Added `RouteProgress#inParkingAisle` field indicating whether the current location belongs to a parking aisle. [#7212](https://github.com/mapbox/mapbox-navigation-android/pull/7212) - -#### Bug fixes and improvements -- Fixed an issue with Copilot that caused history files without user feedback to remain on disk when using `shouldSendHistoryOnlyWithFeedback` option. [#7233](https://github.com/mapbox/mapbox-navigation-android/pull/7233) -- Fixed an issue with too high alternative route requests frequency in case of only one route being present in the route response. [#7247](https://github.com/mapbox/mapbox-navigation-android/pull/7247) -- Fixed an issue with positioning lag in tunnels. [#7247](https://github.com/mapbox/mapbox-navigation-android/pull/7247) -- Fixed an issue where no `MapboxRouteLineApi` callbacks or suspensions for any function would have been invoked if map instance was destroyed while `MapboxRouteLineApi#findClosestRoute` was in progress. [#7213](https://github.com/mapbox/mapbox-navigation-android/pull/7213) -- Decreased java memory usage for route requests, alternatives requests, reroutes. [#7201](https://github.com/mapbox/mapbox-navigation-android/pull/7201) -- Deprecated SpeedLimit class and introduced SpeedLimitInfo instead. The latter uses speed in the corresponding units (as opposed to speedKmph in SpeedLimit) and provides unit and sign info even if the limit itself is unknown. [#7214](https://github.com/mapbox/mapbox-navigation-android/pull/7214) -- Fixed an issue where first device location was not used when replay was active either in Drop-In or when using `ReplayRouteSession` directly. [#7246](https://github.com/mapbox/mapbox-navigation-android/pull/7246) -- Supported displaying distances in yards for imperial UnitType in the UK locale. [#6786](https://github.com/mapbox/mapbox-navigation-android/pull/6786) -- Changed `RouteProgress#hasUnexpectedUpcomingClosures` behavior: now it returns false if there are only "expected" closures. A closure is considered expected if it was present in the original route response. An unexpected closure is the one that appears after route refresh. [#7237](https://github.com/mapbox/mapbox-navigation-android/pull/7237) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.14.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.14.0-rc.1)) -- Mapbox Navigation Native `v136.0.1` -- Mapbox Core Common `v23.6.0-rc.1` -- Mapbox Java `v6.12.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.12.0)) - - -## Mapbox Navigation SDK 2.13.1 - 31 May, 2023 -### Changelog -[Changes between v2.13.0 and v2.13.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.13.0...v2.13.1) - -#### Features - - -#### Bug fixes and improvements -- Fixed offline-online routes switch via route alternative observer for the case when new online route is the same as current offline. [#7215](https://github.com/mapbox/mapbox-navigation-android/pull/7215) -- Improved road snapping for the case when GPS signal is unstable. When GPS signal becomes unstable, LocationMatcherResult#isOffRoad stays false and LocationMatcherResult#enhancedLocation is snapped to a road, the effect takes place until stabilisation of GPS signal. [#7215](https://github.com/mapbox/mapbox-navigation-android/pull/7215) -- Fixed `NavigationRoutes#waypoints` being null for EV offline fallback. [#7165](https://github.com/mapbox/mapbox-navigation-android/pull/7165) - -#### Known issues :warning: -- `NavigationRouteAlternativesObserver#onRouteAlternatives` could be called with an online alternative that is the same as current offline route except for its origin and annotations. -`MapboxNavigation#getAlternativeMetadataFor` will return null for that alternative. -Calling `MapboxNavigation#setNavigationRoutes(listOf(currentOfflinePrimaryRoute, newOnlineAlternative))` for that case won't make any effect as the alternative will be ignored. -Make sure that you implemented routes alternatives observers with respect to offline-online scenarios as documentation suggests. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.13.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.13.0)) -- Mapbox Navigation Native `v132.3.0` -- Mapbox Core Common `v23.5.0` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.14.0-beta.1 - 26 May, 2023 -### Changelog -[Changes between v2.13.0 and v2.14.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.13.0...v2.14.0-beta.1) - -#### Features -- Added support for uncompressed memory mapped tiles that could be enabled via config options(turned off by default). [#7197](https://github.com/mapbox/mapbox-navigation-android/pull/7197) - -#### Bug fixes and improvements -- Improved road snapping for the case when GPS signal is unstable. When GPS signal becomes unstable, LocationMatcherResult#isOffRoad stays false and LocationMatcherResult#enhancedLocation is snapped to a road, the effect takes place until stabilisation of GPS signal. [#7197](https://github.com/mapbox/mapbox-navigation-android/pull/7197) -- Added `MapboxNavigation#currentLegIndex`. Use this method to correctly pass leg index to `MapboxRouteLineAPI#setNavigationRoutes` method, this is especially important if you use independent inactive leg styling: [#7102](https://github.com/mapbox/mapbox-navigation-android/pull/7102) -```kotlin -val routesObserver = RoutesObserver { - routeLineAPI.setNavigationRoutes(result.navigationRoutes, mapboxNavigation.currentLegIndex()).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } -} -``` -- Fixed offline-online routes switch via route alternative observer for the case when new online route is the same as current offline. [#7195](https://github.com/mapbox/mapbox-navigation-android/pull/7195) -- Fixed `NavigationRoutes#waypoints` being null for EV offline fallback. [#7165](https://github.com/mapbox/mapbox-navigation-android/pull/7165) - -#### Known issues :warning: -- `NavigationRouteAlternativesObserver#onRouteAlternatives` could be called with an online alternative that is the same as current offline route except for its origin and annotations. -`MapboxNavigation#getAlternativeMetadataFor` will return null for that alternative. -Calling `MapboxNavigation#setNavigationRoutes(listOf(currentOfflinePrimaryRoute, newOnlineAlternative))` for that case won't make any effect as the alternative will be ignored. -Make sure that you implemented routes alternatives observers with respect to offline-online scenarios as documentation suggests. - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.14.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.14.0-beta.1)) -- Mapbox Navigation Native `v135.0.0` -- Mapbox Core Common `v23.6.0-beta.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.13.0 - 12 May, 2023 -### Changelog -[Changes between v2.12.0 and v2.13.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0...v2.13.0) - -#### Features - -- Added `RouteProgress#nextLegWaypoint` to be used in `ArrivalObserver#onWaypointArrival` to understand which waypoint the user has arrived at. [#7096](https://github.com/mapbox/mapbox-navigation-android/pull/7096) - -#### Bug fixes and improvements - -- Improved quality of continuous alternatives, now the mechanism respects routes from current navigation session. [#7137](https://github.com/mapbox/mapbox-navigation-android/pull/7137) -- Improved EV offline navigation, now it fallbacks to a regular onboard routing. [#7137](https://github.com/mapbox/mapbox-navigation-android/pull/7137) -- Improved location simulation when DR ends, i.e. when a driver leaves a tunnel. [#7137](https://github.com/mapbox/mapbox-navigation-android/pull/7137) -- Fixed an issue where the route lines didn't apply `RouteLineResources`'s custom scale expressions correctly. [#7132](https://github.com/mapbox/mapbox-navigation-android/pull/7132) -- Fixed an issue where route lines could flicker when `MapboxRouteLineOptions` where changed and re-applied to rebuilt `MapboxRouteLineView` and `MapboxRouteLineApi` instances. [#7140](https://github.com/mapbox/mapbox-navigation-android/pull/7140) -- Deprecated `MapboxNavigation#setRerouteController` method. Using custom rerouting logic is now deprecated. [#7129](https://github.com/mapbox/mapbox-navigation-android/pull/7129) -- Introduced `MapboxNavigation#setRerouteEnabled` to disable/enable reroutes instead of using custom reroute controller. By default rerouting is enabled. [#7129](https://github.com/mapbox/mapbox-navigation-android/pull/7129) -- Fixed an issue where `NavigationCamera` animations would stop executing if experimental `AnimationThreadController.useBackgroundThread()` option was enabled. [#7143](https://github.com/mapbox/mapbox-navigation-android/pull/7143) -- Fixed an issue where `DirectionsRoute#duration` ignored charge time after refresh operation. [#7121](https://github.com/mapbox/mapbox-navigation-android/pull/7121) -- Fixed first voice instruction being pronounced in offline mode when using either Drop-In UI or `MapboxAudioGuidance`. [#7072](https://github.com/mapbox/mapbox-navigation-android/pull/7072) -- Corrected a bug that mistakenly identified off-road movement when users exited tunnels or moved alongside the road. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Enabled dead reckoning for the auto profile in case of signal loss on a bridge. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Improved the accuracy of active guidance for the auto profile by increasing the route stickiness. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Introduced a custom configuration option to disable interactions with all route tiles. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Implemented a mechanism that allows the local road graph data updates to be rolled back in case of data problems. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Fixed an issue where `NavigationRouterCallback` might have been invoked twice. [#7086](https://github.com/mapbox/mapbox-navigation-android/pull/7086) -- Fixed an issue where long route calculation might have failed. [#7086](https://github.com/mapbox/mapbox-navigation-android/pull/7086) -- Added a custom config boolean option `disableAccessToRoutingTiles` to disable all route tiles interaction. [#7086](https://github.com/mapbox/mapbox-navigation-android/pull/7086) -- Improved inactive leg independent styling: now the inactive leg will be styled differently right away, not only when the route progress updates begin. [#7078](https://github.com/mapbox/mapbox-navigation-android/pull/7078) -- Added optional parameter `initialLegIndex` to `MapboxRouteLineAPI#setNavigationRouteLines` and `MapboxRouteLineAPI#setNavigationRoutes` to explicitly specify which leg is active, 0 by default. [#7078](https://github.com/mapbox/mapbox-navigation-android/pull/7078) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.13.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.13.0)) -- Mapbox Navigation Native `v132.2.0` -- Mapbox Core Common `v23.5.0` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.12.1 - 11 May, 2023 -### Changelog -[Changes between v2.12.0 and v2.12.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0...v2.12.1) - -#### Features - - -#### Bug fixes and improvements -- Internal improvements. - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.1)) -- Mapbox Navigation Native `v130.2.0` -- Mapbox Core Common `v23.4.0` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.13.0-rc.1 - 29 April, 2023 -### Changelog -[Changes between v2.13.0-beta.1 and v2.13.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.13.0-beta.1...v2.13.0-rc.1) - -#### Features - - -#### Bug fixes and improvements -- Improved quality of continuous alternatives, now the mechanism respects routes from current navigation session. [#7137](https://github.com/mapbox/mapbox-navigation-android/pull/7137) -- Improved EV offline navigation, now it fallbacks to a regular onboard routing. [#7137](https://github.com/mapbox/mapbox-navigation-android/pull/7137) -- Improved location simulation when DR ends, i.e. when a driver leaves a tunnel. [#7137](https://github.com/mapbox/mapbox-navigation-android/pull/7137) -- Fixed an issue where the route lines didn't apply `RouteLineResources`'s custom scale expressions correctly. [#7132](https://github.com/mapbox/mapbox-navigation-android/pull/7132) -- Fixed an issue where route lines could flicker when `MapboxRouteLineOptions` where changed and re-applied to rebuilt `MapboxRouteLineView` and `MapboxRouteLineApi` instances. [#7140](https://github.com/mapbox/mapbox-navigation-android/pull/7140) -- Deprecated `MapboxNavigation#setRerouteController` method. Using custom rerouting logic is now deprecated. [#7129](https://github.com/mapbox/mapbox-navigation-android/pull/7129) -- Introduced `MapboxNavigation#setRerouteEnabled` to disable/enable reroutes instead of using custom reroute controller. By default rerouting is enabled. [#7129](https://github.com/mapbox/mapbox-navigation-android/pull/7129) -- Fixed an issue where `NavigationCamera` animations would stop executing if experimental `AnimationThreadController.useBackgroundThread()` option was enabled. [#7143](https://github.com/mapbox/mapbox-navigation-android/pull/7143) -- Fixed an issue where `DirectionsRoute#duration` ignored charge time after refresh operation. [#7121](https://github.com/mapbox/mapbox-navigation-android/pull/7121) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.13.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.13.0-rc.1)) -- Mapbox Navigation Native `v132.0.0` -- Mapbox Core Common `v23.5.0-rc.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.13.0-beta.1 - 14 April, 2023 -### Changelog -[Changes between v2.12.0 and v2.13.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0...v2.13.0-beta.1) - -#### Features -- Added `RouteProgress#nextLegWaypoint` to be used in `ArrivalObserver#onWaypointArrival` to understand which waypoint the user has arrived at. [#7096](https://github.com/mapbox/mapbox-navigation-android/pull/7096) - -#### Bug fixes and improvements -- Fixed first voice instruction being pronounced in offline mode when using either Drop-In UI or `MapboxAudioGuidance`. [#7072](https://github.com/mapbox/mapbox-navigation-android/pull/7072) -- Corrected a bug that mistakenly identified off-road movement when users exited tunnels or moved alongside the road. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Enabled dead reckoning for the auto profile in case of signal loss on a bridge. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Improved the accuracy of active guidance for the auto profile by increasing the route stickiness. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Introduced a custom configuration option to disable interactions with all route tiles. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Implemented a mechanism that allows the local road graph data updates to be rolled back in case of data problems. [#7111](https://github.com/mapbox/mapbox-navigation-android/pull/7111) -- Fixed an issue where `NavigationRouterCallback` might have been invoked twice. [#7086](https://github.com/mapbox/mapbox-navigation-android/pull/7086) -- Fixed an issue where long route calculation might have failed. [#7086](https://github.com/mapbox/mapbox-navigation-android/pull/7086) -- Added a custom config boolean option `disableAccessToRoutingTiles` to disable all route tiles interaction. [#7086](https://github.com/mapbox/mapbox-navigation-android/pull/7086) -- Improved inactive leg independent styling: now the inactive leg will be styled differently right away, not only when the route progress updates begin. [#7078](https://github.com/mapbox/mapbox-navigation-android/pull/7078) -- Added optional parameter `initialLegIndex` to `MapboxRouteLineAPI#setNavigationRouteLines` and `MapboxRouteLineAPI#setNavigationRoutes` to explicitly specify which leg is active, 0 by default. [#7078](https://github.com/mapbox/mapbox-navigation-android/pull/7078) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.13.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.13.0-beta.1)) -- Mapbox Navigation Native `v131.0.0` -- Mapbox Core Common `v23.5.0-beta.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.10.4 - 13 April, 2023 -### Changelog -[Changes between v2.10.3 and v2.10.4](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.3...v2.10.4) - -#### Features - - -#### Bug fixes and improvements - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.3)) -- Mapbox Navigation Native `v123.3.3` -- Mapbox Core Common `v23.2.3` -- Mapbox Java `v6.10.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0)) - - -## Mapbox Navigation SDK 2.12.0 - 07 April, 2023 -### Changelog -[Changes between v2.11.0 and v2.12.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0...v2.12.0) - -#### Features - -- Added support for voice languages in offline: Lithuanian, Hungarian, Finnish, Serbian, Greek, Czech, and Slovak. [#7061](https://github.com/mapbox/mapbox-navigation-android/pull/7061) -- Introduced `RoutesRenderedCallback` along with overloads to `MapboxRouteLineView#renderRouteDrawData` and `MapboxRouteLineView#renderClearRouteLineValue` to notified whenever the routes are rendered on map / cleared from map. [#7058](https://github.com/mapbox/mapbox-navigation-android/pull/7058) -- Introduced `FollowingCameraFramingStrategy`, an interface that defines a strategy used to calculate points to be framed for the FOLLOWING camera mode. Added `FollowingFrameOptions.framingStrategy` property that allows injection of custom `FollowingCameraFramingStrategy`. [#7041](https://github.com/mapbox/mapbox-navigation-android/pull/7041) -- Introduced `MapboxRouteLineOptions#lineDepthOcclusionFactor` parameter to control route line layer opacity based on occlusion from 3D objects. [#7038](https://github.com/mapbox/mapbox-navigation-android/pull/7038) -- Added `RouteRefreshController#pauseRouteRefreshes` and `RouteRefreshController#resumeRouteRefreshes` to pause and resume planned route refreshes correspondingly. [#6976](https://github.com/mapbox/mapbox-navigation-android/pull/6976) -- Added `RouteRefreshController` interface to manage route refreshes. Retrieve it via `MapboxNavigation#routeRefreshController`. [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) -- Added `RouteRefreshController#requestImmediateRouteRefresh` to trigger route refresh request immediately. [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) -- Moved `MapboxNavigation#registerRouteRefreshStateObserver` to `RouteRefreshController#registerRouteRefreshStateObserver`. To migrate, change: [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) - ```kotlin - mapboxNavigation.registerRouteRefreshStateObserver(observer) - ``` - to - ```kotlin - mapboxNavigation.routeRefreshController.registerRouteRefreshStateObserver(observer) - ``` -- Moved `MapboxNavigation#unregisterRouteRefreshStateObserver` to `RouteRefreshController#unregisterRouteRefreshStateObserver`. To migrate, change: [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) - ```kotlin - mapboxNavigation.unregisterRouteRefreshStateObserver(observer) - ``` - to - ```kotlin - mapboxNavigation.routeRefreshController.unregisterRouteRefreshStateObserver(observer) - ``` - - -#### Bug fixes and improvements -- Fixed an issue where `NavigationRouterCallback` might have been invoked twice. [#7087](https://github.com/mapbox/mapbox-navigation-android/pull/7087) -- Fixed an issue where long route calculation might have failed. [#7087](https://github.com/mapbox/mapbox-navigation-android/pull/7087) -- Added a custom config boolean option `disableAccessToRoutingTiles` to disable all route tiles interaction. [#7087](https://github.com/mapbox/mapbox-navigation-android/pull/7087) -- Fixed Native crash signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) that may happen at libmapbox-common.so at `SqlitePersistentStorage#createQuery`. [#7061](https://github.com/mapbox/mapbox-navigation-android/pull/7061) -- Fixed the case when `ReplayLocationEngine` returned outdated location at the beginning of a new replay trip session. [#7022](https://github.com/mapbox/mapbox-navigation-android/pull/7022) -- Fixed false off-road detection on turns. [#7046](https://github.com/mapbox/mapbox-navigation-android/pull/7046) -- Updated off-road detector for automotive to stay on road even if we are further than 10 meters from the road. [#7046](https://github.com/mapbox/mapbox-navigation-android/pull/7046) -- Improved cache key performance for NavigationRoutes in order to address ANR experienced when setting long routes. [#6915](https://github.com/mapbox/mapbox-navigation-android/pull/6915) -- Fixed "global reference table overflow" by reducing the amount of objects transferred through the JNI on every route progress update. [#7030](https://github.com/mapbox/mapbox-navigation-android/pull/7030) -- Improved `MapboxRouteLineView` to prevent a flash of rendered route geometries on the map when the view instance is recreated to apply new `MapboxRouteLineOptions`. [#7043](https://github.com/mapbox/mapbox-navigation-android/pull/7043) -- Fixed memory consumption issue on onboard router request cancellation. [#7029](https://github.com/mapbox/mapbox-navigation-android/pull/7029) -- Fixed route progress vanishing point update issue introduced by feature that displays the active leg of the route line above inactive legs for multi-leg routes. [#6974](https://github.com/mapbox/mapbox-navigation-android/pull/6974) -- Fixed an ANR caused by Copilot processing long routes. [#6978](https://github.com/mapbox/mapbox-navigation-android/pull/6978) -- Fixed revealing of access token in the logs during tiles downloading. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Optimized RAM usage for onboard routing. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Increased the distance at which the navigator discards passed alternative route in `NavigationRouteAlternativesObserver#onRouteAlternatives`. This reduces the chance of discarding alternative routes to which a driver deviated from the primary route. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Improved duration calculation for EV routes to account for charging time. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Added snapping feature to the navigation for walking and cycling profiles. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Started invalidating passed alternatives conditionally on the fork structure. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Started using offline router if server returns 404 or 403. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Increased the distance at which the navigator discards passed alternative route in `NavigationRouteAlternativesObserver#onRouteAlternatives`. This reduces the chance of discarding alternative routes to which a driver deviated from the primary route. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed a possible native crash in `ElectronicHorizonObserver` on application exit. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed redundant memory usage for onboard router. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed inconsistent choice between re-route and switching to alternative due to the fact that the alternative was not checked on every off-route state. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed a crash caused by segfault "wstring_convert: from_bytes" error for HTTP responses. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Made costing algorithms using lightweight info about road graph (should improve performance). [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Switched all realtime sensitive operations onto a separate thread instead of low-prioritised background thread pool. No long status delays should happen in the future. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.1)) -- Mapbox Navigation Native `v130.1.0` -- Mapbox Core Common `v23.4.0` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.12.0-rc.1 - 31 March, 2023 -### Changelog -[Changes between v2.12.0-beta.3 and v2.12.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0-beta.3...v2.12.0-rc.1) - -#### Features -- Added support for voice languages in offline: Lithuanian, Hungarian, Finnish, Serbian, Greek, Czech, and Slovak. [#7061](https://github.com/mapbox/mapbox-navigation-android/pull/7061) -- Introduced `RoutesRenderedCallback` along with overloads to `MapboxRouteLineView#renderRouteDrawData` and `MapboxRouteLineView#renderClearRouteLineValue` to notified whenever the routes are rendered on map / cleared from map. [#7058](https://github.com/mapbox/mapbox-navigation-android/pull/7058) - -#### Bug fixes and improvements -- Fixed Native crash signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) that may happen at libmapbox-common.so at `SqlitePersistentStorage#createQuery`. [#7061](https://github.com/mapbox/mapbox-navigation-android/pull/7061) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.1)) -- Mapbox Navigation Native `v130.0.0` -- Mapbox Core Common `v23.4.0` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.12.0-beta.3 - 24 March, 2023 -### Changelog -[Changes between v2.12.0-beta.2 and v2.12.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0-beta.2...v2.12.0-beta.3) - -#### Features -- Introduced `FollowingCameraFramingStrategy`, an interface that defines a strategy used to calculate points to be framed for the FOLLOWING camera mode. Added `FollowingFrameOptions.framingStrategy` property that allows injection of custom `FollowingCameraFramingStrategy`. [#7041](https://github.com/mapbox/mapbox-navigation-android/pull/7041) -- Introduced `MapboxRouteLineOptions#lineDepthOcclusionFactor` parameter to control route line layer opacity based on occlusion from 3D objects. [#7038](https://github.com/mapbox/mapbox-navigation-android/pull/7038) - -#### Bug fixes and improvements -- Fixed the case when `ReplayLocationEngine` returned outdated location at the beginning of a new replay trip session. [#7022](https://github.com/mapbox/mapbox-navigation-android/pull/7022) -- Fixed false off-road detection on turns. [#7046](https://github.com/mapbox/mapbox-navigation-android/pull/7046) -- Updated off-road detector for automotive to stay on road even if we are further than 10 meters from the road. [#7046](https://github.com/mapbox/mapbox-navigation-android/pull/7046) -- Improved cache key performance for NavigationRoutes in order to address ANR experienced when setting long routes. [#6915](https://github.com/mapbox/mapbox-navigation-android/pull/6915) -- Fixed "global reference table overflow" by reducing the amount of objects transferred through the JNI on every route progress update. [#7030](https://github.com/mapbox/mapbox-navigation-android/pull/7030) -- Improved `MapboxRouteLineView` to prevent a flash of rendered route geometries on the map when the view instance is recreated to apply new `MapboxRouteLineOptions`. [#7043](https://github.com/mapbox/mapbox-navigation-android/pull/7043) - -#### Known issues :warning: -- Native crash signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) may happen at libmapbox-common.so at `SqlitePersistentStorage#createQuery`. - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.0-rc.1)) -- Mapbox Navigation Native `v129.0.0` -- Mapbox Core Common `v23.4.0-rc.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.12.0-beta.2 - 17 March, 2023 -### Changelog -[Changes between v2.12.0-beta.1 and v2.12.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0-beta.1...v2.12.0-beta.2) - -#### Features - - -#### Bug fixes and improvements -- Fixed memory consumption issue on onboard router request cancellation. [#7029](https://github.com/mapbox/mapbox-navigation-android/pull/7029) -- Fixed route progress vanishing point update issue introduced by feature that displays the active leg of the route line above inactive legs for multi-leg routes. [#6974](https://github.com/mapbox/mapbox-navigation-android/pull/6974) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.0-rc.1)) -- Mapbox Navigation Native `v128.0.0` -- Mapbox Core Common `v23.4.0-rc.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.12.0-beta.1 - 10 March, 2023 -### Changelog -[Changes between v2.12.0-alpha.1 and v2.12.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.12.0-alpha.1...v2.12.0-beta.1) - -#### Features -- Added `RouteRefreshController#pauseRouteRefreshes` and `RouteRefreshController#resumeRouteRefreshes` to pause and resume planned route refreshes correspondingly. [#6976](https://github.com/mapbox/mapbox-navigation-android/pull/6976) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.0-beta.1)) -- Mapbox Navigation Native `v127.1.0` -- Mapbox Core Common `v23.4.0-beta.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.9.8 - 06 March, 2023 -### Changelog -[Changes between v2.9.7 and v2.9.8](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.7...v2.9.8) - -#### Features - - -#### Bug fixes and improvements - -- Fixed an ANR caused by Copilot processing long routes. [#6982](https://github.com/mapbox/mapbox-navigation-android/pull/6982) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.6` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.4 - 06 March, 2023 -### Changelog -[Changes between v2.8.3 and v2.8.4](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.3...v2.8.4) - -#### Features - - -#### Bug fixes and improvements - -- Fixed an ANR caused by Copilot processing long routes. [#6983](https://github.com/mapbox/mapbox-navigation-android/pull/6983) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.1.0` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.4 - 06 March, 2023 -### Changelog -[Changes between v2.7.3 and v2.7.4](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.3...v2.7.4) - -#### Features - - -#### Bug fixes and improvements - -- Fixed an ANR caused by Copilot processing long routes. [#6984](https://github.com/mapbox/mapbox-navigation-android/pull/6984) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.7.0)) -- Mapbox Navigation Native `v111.1.1` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.12.0-alpha.1 - 04 March, 2023 -### Changelog -[Changes between v2.11.0 and v2.12.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0...v2.12.0-alpha.1) - -#### Features -- Added `RouteRefreshController` interface to manage route refreshes. Retrieve it via `MapboxNavigation#routeRefreshController`. [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) -- Added `RouteRefreshController#requestImmediateRouteRefresh` to trigger route refresh request immediately. [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) -- Moved `MapboxNavigation#registerRouteRefreshStateObserver` to `RouteRefreshController#registerRouteRefreshStateObserver`. To migrate, change: [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) - ```kotlin - mapboxNavigation.registerRouteRefreshStateObserver(observer) - ``` - to - ```kotlin - mapboxNavigation.routeRefreshController.registerRouteRefreshStateObserver(observer) - ``` -- Moved `MapboxNavigation#unregisterRouteRefreshStateObserver` to `RouteRefreshController#unregisterRouteRefreshStateObserver`. To migrate, change: [#6610](https://github.com/mapbox/mapbox-navigation-android/pull/6610) - ```kotlin - mapboxNavigation.unregisterRouteRefreshStateObserver(observer) - ``` - to - ```kotlin - mapboxNavigation.routeRefreshController.unregisterRouteRefreshStateObserver(observer) - ``` - -#### Bug fixes and improvements -- Fixed an ANR caused by Copilot processing long routes. [#6978](https://github.com/mapbox/mapbox-navigation-android/pull/6978) -- Fixed revealing of access token in the logs during tiles downloading. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Optimized RAM usage for onboard routing. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Increased the distance at which the navigator discards passed alternative route in `NavigationRouteAlternativesObserver#onRouteAlternatives`. This reduces the chance of discarding alternative routes to which a driver deviated from the primary route. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Improved duration calculation for EV routes to account for charging time. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Added snapping feature to the navigation for walking and cycling profiles. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Started invalidating passed alternatives conditionally on the fork structure. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Started using offline router if server returns 404 or 403. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Increased the distance at which the navigator discards passed alternative route in `NavigationRouteAlternativesObserver#onRouteAlternatives`. This reduces the chance of discarding alternative routes to which a driver deviated from the primary route. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed a possible native crash in `ElectronicHorizonObserver` on application exit. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed redundant memory usage for onboard router. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed inconsistent choice between re-route and switching to alternative due to the fact that the alternative was not checked on every off-route state. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Fixed a crash caused by segfault "wstring_convert: from_bytes" error for HTTP responses. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Made costing algorithms using lightweight info about road graph (should improve performance). [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) -- Switched all realtime sensitive operations onto a separate thread instead of low-prioritised background thread pool. No long status delays should happen in the future. [#6986](https://github.com/mapbox/mapbox-navigation-android/pull/6986) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.12.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.12.0-beta.1)) -- Mapbox Navigation Native `v127.1.0` -- Mapbox Core Common `v23.4.0-beta.1` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.11.0 - 03 March, 2023 -### Changelog -[Changes between v2.10.0 and v2.11.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0...v2.11.0) - -#### Features - -- Added `RoadObjectType.IC` and `RoadObjectType.JCT` for interchanges and junctions and the corresponding classes `Interchange` and `Junction`. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) - -#### Bug fixes and improvements -- Fixed a crash caused by segfault "wstring_convert: from_bytes" error for HTTP responses. [#6979](https://github.com/mapbox/mapbox-navigation-android/pull/6979) -- Fixed an ANR caused by Copilot processing long routes. [#6978](https://github.com/mapbox/mapbox-navigation-android/pull/6978) -- Fixed revealing of access token in the logs during tiles downloading. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Optimized RAM usage for onboard routing. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Increased the distance at which the navigator discards passed alternative route in `NavigationRouteAlternativesObserver#onRouteAlternatives`. This reduces the chance of discarding alternative routes to which a driver deviated from the primary route. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Limited number of reported alternatives to 2, i.e. the `alternatives` parameter in `RouteAlternativesObserver#onRouteAlternatives` has maximum size of 2. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Speed up onboard routing cancellation. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Fixed null pointer dereference in RouteRefreshController. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Fixed unexpected NaN values in location data. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Increased terminal offboard route request timeout from 4 to 15 seconds. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Fixed a rare race condition where the alternative routes might have not been in sync with the current primary route. [#6942](https://github.com/mapbox/mapbox-navigation-android/pull/6942) -- Fixed an issue where all `UpcomingRoadObject`'s had the same `distanceToStart`. [#6945](https://github.com/mapbox/mapbox-navigation-android/pull/6945) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.11.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.11.1)) -- Mapbox Navigation Native `v126.0.3` -- Mapbox Core Common `v23.3.2` -- Mapbox Java `v6.11.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0)) - - -## Mapbox Navigation SDK 2.10.3 - 03 March, 2023 -### Changelog -[Changes between v2.10.2 and v2.10.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.2...v2.10.3) - -#### Features - - -#### Bug fixes and improvements -- Fixed an ANR caused by Copilot processing long routes [#6978](https://github.com/mapbox/mapbox-navigation-android/pull/6978) -- Fixed a crash caused by segfault "wstring_convert: from_bytes" error for HTTP responses. [#6985](https://github.com/mapbox/mapbox-navigation-android/pull/6985) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.2)) -- Mapbox Navigation Native `v123.3.3` -- Mapbox Core Common `v23.2.3` -- Mapbox Java `v6.10.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0)) - - -## Mapbox Navigation SDK 2.11.0-rc.2 - 24 February, 2023 -### Changelog -[Changes between v2.11.0-rc.1 and v2.11.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0-rc.1...v2.11.0-rc.2) - -#### Features - - -#### Bug fixes and improvements -- Fixed revealing of access token in the logs during tiles downloading. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Optimized RAM usage for onboard routing. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) -- Increased the distance at which the navigator discards passed alternative route in `NavigationRouteAlternativesObserver#onRouteAlternatives`. This reduces the chance of discarding alternative routes to which a driver deviated from the primary route. [#6966](https://github.com/mapbox/mapbox-navigation-android/pull/6966) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.11.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.11.1)) -- Mapbox Navigation Native `v126.0.1` -- Mapbox Core Common `v23.3.2` -- Mapbox Java `v6.11.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0-beta.1)) - - -## Mapbox Navigation SDK 2.11.0-rc.1 - 17 February, 2023 -### Changelog -[Changes between v2.11.0-beta.3 and v2.11.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0-beta.3...v2.11.0-rc.1) - -#### Features -- Added `RoadObjectType.IC` and `RoadObjectType.JCT` for interchanges and junctions and the corresponding classes `Interchange` and `Junction`. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) - -#### Bug fixes and improvements -- Limited number of reported alternatives to 2, i.e. the `alternatives` parameter in `RouteAlternativesObserver#onRouteAlternatives` has maximum size of 2.. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Sped up onboard routing cancellation. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Fixed null pointer dereference in RouteRefreshController. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Fixed unexpected NaN values in location data. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Increased terminal offboard route request timeout from 4 to 15 seconds. [#6943](https://github.com/mapbox/mapbox-navigation-android/pull/6943) -- Fixed a rare race condition where the alternative routes might have not been in sync with the current primary route. [#6942](https://github.com/mapbox/mapbox-navigation-android/pull/6942) -- Fixed an issue where all `UpcomingRoadObject`'s had the same `distanceToStart`. [#6945](https://github.com/mapbox/mapbox-navigation-android/pull/6945) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.11.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.11.0)) -- Mapbox Navigation Native `v126.0.0` -- Mapbox Core Common `v23.3.1` -- Mapbox Java `v6.11.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0-beta.1)) - - -## Mapbox Navigation SDK 2.10.2 - 17 February, 2023 -### Changelog -[Changes between v2.10.1 and v2.10.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.1...v2.10.2) - -#### Features - - -#### Bug fixes and improvements -- Fixed a rare race condition where the alternative routes might have not been in sync with the current primary route. [#6949](https://github.com/mapbox/mapbox-navigation-android/pull/6949) -- Fixed an issue where alternative routes refresh might have finished with response code 422. [#6936](https://github.com/mapbox/mapbox-navigation-android/pull/6936) -- Removed access token from TileStore Logs. [#6954](https://github.com/mapbox/mapbox-navigation-android/pull/6954) -- Limited number of reported alternatives to 2, i.e. the `alternatives` parameter in `RouteAlternativesObserver#onRouteAlternatives` has maximum size of 2. [#6954](https://github.com/mapbox/mapbox-navigation-android/pull/6954) -- Stopped fetching alternatives on off-routes and near destination points. [#6954](https://github.com/mapbox/mapbox-navigation-android/pull/6954) -- Increased alternatives discarding distance to ensure map matcher is confident enough. [#6954](https://github.com/mapbox/mapbox-navigation-android/pull/6954) -- Fixed redundant memory usage for routing algorithm. [#6954](https://github.com/mapbox/mapbox-navigation-android/pull/6954) -- Fixed null pointer dereference in RouteRefreshController. [#6954](https://github.com/mapbox/mapbox-navigation-android/pull/6954) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.2)) -- Mapbox Navigation Native `v123.3.2` -- Mapbox Core Common `v23.2.3` -- Mapbox Java `v6.10.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0)) - - -## Mapbox Navigation SDK 2.11.0-beta.3 - 10 February, 2023 -### Changelog -[Changes between v2.11.0-beta.2 and v2.11.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0-beta.2...v2.11.0-beta.3) - -#### Bug fixes and improvements -- Modified the route line implementation so that for multi-leg routes the active leg appears above inactive route legs. [#6742](https://github.com/mapbox/mapbox-navigation-android/pull/6742) -- Fixed an issue where alternative routes refresh might have finished with response code 422. [#6935](https://github.com/mapbox/mapbox-navigation-android/pull/6935) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.11.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.11.0-rc.1)) -- Mapbox Navigation Native `v125.0.0` -- Mapbox Core Common `v23.3.1` -- Mapbox Java `v6.11.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0-beta.1)) - - -## Mapbox Navigation SDK 2.11.0-beta.2 - 03 February, 2023 -### Changelog -[Changes between v2.11.0-beta.1 and v2.11.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0-beta.1...v2.11.0-beta.2) - -#### Features -- Introduced `PredictiveCacheOptions.Builder#predictiveCacheMapsOptionsList` as an alternative for deprecated `PredictiveCacheOptions.Builder#predictiveCacheMapsOptions`. This allows to use different `PredictiveCacheLocationOptions` for different zoom level ranges. [#6868](https://github.com/mapbox/mapbox-navigation-android/pull/6868) -- Changed alternatives fetching behaviour, prevent fetching alternatives in off-route or near destination point. [#6928](https://github.com/mapbox/mapbox-navigation-android/pull/6928) - -#### Bug fixes and improvements -- Fixed rendering of 3 digit speed limit values in `MapboxSpeedInfoView`. [#6919](https://github.com/mapbox/mapbox-navigation-android/pull/6919) -- Updated `MapboxNavigationApp` to ignore `detach` calls, if the `LifecycleOwner` wasn't attached first. [#6920](https://github.com/mapbox/mapbox-navigation-android/pull/6920) -Fixed "global reference table overflow" in case an application accumulates and keeps links to `RouteProgress#upcomingRoadObjects` -- Introduced `VoiceInstructionsPrefetcher` `MapboxSpeechAPI#generatePredownloaded` to use predownloaded voice instructions instead of downloading them on demand. Example usage can be found in the examples directory ( see `MapboxVoiceActivity`). [#6771](https://github.com/mapbox/mapbox-navigation-android/pull/6771) -- Enabled voice instructions predownloading for those who use `MapboxAudioGuidance`. [#6771](https://github.com/mapbox/mapbox-navigation-android/pull/6771) -- Fixed an issue where with low connectivity voice instruction might have been played too late for those who use `MapboxAudioGuidance`. If you use `MapboxSpeechAPI` directly, switch to voice instructions predownloading as described above if you encounter said issue. [#6771](https://github.com/mapbox/mapbox-navigation-android/pull/6771) -- Make the location switch to map matching faster with MapboxTripStarter.enableMapMatching [#6906](https://github.com/mapbox/mapbox-navigation-android/pull/6906) -- Fixed an issue with `NavigationView` that caused left frame to overlap with maneuver view in landscape mode during active navigation. [#6914](https://github.com/mapbox/mapbox-navigation-android/pull/6914) -- :warning: If you're recreating the `MapboxRouteLineView` instance, for example to change the `MapboxRouteLineOptions`, make sure that your first interaction restores the state and re-applies the options by calling `MapboxRouteLineApi.getRouteDrawData` and passing the result to `MapboxRouteLineView.renderRouteDrawData`. This is a necessary change to fix an issue where `MapboxRouteLineOptions` provided in a new instance of `MapboxRouteLineView` were ignored if the style object used with `render` functions already had route line layers initialized. [#6793](https://github.com/mapbox/mapbox-navigation-android/pull/6793) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.11.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.11.0-rc.1)) -- Mapbox Navigation Native `v125.0.0` -- Mapbox Core Common `v23.3.1` -- Mapbox Java `v6.11.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.11.0-beta.1)) - - -## Mapbox Navigation SDK 2.9.7 - 27 January, 2023 -### Changelog -[Changes between v2.9.6 and v2.9.7](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.6...v2.9.7) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.6` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.3 - 27 January, 2023 -### Changelog -[Changes between v2.8.2 and v2.8.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.2...v2.8.3) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.1.0` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.3 - 27 January, 2023 -### Changelog -[Changes between v2.7.2 and v2.7.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.2...v2.7.3) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.7.0)) -- Mapbox Navigation Native `v111.1.1` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.10.1 - 27 January, 2023 -### Changelog -[Changes between v2.10.0 and v2.10.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0...v2.10.1) - -#### Features - - -#### Bug fixes and improvements -- Started using separate DeadReckoningDetector for Garmin GNSS receiver which uses accuracy for better tunnel exit detection. [#6886](https://github.com/mapbox/mapbox-navigation-android/pull/6886) -- Fixed situations with intensive re-routes on looped/u-turn routes by changing the route matcher's choice of the first location. Now we use fallback localization controller matching to provide the first active guidance progress after setting a new route to help the route matcher start working from the right segment (it already takes road direction, bearing, and looped routes into account). [#6886](https://github.com/mapbox/mapbox-navigation-android/pull/6886) -- Set limit of simultaneously running onboard route requests in config to 2 to prevent excessive resource consumption during intensive/repeated re-routes. [#6886](https://github.com/mapbox/mapbox-navigation-android/pull/6886) -- Fixed potential timestamp inconsistencies that may have led to location rejection by making the timestamp shift corrector configurable and disabled by default. [#6886](https://github.com/mapbox/mapbox-navigation-android/pull/6886) -- Fixed an issue with incorrect `UpcomingRoadObject#distanceToStart` values on multi-leg routes. [#6886](https://github.com/mapbox/mapbox-navigation-android/pull/6886) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.1)) -- Mapbox Navigation Native `v123.3.1` -- Mapbox Core Common `v23.2.2` -- Mapbox Java `v6.10.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0)) - - -## Mapbox Navigation SDK 2.11.0-beta.1 - 27 January, 2023 -### Changelog -[Changes between v2.11.0-alpha.1 and v2.11.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.11.0-alpha.1...v2.11.0-beta.1) - -#### Features -- Introduced `ReplayHistorySession` and `ReplayHistorySessionOptions` to simplify the implementation for replaying history files. History can also be enabled with `MapboxTripStarter.enableReplayHistory()`. This can replay large history files in a memory efficient way. [#6855](https://github.com/mapbox/mapbox-navigation-android/pull/6855) -- Added `RoadComponent.language` value. [#6833](https://github.com/mapbox/mapbox-navigation-android/pull/6833) -- :warning: Changed `EHorizonEdgeMetadata.names` class from `RoadName` to `RoadComponent`. [#6833](https://github.com/mapbox/mapbox-navigation-android/pull/6833) - To migrate change your code from: -```kotlin -val shielded = roadName.shielded -``` -into: -```kotlin -val shielded = roadComponent.shield != null -``` -- Added support for continuous EV alternatives in `NavigationRouteAlternativesObserver`. [#6833](https://github.com/mapbox/mapbox-navigation-android/pull/6833) -- Fixed issues with map-matching to HOV-only roads. [#6833](https://github.com/mapbox/mapbox-navigation-android/pull/6833) -- Set a limit of simultaneously running onboard route requests to avoid too many tasks blocking too much of the device's computing resources. [#6833](https://github.com/mapbox/mapbox-navigation-android/pull/6833) -- Fixed an issue with Road Access Policy ignoring the setting to map-match to closed road sections, when enabled. [#6833](https://github.com/mapbox/mapbox-navigation-android/pull/6833) -- Added `MapboxTripStarter` to simplify the solution for managing the trip session and replaying routes. This also makes it possible to share the replay state between drop-in-ui and android-auto. [#6794](https://github.com/mapbox/mapbox-navigation-android/pull/6794) - -#### Bug fixes and improvements -- Increased max distance from the user indicator to route line valid to continue vanishing updates from 3m to 10m. [#6854](https://github.com/mapbox/mapbox-navigation-android/pull/6854) -- Improved `NavigationView` camera behavior to go back into overview state if routes change during route preview state. [#6840](https://github.com/mapbox/mapbox-navigation-android/pull/6840) -- Fixed an issue where alternative routes might have had an incorrect or incomplete portion of the route refreshed or occasionally fail to refresh. [#6848](https://github.com/mapbox/mapbox-navigation-android/pull/6848) -- Removed `NavigationRoute#hasUnexpectedClosures` and added `RouteProgress#hasUnexpectedUpcomingClosures` instead that checks whether route has upcoming unexpected closures (the algorithm does not take into account closures that the puck has already been on) [#6841](https://github.com/mapbox/mapbox-navigation-android/pull/6841) -- Improved `NavigationView` camera behavior to ignore keyboard insets. [#6845](https://github.com/mapbox/mapbox-navigation-android/pull/6845) - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.11.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.11.0-beta.1)) -- Mapbox Navigation Native `v124.0.1` -- Mapbox Core Common `v23.3.0-beta.1` -- Mapbox Java `v6.10.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0)) - - -## Mapbox Navigation SDK 2.10.0 - 20 January, 2023 -### Changelog -[Changes between v2.9.6 and v2.10.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.6...v2.10.0) - -#### Features - -- Added support to use `MapboxSpeedInfoView` as default view to render posted and current speed in Drop-In UI. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - Introduced `ViewStyleCustomization.speedInfoOptions` to style the `MapboxSpeedInfoView` using Drop-In UI. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - Introduced `ViewBinderCustomization.legacySpeedLimitBinder()` and `ViewBinderCustomization.defaultSpeedInfoBinder` to facilitate the simple use of legacy `MapboxSpeedLimitView` and new `MapboxSpeedInfoView`. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - :warning: Deprecated `ViewStyleCustomization.setSpeedLimitStyle` and `ViewStyleCustomization.setSpeedLimitTextAppearance`. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - -To use the legacy speed limit view, add the following code: - ```kotlin - binding.navigationView.customizeViewBinders { - binding.navigationView.customizeViewBinders { - speedLimitBinder = legacySpeedLimitBinder() - } - } - ``` -- Introduced `NavigationViewListener.onSpeedInfoClicked` that would be triggered when `MapboxSpeedInfoView` is clicked upon. [#6770](https://github.com/mapbox/mapbox-navigation-android/pull/6770) -- Introduced `ViewStyleCustomization.infoPanelGuidelineMaxPosPercent` that allows customization of the `NavigationView` InfoPanel bottom guideline maximum position. Increased default value to 50%. [#6792](https://github.com/mapbox/mapbox-navigation-android/pull/6792) -- Introduced `MapboxSpeedInfoApi` and `MapboxSpeedInfoView`. The combination of API and View can be used to render posted and current speed limit at user's current location. [#6687](https://github.com/mapbox/mapbox-navigation-android/pull/6687) -- :warning: Deprecated `MapboxSpeedLimitApi` and `MapboxSpeedLimitView`. [#6687](https://github.com/mapbox/mapbox-navigation-android/pull/6687) -- Introduced `ReplayRouteSession` and `ReplayRouteSessionOptions`. When enabled the active route will be simulated. This will replay routes in a memory efficient way, so you can simulate long routes at high location frequencies. [#6636](https://github.com/mapbox/mapbox-navigation-android/pull/6636) -- Added building highlight on arrival support to `NavigationView`. Added new customization options `ViewOptionsCustomization.enableBuildingHighlightOnArrival` and `ViewOptionsCustomization.buildingHighlightOptions`. [#6651](https://github.com/mapbox/mapbox-navigation-android/pull/6651) -- Added `ComponentInstaller` for the `BuildingHighlightComponent` that offers simplified integration of the `MapboxBuildingsApi` and `MapboxBuildingView`. [#6651](https://github.com/mapbox/mapbox-navigation-android/pull/6651) -- Introduced parallelization of route requests made with `MapboxNavigation#requestRoutes`. Now, if an offboard route request fails or times out (the default timeout has been decreased from 10 seconds to 5 seconds), we're already in the process of calculating an onboard route to decrease the time needed to provide a usable route to the user, as long as we have the data cached or pre-downloaded to succeed with an onboard request. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Added public-preview Copilot feature. [#6572](https://github.com/mapbox/mapbox-navigation-android/pull/6572) -- :warning: Introduced `ViewStyleCustomization.locationPuckOptions` in favor of `ViewStyleCustomization.locationPuck` that can be used to leverage `LocationPuckOptions` to change the location puck at runtime for each navigation state. [#6574](https://github.com/mapbox/mapbox-navigation-android/pull/6574) -- Removed `@Experimental` annotation from all files related to Drop-In UI. [#6471](https://github.com/mapbox/mapbox-navigation-android/pull/6471) -- Added experimental routes preview state, see `MapboxNavigaton#setRoutesPreview`, `MapboxNavigaton#changeRoutesPreviewPrimaryRoute`, `MapboxNavigaton#registerRoutesPreviewObserver`, `MapboxNavigaton#getRoutesPreview`. [#6495](https://github.com/mapbox/mapbox-navigation-android/pull/6495) -- Added support for EV route refresh. [#6511](https://github.com/mapbox/mapbox-navigation-android/pull/6511) -- Added `MapboxNavigation#onEVDataUpdated` method to be invoked by the end user to notify Navigation SDK of EV data changes so that it can be used in refresh requests. [#6511](https://github.com/mapbox/mapbox-navigation-android/pull/6511) - -#### Bug fixes and improvements -- Ensure map-matching considers HOV-only roads as auto accessible. [#6834](https://github.com/mapbox/mapbox-navigation-android/pull/6834) -- Removed `NavigationRoute#hasUnexpectedClosures` and added `RouteProgress#hasUnexpectedUpcomingClosures` instead that checks whether route has upcoming unexpected closures (the algorithm does not take into account closures that the puck has already been on). [#6841](https://github.com/mapbox/mapbox-navigation-android/pull/6841) -- Increased max distance from the user indicator to route line valid to continue vanishing updates from 3m to 10m. [#6854](https://github.com/mapbox/mapbox-navigation-android/pull/6854) -- Fixed an issue where alternative routes might have had an incorrect or incomplete portion of the route refreshed or occasionally fail to refresh. [#6857](https://github.com/mapbox/mapbox-navigation-android/pull/6857) -- Fixed an issue with `NavigationView` that caused info panel to shrink in landscape mode with a full screen theme. [#6811](https://github.com/mapbox/mapbox-navigation-android/pull/6811) -- Fixed standalone `MapboxManeuverView` appearance when the app also integrates Drop-In UI. [#6810](https://github.com/mapbox/mapbox-navigation-android/pull/6810) -- Each newly instantiated MapboxRouteArrowView class will initialize the layers with the provided options on the first render call. Previously this would only be done if the layers hadn't already been initialized. [#6466](https://github.com/mapbox/mapbox-navigation-android/pull/6466) -- Fixed an issue where the first voice instruction might have been played twice. [#6766](https://github.com/mapbox/mapbox-navigation-android/pull/6766) -- :warning: Updated the `NavigationView` default navigation puck asset. [#6678](https://github.com/mapbox/mapbox-navigation-android/pull/6678) - -Previous puck can be restored by injecting `LocationPuck2D` with the `bearingImage` set to `com.mapbox.navigation.ui.maps.R.drawable.mapbox_navigation_puck_icon` drawable: - ```kotlin - navigationView.customizeViewStyles { - locationPuckOptions = LocationPuckOptions.Builder(context) - .defaultPuck( - LocationPuck2D( - bearingImage = ContextCompat.getDrawable( - context, - com.mapbox.navigation.ui.maps.R.drawable.mapbox_navigation_puck_icon, - ) - ) - ) - .idlePuck(regularPuck(context)) - .build() - } - ``` -- Fixed approaches list update in `RouteOptionsUpdater`(uses for reroute). It was putting to the origin approach corresponding approach from legacy approach list. [#6540](https://github.com/mapbox/mapbox-navigation-android/pull/6540) -- Updated the `MapboxRestAreaApi` logic to load a SAPA map only if the upcoming rest stop is at the current step of the route leg. [#6695](https://github.com/mapbox/mapbox-navigation-android/pull/6695) -- Fixed an issue where `MapboxRerouteController` could deliver a delayed interruption state notifications. Now, the interruption state is always delivered synchronously, as soon as it's available. [#6718](https://github.com/mapbox/mapbox-navigation-android/pull/6718) -- Fixed the `NavigationView` issue where route arrows are being rendered above navigation puck after device rotation. [#6747](https://github.com/mapbox/mapbox-navigation-android/pull/6747) -- Fixed an issue where a refresh of the routes or a change in alternatives that occurred while user was off-route would call `RerouteController#interrupt` and interrupt the potentially ongoing reroute process without recovery. [#6719](https://github.com/mapbox/mapbox-navigation-android/pull/6719) -- Improved OpenLR matching rate. Updates take lowest FRC to next point into account during path generation. [#6750](https://github.com/mapbox/mapbox-navigation-android/pull/6750) -- Fixed an issue where `MapboxBuildingsApi` would fail to highlight buildings. [#6749](https://github.com/mapbox/mapbox-navigation-android/pull/6749) -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6684](https://github.com/mapbox/mapbox-navigation-android/pull/6684) -- Fixed an issue where `RouteProgress#VoiceInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6689](https://github.com/mapbox/mapbox-navigation-android/pull/6689) -- Added `MapboxNavigation#resetTripSession(callback)` and deprecated the counterpart without a callback. [#6685](https://github.com/mapbox/mapbox-navigation-android/pull/6685) -- Fixed memory leak in `ReplayProgressObserver` which happened after route refresh. [#6691](https://github.com/mapbox/mapbox-navigation-android/pull/6691) -- Fixed a rare issue where a reroute relative to old routes might have occurred after setting new routes. [#6693](https://github.com/mapbox/mapbox-navigation-android/pull/6693) -- Added experimental `MapboxRouteLineOptions#shareLineGeometrySources` option to enable route line's GeoJson source data sharing between multiple instances of the map. [#6680](https://github.com/mapbox/mapbox-navigation-android/pull/6680) -- Fixed issues in `ReplayRouteSession`. The routes observer was never unregistered. Alternative route selection resets replay to the beginning. Drop-In Ui changing portrait and landscape modes resets replay to the beginning. [#6675](https://github.com/mapbox/mapbox-navigation-android/pull/6675) -- Fixed an issue where first `BannerInstructions` of `RouteProgress` and `BannerInstructionsObserver` could have not been delivered after starting active guidance. [#6702](https://github.com/mapbox/mapbox-navigation-android/pull/6702) -- Fixed an issue in the `NavigationView` where the last audio instruction from the previous session becomes the 1st on the next session. [#6662](https://github.com/mapbox/mapbox-navigation-android/pull/6662) -- Fixed crash in `PermissionsLauncherFragment` occurring on device rotation. [#6635](https://github.com/mapbox/mapbox-navigation-android/pull/6635) -- Fixed a rare `java.lang.IllegalArgumentException: The Path cannot loop back on itself.` exception when using `NavigationLocationProvider`. [#6641](https://github.com/mapbox/mapbox-navigation-android/pull/6641) -- Started clearing route geometry cache when no routes (neither routes used for Active Guidance nor previewed ones) are available. [#6617](https://github.com/mapbox/mapbox-navigation-android/pull/6617) -- Added convenience `MapboxNavigation#moveRoutesFromPreviewToNavigator` method to simplify transition from Routes Preview state to Active Guidance state. [#6617](https://github.com/mapbox/mapbox-navigation-android/pull/6617) -- Minor performance improvements for `MapboxNavigationViewportDataSource#evaluate`. [#6645](https://github.com/mapbox/mapbox-navigation-android/pull/6645) -- Minor optimization when updating the vanishing route line by removing check for route line related layers. [#6642](https://github.com/mapbox/mapbox-navigation-android/pull/6642) -- Added minor optimization to vanishing route line calculations by checking if the incoming point equal to the previous point in order to avoid recalculation and re-rendering. [#6643](https://github.com/mapbox/mapbox-navigation-android/pull/6643) -- Improved performance of `MapboxRouteLineApi#updateWithRouteProgress` function execution. [#6648](https://github.com/mapbox/mapbox-navigation-android/pull/6648) -- Fixed a rare issue where the offset marking the traveled portion of the route would be ahead of the user location puck, especially around sharp maneuvers. [#6648](https://github.com/mapbox/mapbox-navigation-android/pull/6648) -- Fixed an issue where reroute requests where not applying the latest EV data provided via `MapboxNavigation#onEVDataUpdated`. [#6650](https://github.com/mapbox/mapbox-navigation-android/pull/6650) -- Added `NavigationRoute#waypoints` as the source of truth for `DirectionsWaypoint`s which can be common for all routes or route specific depending on `RouteOptions#waypointsPerRoute()` parameter. [#6555](https://github.com/mapbox/mapbox-navigation-android/pull/6555) -- Improved behavior in tunnels and underground parking lots for `DeviceType#AUTOMOBILE` by preventing tunnel-induced location simulation while we're off-road and vice-versa preventing generation of off-road location samples in tunnels. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Improved fork detection in tunnels for `DeviceType#AUTOMOBILE`. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- :warning: Changed `NavigationRouteAlternativesObserver` to only return the latest generated set of possible alternative routes to prevent accumulation of routes. This decreases the applicable usages of `AlternativeRouteMetadata#alternativeId` as the ID will be rebuilt in most of the cases. Future releases will provide improved mechanism to help understand similarity of continuously delivered alternative routes. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Improved location generation on multi-level roads for `DeviceType#AUTOMOBILE`, especially focusing on avoiding snapping the user location to the incorrect level or inaccessible parallel road. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Fixed an issue where `NavigationRouteAlternativesObserver` would fire unnecessarily often with new sets of routes. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Optimized predictive resource caching and reduced peak memory and CPU consumption on very long and complex routes. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Fixed an issue for `DeviceType#AUTOMOBILE` where entering a tunnel just after exiting a previous one (in a short time frame) could lead to incorrect location simulation. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Updated `MapboxAudioGuidance`, used by `NavigationView`, to avoid playback of duplicate voice instructions when un-muting. [#6608](https://github.com/mapbox/mapbox-navigation-android/pull/6608) -- Optimized rerouting: now the reroute request is interrupted if the puck returns to the route. [#6614](https://github.com/mapbox/mapbox-navigation-android/pull/6614) -- Fixed crash in `MapboxInfoPanelHeaderArrivalLayoutBinding.java` by disabling layout transitions in `InfoPanelHeaderActiveGuidanceBinder`, `InfoPanelHeaderArrivalBinder`, `InfoPanelHeaderDestinationPreviewBinder` and `InfoPanelHeaderRoutesPreviewBinder`. [#6616](https://github.com/mapbox/mapbox-navigation-android/pull/6616) -- Fixed location permissions request when hosting `NavigationView` in a Fragment. [#6618](https://github.com/mapbox/mapbox-navigation-android/pull/6618) -- Updated route refresh log to account for state_of_charge annotations and waypoints updates. [#6579](https://github.com/mapbox/mapbox-navigation-android/pull/6579) -- :warning: Updated the `RoadObject#location` property to be lazily initialized. This change greatly decreases `RouteProgress` generation time and boosts performance when navigating routes with many `UpcomingRoadObject`s. [#6573](https://github.com/mapbox/mapbox-navigation-android/pull/6573) -- Fixed an issue where "silent waypoints" (not regular waypoints that define legs) had markers added on the map when route line was drawn with `MapboxRouteLineApi` and `MapboxRouteLineView`. [#6526](https://github.com/mapbox/mapbox-navigation-android/pull/6526) -- Fixed an issue where `DirectionsResponse#waypoints` list was cleared after a successful non-EV route refresh. [#6539](https://github.com/mapbox/mapbox-navigation-android/pull/6539) -- Fixed an issue with EV route refresh failing in cases where EV data updates are not provided. Now, the initial parameters from a route request will be used as a fallback. [#6534](https://github.com/mapbox/mapbox-navigation-android/pull/6534) -- Slightly decreased the memory consumption of the online router. [#6562](https://github.com/mapbox/mapbox-navigation-android/pull/6562) -- Improved positioning and location signal simulation in tunnels. [#6562](https://github.com/mapbox/mapbox-navigation-android/pull/6562) -- Fixed an issue where re-routes could have failed for EV routes. [#6005](https://github.com/mapbox/mapbox-navigation-android/pull/6005) - -:warning: `RouteProgress#remainingWaypoints` defines the amount of all remaining waypoints, including explicit (requested with `RouteOptions#coordinatesList`) and implicit (added on the fly, like Electric Vehicle waypoints - [see](https://docs.mapbox.com/api/navigation/directions/#electric-vehicle-routing)) ones. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0)) -- Mapbox Navigation Native `v123.2.0` -- Mapbox Core Common `v23.2.1` -- Mapbox Java `v6.10.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0)) - - -## Mapbox Navigation SDK 2.11.0-alpha.1 - 13 January, 2023 -### Changelog -[Changes between vandroidauto-0.18.0 and v2.11.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/vandroidauto-0.18.0...v2.11.0-alpha.1) - -#### Features -- Introduced `ViewStyleCustomization.infoPanelGuidelineMaxPosPercent` that allows customization of the `NavigationView` InfoPanel bottom guideline maximum position. Increased default value to 50%. [#6792](https://github.com/mapbox/mapbox-navigation-android/pull/6792) - -#### Bug fixes and improvements -- Fixed an issue where the first voice instruction might have been played twice. [#6766](https://github.com/mapbox/mapbox-navigation-android/pull/6766) -- Fixed an issue with `NavigationView` that caused info panel to shrink in landscape mode with a full screen theme. [#6780](https://github.com/mapbox/mapbox-navigation-android/pull/6780) -- :warning: Updated the `NavigationView` default navigation puck asset. [#6678](https://github.com/mapbox/mapbox-navigation-android/pull/6678) - - Previous puck can be restored by injecting `LocationPuck2D` with the `bearingImage` set to `com.mapbox.navigation.ui.maps.R.drawable.mapbox_navigation_puck_icon` drawable: - ```kotlin - navigationView.customizeViewStyles { - locationPuckOptions = LocationPuckOptions.Builder(context) - .defaultPuck( - LocationPuck2D( - bearingImage = ContextCompat.getDrawable( - context, - com.mapbox.navigation.ui.maps.R.drawable.mapbox_navigation_puck_icon, - ) - ) - ) - .idlePuck(regularPuck(context)) - .build() - } - ``` -- Improved `MapboxNavigation#startReplayTripSession` and `ReplayRouteSession` so that the previous trip session does not need to be stopped. :warning: `ReplayRouteSession#onDetached` removed the call to `stopTripSession`. [#6817](https://github.com/mapbox/mapbox-navigation-android/pull/6817) -- Each newly instantiated MapboxRouteArrowView class will initialize the layers with the provided options on the first render call. Previously this would only be done if the layers hadn't already been initialized. [#6466](https://github.com/mapbox/mapbox-navigation-android/pull/6466) -- Fixed standalone `MapboxManeuverView` appearance when the app also integrates Drop-In UI. [#6774](https://github.com/mapbox/mapbox-navigation-android/pull/6774) -- Ensure map-matching considers HOV-only roads as auto accessible. [#6834](https://github.com/mapbox/mapbox-navigation-android/pull/6834) -- Added guarantees that route progress with `RouteProgress#currentState == OFF_ROUTE` arrives earlier than `NavigationRerouteController#reroute` is called. [#6764](https://github.com/mapbox/mapbox-navigation-android/pull/6764) -- Introduced `NavigationViewListener.onSpeedInfoClicked` that would be triggered when `MapboxSpeedInfoView` is clicked upon. [#6770](https://github.com/mapbox/mapbox-navigation-android/pull/6770) -- Fixed a rare `java.lang.NullPointerException: Attempt to read from field 'SpeechAnnouncement PlayCallback.announcement' on a null object reference` crash in `PlayCallback.getAnnouncement`. [#6760](https://github.com/mapbox/mapbox-navigation-android/pull/6760) -- Changed distance formatting: now all the imperial distances down to 0.1 miles will be represented in miles, while the smaller ones - in feet. [#6775](https://github.com/mapbox/mapbox-navigation-android/pull/6775) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0)) -- Mapbox Navigation Native `v123.2.0` -- Mapbox Core Common `v23.2.1` -- Mapbox Java `v6.10.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.3)) - - -## Mapbox Navigation SDK 2.10.0-rc.2 - 12 January, 2023 -### Changelog -[Changes between v2.10.0-rc.1 and v2.10.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-rc.1...v2.10.0-rc.2) - -#### Features -- Added support to use `MapboxSpeedInfoView` as default view to render posted and current speed in Drop-In UI. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - Introduced `ViewStyleCustomization.speedInfoOptions` to style the `MapboxSpeedInfoView` using Drop-In UI. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - Introduced `ViewBinderCustomization.legacySpeedLimitBinder()` and `ViewBinderCustomization.defaultSpeedInfoBinder` to facilitate the simple use of legacy `MapboxSpeedLimitView` and new `MapboxSpeedInfoView`. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - :warning: Deprecated `ViewStyleCustomization.setSpeedLimitStyle` and `ViewStyleCustomization.setSpeedLimitTextAppearance`. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - To use the legacy speed limit view, add the following code: - ```kotlin - binding.navigationView.customizeViewBinders { - binding.navigationView.customizeViewBinders { - speedLimitBinder = legacySpeedLimitBinder() - } - } - ``` -- Introduced `NavigationViewListener.onSpeedInfoClicked` that would be triggered when `MapboxSpeedInfoView` is clicked upon. [#6770](https://github.com/mapbox/mapbox-navigation-android/pull/6770) -- Introduced `ViewStyleCustomization.infoPanelGuidelineMaxPosPercent` that allows customization of the `NavigationView` InfoPanel bottom guideline maximum position. Increased default value to 50%. [#6792](https://github.com/mapbox/mapbox-navigation-android/pull/6792) - -#### Bug fixes and improvements -- Fixed an issue with `NavigationView` that caused info panel to shrink in landscape mode with a full screen theme. [#6811](https://github.com/mapbox/mapbox-navigation-android/pull/6811) -- Fixed standalone `MapboxManeuverView` appearance when the app also integrates Drop-In UI. [#6810](https://github.com/mapbox/mapbox-navigation-android/pull/6810) -- Each newly instantiated MapboxRouteArrowView class will initialize the layers with the provided options on the first render call. Previously this would only be done if the layers hadn't already been initialized. [#6466](https://github.com/mapbox/mapbox-navigation-android/pull/6466) -- Fixed an issue where the first voice instruction might have been played twice. [#6766](https://github.com/mapbox/mapbox-navigation-android/pull/6766) -- :warning: Updated the `NavigationView` default navigation puck asset. [#6678](https://github.com/mapbox/mapbox-navigation-android/pull/6678) - - Previous puck can be restored by injecting `LocationPuck2D` with the `bearingImage` set to `com.mapbox.navigation.ui.maps.R.drawable.mapbox_navigation_puck_icon` drawable: - ```kotlin - navigationView.customizeViewStyles { - locationPuckOptions = LocationPuckOptions.Builder(context) - .defaultPuck( - LocationPuck2D( - bearingImage = ContextCompat.getDrawable( - context, - com.mapbox.navigation.ui.maps.R.drawable.mapbox_navigation_puck_icon, - ) - ) - ) - .idlePuck(regularPuck(context)) - .build() - } - ``` - -#### Known issues :warning: - - -#### Other changes - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0)) -- Mapbox Navigation Native `v123.1.0` -- Mapbox Core Common `v23.2.1` -- Mapbox Java `v6.10.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.3)) - - -## Mapbox Navigation SDK 2.9.6 - 10 January, 2023 -### Changelog -[Changes between v2.9.5 and v2.9.6](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.5...v2.9.6) - -#### Bug fixes and improvements - -- Ensure map-matching considers HOV-only roads as auto accessible. [#6785](https://github.com/mapbox/mapbox-navigation-android/pull/6785) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.6` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.2 - 10 January, 2023 -### Changelog -[Changes between v2.8.1 and v2.8.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.1...v2.8.2) - -#### Features - -- Added public-preview Copilot feature. [#6791](https://github.com/mapbox/mapbox-navigation-android/pull/6791) - -#### Bug fixes and improvements - -- Ensure map-matching considers HOV-only roads as auto accessible. [#6791](https://github.com/mapbox/mapbox-navigation-android/pull/6791) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.1.0` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.2 - 10 January, 2023 -### Changelog -[Changes between v2.7.1 and v2.7.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.1...v2.7.2) - -#### Features - -- Added public-preview Copilot feature. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.7.0)) -- Mapbox Navigation Native `v111.1.1` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.10.0-rc.1 - 16 December, 2022 -### Changelog -[Changes between v2.10.0-beta.3 and v2.10.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-beta.3...v2.10.0-rc.1) - -#### Features -- Introduced `MapboxSpeedInfoApi` and `MapboxSpeedInfoView`. The combination of API and View can be used to render posted and current speed limit at user's current location. [#6687](https://github.com/mapbox/mapbox-navigation-android/pull/6687) -- :warning: Deprecated `MapboxSpeedLimitApi` and `MapboxSpeedLimitView`. [#6687](https://github.com/mapbox/mapbox-navigation-android/pull/6687) -- Added support to use `MapboxSpeedInfoView` as default view to render posted and current speed in Drop-In UI. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - Introduced `ViewStyleCustomization.speedInfoOptions` to style the `MapboxSpeedInfoView` using Drop-In UI. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - Introduced `ViewBinderCustomization.legacySpeedLimitBinder()` and `ViewBinderCustomization.defaultSpeedInfoBinder` to facilitate the simple use of legacy `MapboxSpeedLimitView` and new `MapboxSpeedInfoView`. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - - :warning: Deprecated `ViewStyleCustomization.setSpeedLimitStyle` and `ViewStyleCustomization.setSpeedLimitTextAppearance`. [#6743](https://github.com/mapbox/mapbox-navigation-android/pull/6743) - To use the legacy speed limit view, add the following code: -```kotlin -binding.navigationView.customizeViewBinders { - binding.navigationView.customizeViewBinders { - speedLimitBinder = legacySpeedLimitBinder() - } -} -``` -#### Bug fixes and improvements -- Fixed approaches list update in `RouteOptionsUpdater`(uses for reroute). It was putting to the origin approach corresponding approach from legacy approach list. [#6540](https://github.com/mapbox/mapbox-navigation-android/pull/6540) -- Updated the `MapboxRestAreaApi` logic to load a SAPA map only if the upcoming rest stop is at the current step of the route leg. [#6695](https://github.com/mapbox/mapbox-navigation-android/pull/6695) -- Fixed an issue where `MapboxRerouteController` could deliver a delayed interruption state notifications. Now, the interruption state is always delivered synchronously, as soon as it's available. [#6718](https://github.com/mapbox/mapbox-navigation-android/pull/6718) -- Fixed the `NavigationView` issue where route arrows are being rendered above navigation puck after device rotation. [#6747](https://github.com/mapbox/mapbox-navigation-android/pull/6747) -- Fixed an issue where a refresh of the routes or a change in alternatives that occurred while user was off-route would call `RerouteController#interrupt` and interrupt the potentially ongoing reroute process without recovery. [#6719](https://github.com/mapbox/mapbox-navigation-android/pull/6719) -- Improved OpenLR matching rate. Updates take lowest FRC to next point into account during path generation. [#6750](https://github.com/mapbox/mapbox-navigation-android/pull/6750) -- Fixed an issue where `MapboxBuildingsApi` would fail to highlight buildings. [#6749](https://github.com/mapbox/mapbox-navigation-android/pull/6749) -- Extended `RoutesUpdatedResult` with `ignoredRoutes` property: it contains routes that were passed by the user but were ignored by the Nav SDK because they are invalid for navigation. [#6745](https://github.com/mapbox/mapbox-navigation-android/pull/6745) -- :warning: Changed `RoutesObserver` behavior: now only valid alternative routes will be delivered in `RoutesUpdatedResult#navigationRoutes` and `RoutesUpdatedResult#routes`. [#6745](https://github.com/mapbox/mapbox-navigation-android/pull/6745) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0)) -- Mapbox Navigation Native `v123.1.0` -- Mapbox Core Common `v23.2.1` -- Mapbox Java `v6.10.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.3)) - -## Mapbox Navigation SDK 2.9.5 - 13 December, 2022 -### Changelog -[Changes between v2.9.4 and v2.9.5](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.4...v2.9.5) - -#### Features - -#### Bug fixes and improvements -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6717](https://github.com/mapbox/mapbox-navigation-android/pull/6717) -- Fixed an issue where `RouteProgress#VoiceInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6717](https://github.com/mapbox/mapbox-navigation-android/pull/6717) -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when setting alternative routes. [#6721](https://github.com/mapbox/mapbox-navigation-android/pull/6721) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.5` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.1 - 13 December, 2022 -### Changelog -[Changes between v2.8.0 and v2.8.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0...v2.8.1) - -#### Features - -#### Bug fixes and improvements -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6716](https://github.com/mapbox/mapbox-navigation-android/pull/6716) -- Fixed an issue where `RouteProgress#VoiceInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6716](https://github.com/mapbox/mapbox-navigation-android/pull/6716) -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when setting alternative routes. [#6720](https://github.com/mapbox/mapbox-navigation-android/pull/6720) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.1` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.1 - 12 December, 2022 -### Changelog -[Changes between v2.7.0 and v2.7.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0...v2.7.1) - -#### Features - -#### Bug fixes and improvements -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6684](https://github.com/mapbox/mapbox-navigation-android/pull/6684) -- Fixed an issue where `RouteProgress#VoiceInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6689](https://github.com/mapbox/mapbox-navigation-android/pull/6689) -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when setting alternative routes. [#6715](https://github.com/mapbox/mapbox-navigation-android/pull/6715) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.7.0)) -- Mapbox Navigation Native `v111.0.0` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.10.0-beta.3 - 08 December, 2022 -### Changelog -[Changes between v2.10.0-beta.2 and v2.10.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-beta.2...v2.10.0-beta.3) - -#### Bug fixes and improvements -- Fixed an issue where `RouteProgress#BannerInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6684](https://github.com/mapbox/mapbox-navigation-android/pull/6684) -- Fixed an issue where `RouteProgress#VoiceInstructions` could've become `null` when `MapboxNavigation#updateLegIndex` was called. [#6689](https://github.com/mapbox/mapbox-navigation-android/pull/6689) -- Added `MapboxNavigation#resetTripSession(callback)` and deprecated the counterpart without a callback. [#6685](https://github.com/mapbox/mapbox-navigation-android/pull/6685) -- Fixed memory leak in `ReplayProgressObserver` which happened after route refresh. [#6691](https://github.com/mapbox/mapbox-navigation-android/pull/6691) -- Fixed a rare issue where a reroute relative to old routes might have occurred after setting new routes. [#6693](https://github.com/mapbox/mapbox-navigation-android/pull/6693) -- Added experimental `MapboxRouteLineOptions#shareLineGeometrySources` option to enable route line's GeoJson source data sharing between multiple instances of the map. [#6680](https://github.com/mapbox/mapbox-navigation-android/pull/6680) -- Fixed issues in `ReplayRouteSession`. The routes observer was never unregistered. Alternative route selection resets replay to the beginning. Drop-In Ui changing portrait and landscape modes resets replay to the beginning. [#6675](https://github.com/mapbox/mapbox-navigation-android/pull/6675) -- Fixed an issue where first `BannerInstructions` of `RouteProgress` and `BannerInstructionsObserver` could have not been delivered after starting active guidance. [#6702](https://github.com/mapbox/mapbox-navigation-android/pull/6702) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0)) -- Mapbox Navigation Native `v123.0.0` -- Mapbox Core Common `v23.2.1` -- Mapbox Java `v6.10.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.3)) - - -## Mapbox Navigation SDK 2.9.4 - 08 December, 2022 -### Changelog -[Changes between v2.9.3 and v2.9.4](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.3...v2.9.4) - -#### Features - -#### Bug fixes and improvements -- Changed EH speedLimit behaviour: value is picked based on the date-time conditions using device’s system time and edge's location based timezone. [#6697](https://github.com/mapbox/mapbox-navigation-android/pull/6697) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.5` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.10.0-beta.2 - 01 December, 2022 -### Changelog -[Changes between v2.10.0-beta.1 and v2.10.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-beta.1...v2.10.0-beta.2) - -#### Features -- Introduced `ReplayRouteSession` and `ReplayRouteSessionOptions`. When enabled the active route will be simulated. This will replay routes in a memory efficient way, so you can simulate long routes at high location frequencies. [#6636](https://github.com/mapbox/mapbox-navigation-android/pull/6636) -- Added building highlight on arrival support to `NavigationView`. Added new customization options `ViewOptionsCustomization.enableBuildingHighlightOnArrival` and `ViewOptionsCustomization.buildingHighlightOptions`. [#6651](https://github.com/mapbox/mapbox-navigation-android/pull/6651) -- Added `ComponentInstaller` for the `BuildingHighlightComponent` that offers simplified integration of the `MapboxBuildingsApi` and `MapboxBuildingView`. [#6651](https://github.com/mapbox/mapbox-navigation-android/pull/6651) -- Introduced parallelization of route requests made with `MapboxNavigation#requestRoutes`. Now, if an offboard route request fails or times out (the default timeout has been decreased from 10 seconds to 5 seconds), we're already in the process of calculating an onboard route to decrease the time needed to provide a usable route to the user, as long as we have the data cached or pre-downloaded to succeed with an onboard request. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -#### Bug fixes and improvements -- Fixed an issue in the `NavigationView` where the last audio instruction from the previous session becomes the 1st on the next session. [#6662](https://github.com/mapbox/mapbox-navigation-android/pull/6662) -- Fixed crash in `PermissionsLauncherFragment` occurring on device rotation. [#6635](https://github.com/mapbox/mapbox-navigation-android/pull/6635) -- Fixed a rare `java.lang.IllegalArgumentException: The Path cannot loop back on itself.` exception when using `NavigationLocationProvider`. [#6641](https://github.com/mapbox/mapbox-navigation-android/pull/6641) -- Started clearing route geometry cache when no routes (neither routes used for Active Guidance nor previewed ones) are available. [#6617](https://github.com/mapbox/mapbox-navigation-android/pull/6617) -- Added convenience `MapboxNavigation#moveRoutesFromPreviewToNavigator` method to simplify transition from Routes Preview state to Active Guidance state. [#6617](https://github.com/mapbox/mapbox-navigation-android/pull/6617) -- Minor performance improvements for `MapboxNavigationViewportDataSource#evaluate`. [#6645](https://github.com/mapbox/mapbox-navigation-android/pull/6645) -- Minor optimization when updating the vanishing route line by removing check for route line related layers. [#6642](https://github.com/mapbox/mapbox-navigation-android/pull/6642) -- Added minor optimization to vanishing route line calculations by checking if the incoming point equal to the previous point in order to avoid recalculation and re-rendering. [#6643](https://github.com/mapbox/mapbox-navigation-android/pull/6643) -- Improved performance of `MapboxRouteLineApi#updateWithRouteProgress` function execution. [#6648](https://github.com/mapbox/mapbox-navigation-android/pull/6648) -- Fixed a rare issue where the offset marking the traveled portion of the route would be ahead of the user location puck, especially around sharp maneuvers. [#6648](https://github.com/mapbox/mapbox-navigation-android/pull/6648) -- Fixed an issue where reroute requests where not applying the latest EV data provided via `MapboxNavigation#onEVDataUpdated`. [#6650](https://github.com/mapbox/mapbox-navigation-android/pull/6650) -- Added `NavigationRoute#waypoints` as the source of truth for `DirectionsWaypoint`s which can be common for all routes or route specific depending on `RouteOptions#waypointsPerRoute()` parameter. [#6555](https://github.com/mapbox/mapbox-navigation-android/pull/6555) -- Improved behavior in tunnels and underground parking lots for `DeviceType#AUTOMOBILE` by preventing tunnel-induced location simulation while we're off-road and vice-versa preventing generation of off-road location samples in tunnels. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Improved fork detection in tunnels for `DeviceType#AUTOMOBILE`. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- :warning: Changed `NavigationRouteAlternativesObserver` to only return the latest generated set of possible alternative routes to prevent accumulation of routes. This decreases the applicable usages of `AlternativeRouteMetadata#alternativeId` as the ID will be rebuilt in most of the cases. Future releases will provide improved mechanism to help understand similarity of continuously delivered alternative routes. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Improved location generation on multi-level roads for `DeviceType#AUTOMOBILE`, especially focusing on avoiding snapping the user location to the incorrect level or inaccessible parallel road. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Fixed an issue where `NavigationRouteAlternativesObserver` would fire unnecessarily often with new sets of routes. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Optimized predictive resource caching and reduced peak memory and CPU consumption on very long and complex routes. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) -- Fixed an issue for `DeviceType#AUTOMOBILE` where entering a tunnel just after exiting a previous one (in a short time frame) could lead to incorrect location simulation. [#6659](https://github.com/mapbox/mapbox-navigation-android/pull/6659) - -#### Known issues :warning: -This release adds copies of classes under `com.mapbox.android.core.location` and `com.mapbox.android.core.permissions` packages from `com.mapbox.mapboxsdk:mapbox-android-core` artifact directly into the binary. This means that if you explicitly define a dependency on `com.mapbox.mapboxsdk:mapbox-android-core` artifact you can run into a duplicate class error, for example: -``` -Execution failed for task ':{module}:checkReleaseDuplicateClasses'. -> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable - > Duplicate class com.mapbox.android.core.location.LocationEngine found in modules jetified-common-23.2.0-rc.3-runtime (com.mapbox.common:common:23.2.0-rc.3) and jetified-mapbox-android-core-5.0.2-runtime (com.mapbox.mapboxsdk:mapbox-android-core:5.0.2) -``` -If you do run into this error, make sure to remove the direct `com.mapbox.mapboxsdk:mapbox-android-core` dependency from your build script. If you're not defining the dependency directly, make sure that you're using compatible Mapbox dependencies or as a last resort exclude the artifact from any other transitive dependency that might be bringing it in, for example: -``` -implementation(sdkDependency) { - exclude group: 'com.mapbox.mapboxsdk', module: 'mapbox-android-core' -} -``` - -The copies of the classes currently come in with minor type incompatibilities but these will be resolved with the upcoming pre-releases, before the changes become stable. The incompatibilities you can run into require changes like: -```diff - object : LocationEngineCallback { -- override fun onSuccess(result: LocationEngineResult) { -- result.lastLocation?.let { -+ override fun onSuccess(result: LocationEngineResult?) { -+ result?.lastLocation?.let { - // ... - } - // ... - } -``` -```diff - object : PermissionsListener { -- override fun onExplanationNeeded(permissionsToExplain: MutableList?) { -+ override fun onExplanationNeeded(permissionsToExplain: List?) { - // ... - } - // ... - } -``` - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0-rc.1)) -- Mapbox Navigation Native `v122.0.0` -- Mapbox Core Common `v23.2.0-rc.3` -- Mapbox Java `v6.10.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.3)) - - -## Mapbox Navigation SDK 2.9.3 - 01 December, 2022 -### Changelog -[Changes between v2.9.2 and v2.9.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.2...v2.9.3) - -#### Features -#### Bug fixes and improvements -- Updated `HistoryUploadWorker` attachments metadata to include the `created` field with the same value as `startedAt`. [#6660](https://github.com/mapbox/mapbox-navigation-android/pull/6660) -- Updated `MapboxCopilotImpl` to call `startRecording` as soon as `onShouldStartRecording` is called. [#6655](https://github.com/mapbox/mapbox-navigation-android/pull/6655) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.4` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.9.2 - 18 November, 2022 -### Changelog -[Changes between v2.9.1 and v2.9.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.1...v2.9.2) - -#### Features - -#### Bug fixes and improvements -- Fixed locations problem: sometimes the puck was matched to a wrong route edge. [#6627](https://github.com/mapbox/mapbox-navigation-android/pull/6627) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.3` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.10.0-beta.1 - 18 November, 2022 -### Changelog -[Changes between v2.10.0-alpha.3 and v2.10.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-alpha.3...v2.10.0-beta.1) - -#### Bug fixes and improvements -- Updated `MapboxAudioGuidance`, used by `NavigationView`, to avoid playback of duplicate voice instructions when un-muting. [#6608](https://github.com/mapbox/mapbox-navigation-android/pull/6608) -- Optimized rerouting: now the reroute request is interrupted if the puck returns to the route. [#6614](https://github.com/mapbox/mapbox-navigation-android/pull/6614) -- Fixed crash in `MapboxInfoPanelHeaderArrivalLayoutBinding.java` by disabling layout transitions in `InfoPanelHeaderActiveGuidanceBinder`, `InfoPanelHeaderArrivalBinder`, `InfoPanelHeaderDestinationPreviewBinder` and `InfoPanelHeaderRoutesPreviewBinder`. [#6616](https://github.com/mapbox/mapbox-navigation-android/pull/6616) -- Fixed location permissions request when hosting `NavigationView` in a Fragment. [#6618](https://github.com/mapbox/mapbox-navigation-android/pull/6618) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0-beta.1)) -- Mapbox Navigation Native `v121.0.0` -- Mapbox Core Common `v23.2.0-beta.1` -- Mapbox Java `v6.10.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.2)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.9.1 - 11 November, 2022 -### Changelog -[Changes between v2.9.0 and v2.9.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0...v2.9.1) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.2` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.9.0 - 11 November, 2022 -### Changelog -[Changes between v2.8.0 and v2.9.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0...v2.9.0) - -#### Features -- Added public-preview Copilot feature. [#6572](https://github.com/mapbox/mapbox-navigation-android/pull/6572) -- :warning: Introduced `ViewStyleCustomization.locationPuckOptions` in favor of `ViewStyleCustomization.locationPuck` that can be used to leverage `LocationPuckOptions` to change the location puck at runtime for each navigation state. [#6574](https://github.com/mapbox/mapbox-navigation-android/pull/6574) -- Removed `@Experimental` annotation from all files related to Drop-In UI. [#6471](https://github.com/mapbox/mapbox-navigation-android/pull/6471) -- Added `ComponentInstaller` for the `TripProgressComponent` that offers simplified integration of the `MapboxTripProgressView` and `MapboxTripProgressApi`. [#6513](https://github.com/mapbox/mapbox-navigation-android/pull/6513) -- Introduced new `ViewOptionsCustomization` options that allows showing/hiding of various `NavigationView` subviews. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showManeuver` can be used to show/hide the maneuver view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showSpeedLimit` can be used to show/hide the speed limit view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showRoadName` can be used to show/hide the road name view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showActionButtons` can be used to show/hide action buttons layout. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showCompassActionButton` can be used to show/hide compass action button. The default is `false`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showCameraModeActionButton` can be used to show/hide toggle camera mode action button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showToggleAudioActionButton` can be used to show/hide toggle voice instructions action button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showRecenterActionButton` can be used to show/hide re-center camera action button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showTripProgress` can be used to show/hide info panel's trip progress view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showRoutePreviewButton` can be used to show/hide info panel's show route preview button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showStartNavigationButton` can be used to show/hide info panel's start navigation button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showEndNavigationButton` can be used to show/hide info panel's end navigation button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) -- Introduced `ViewOptionsCustomization.showPoiName` and `ViewOptionsCustomization.showArrivalText` that allows showing/hiding of the POI and arrival text view. [#6515](https://github.com/mapbox/mapbox-navigation-android/pull/6515) -- Introduced `ViewBinderCustomization.infoPanelPoiNameBinder` and `ViewBinderCustomization.infoPanelArrivalTextBinder` that allows injection of custom Info Panel POI and arrival text view into `NavigationView`. [#6515](https://github.com/mapbox/mapbox-navigation-android/pull/6515) -- Added `LocationMatcherResult#inTunnel` which indicates if a current matched location is in a tunnel. [#6548](https://github.com/mapbox/mapbox-navigation-android/pull/6548) -- Added `ViewBinderCustomization.infoPanelRoutePreviewButtonBinder` and `ViewBinderCustomization.infoPanelStartNavigationButtonBinder` that allows injection of custom Info Panel buttons for Route Preview and Start Navigation in `NavigationView`. [#6490](https://github.com/mapbox/mapbox-navigation-android/pull/6490) -- Added `ViewBinderCustomization.actionCompassButtonBinder`, `ViewBinderCustomization.actionCameraModeButtonBinder`, `ViewBinderCustomization.actionToggleAudioButtonBinder` and `ViewBinderCustomization.actionRecenterButtonBinder` that allows injection of a custom Compass, Camera Mode, Toggle Voice Instructions and Camera Recenter Buttons in `NavigationView`. [#6490](https://github.com/mapbox/mapbox-navigation-android/pull/6490) -- Introduced `ActionButtonsBinder` base `UIBinder` class, that allows use of a custom action buttons layout with default action buttons in `NavigationView`. [#6490](https://github.com/mapbox/mapbox-navigation-android/pull/6490) -- Added an experimental `DeveloperMetadataObserver` that can be registered via `MapboxNavigation#registerDeveloperMetadataObserver` and can be used for getting `DeveloperMetadata` which contains useful information (e.g. `copilotSessionId`) that should be included when reporting an issue. [#6456](https://github.com/mapbox/mapbox-navigation-android/pull/6456) -- Introduced `NavigationView.setRouteOptionsInterceptor` that allows to override `RouteOptions` used by `NavigationView`. [#6391](https://github.com/mapbox/mapbox-navigation-android/pull/6391) -- Added `ComponentInstaller` for the `RoadNameComponent` that offers simplified integration of a `MapboxRoadNameView`. [#6400](https://github.com/mapbox/mapbox-navigation-android/pull/6400) - -#### Bug fixes and improvements -- Slightly decreased the memory consumption of the online router. [#6562](https://github.com/mapbox/mapbox-navigation-android/pull/6562) -- Improved positioning and location signal simulation in tunnels. [#6562](https://github.com/mapbox/mapbox-navigation-android/pull/6562) -- :warning: Updated the `RoadObject#location` property to be lazily initialized. This change greatly decreases `RouteProgress` generation time and boosts performance when navigating routes with many `UpcomingRoadObject`s. [#6573](https://github.com/mapbox/mapbox-navigation-android/pull/6573) -- :warning: Removed `MapboxMapScalebarParams` and replaced `ViewStyleCustomization.mapScalebarParams` by `ViewOptionsCustomization.showMapScalebar` [#6523](https://github.com/mapbox/mapbox-navigation-android/pull/6523) -- Refactored `ScalebarComponent` to use `ViewOptionsCustomization.distanceFormatterOptions` to change between imperial and metric based unit. [#6523](https://github.com/mapbox/mapbox-navigation-android/pull/6523) -- :warning: Updated `NavigationView` buttons customization to allow styling via XML styles: [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.compassButtonParams` option has been replaced by `ViewStyleCustomization.compassButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultCompassButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.cameraModeButtonParams` option has been replaced by `ViewStyleCustomization.cameraModeButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultCameraModeButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.audioGuidanceButtonParams` option has been replaced by `ViewStyleCustomization.audioGuidanceButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultAudioGuidanceButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.recenterButtonParams` option has been replaced by `ViewStyleCustomization.recenterButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultRecenterButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.routePreviewButtonParams` option has been replaced by `ViewStyleCustomization.routePreviewButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultRoutePreviewButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.startNavigationButtonParams` option has been replaced by `ViewStyleCustomization.startNavigationButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultStartNavigationButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.endNavigationButtonParams` option has been replaced by `ViewStyleCustomization.endNavigationButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultEndNavigationButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - The `MapboxExtendableButtonParams` class has been removed. Any action button placement adjustments must be done via custom `ActionButtonsBinder` implementation. [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) -- Fixed an issue with `NavigationView` that caused road label position to not update in some cases. [#6538](https://github.com/mapbox/mapbox-navigation-android/pull/6538) -- Slightly improved performance of updates to the traveled portion of the route in MapboxRouteLineView. [#6528](https://github.com/mapbox/mapbox-navigation-android/pull/6528) -- Fixed a problem with custom route line layer scaling not getting applied to the correct layer(s) when switching between routes. [#6544](https://github.com/mapbox/mapbox-navigation-android/pull/6544) -- Improved experience in tunnels and reduced the likelihood of losing road edge matching candidates. [#6510](https://github.com/mapbox/mapbox-navigation-android/pull/6510) -- Fixed an issue with `NavigationView` that caused road label position to not update in some cases. [#6508](https://github.com/mapbox/mapbox-navigation-android/pull/6508) -- Fixed an issue where the SDK was trying to send telemetry events when telemetry is switched off globally. [#6512](https://github.com/mapbox/mapbox-navigation-android/pull/6512) -- Improved precision of congestion visualization and independent leg styling transitions, especially for long routes. [#6476](https://github.com/mapbox/mapbox-navigation-android/pull/6476) -- Fixed an issue with congestion visualization on the route line that occurred during route refreshes. [#6476](https://github.com/mapbox/mapbox-navigation-android/pull/6476) -- Made `MapViewBinder#shouldLoadMapStyle` false by default. [#6485](https://github.com/mapbox/mapbox-navigation-android/pull/6485) -- Fixed an issue that prevented any registered `OnBackPressedCallback`s to fire when `NavigationView` is attached. [#6483](https://github.com/mapbox/mapbox-navigation-android/pull/6483) -- Removed `NavigationViewListener.onBackPressed()`. You can register your own [OnBackPressedCallback](https://developer.android.com/reference/androidx/activity/OnBackPressedCallback) to intercept any `NavigationView` BACK press events. [#6483](https://github.com/mapbox/mapbox-navigation-android/pull/6483) -- Fixed an issue with `NavigationView` that caused trip session not to start after granting location permissions that were requested outside of Drop-In UI by an application. [#6489](https://github.com/mapbox/mapbox-navigation-android/pull/6489) -- Fixed an issue with `NavigationView` that caused unexpected camera movements when switching between navigation states. [#6487](https://github.com/mapbox/mapbox-navigation-android/pull/6487) -- Supported changing `MapboxVoiceInstructionsPlayer` language in runtime via `updateLanguage` method. [#6491](https://github.com/mapbox/mapbox-navigation-android/pull/6491) -- Deprecated `MapboxVoiceInstructionsPlayer` constructors that accept access token and introduced the ones without it. [#6491](https://github.com/mapbox/mapbox-navigation-android/pull/6491) -- Introduced `NavigationViewApi.getCurrentVoiceInstructionsPlayer()` which can be used to play custom voice instructions. [#6475](https://github.com/mapbox/mapbox-navigation-android/pull/6475) -- Updated `RecenterButtonComponent` and `CameraModeButtonComponent` to show in `RoutePreview` state. [#6465](https://github.com/mapbox/mapbox-navigation-android/pull/6465) -- Fixed an issue where restrictions were drawn only on the first leg of the route, if independent leg styling was not used (default behavior). [#6440](https://github.com/mapbox/mapbox-navigation-android/pull/6440) -- Fixed a crash in `MapboxJunctionApi` that happens when a junction contains an invalid bitmap. [#6459](https://github.com/mapbox/mapbox-navigation-android/pull/6459) -- Updated `MapboxJunctionApi` to ignore banner components with subtype `signboard`. `MapboxSignboardApi` should be used to handle such components. [#6459](https://github.com/mapbox/mapbox-navigation-android/pull/6459) -- Marked `MapboxSpeedLimitView`, `MapboxStatusView`, `MapboxTripProgressView`, `MapboxSoundButton` methods with `@UiThread` annotation. [#6272](https://github.com/mapbox/mapbox-navigation-android/pull/6272) -- Marked `InfoPanelBinder`, `NavigationView`, `NavigationViewApi` methods with `@UiThread` annotation. [#6269](https://github.com/mapbox/mapbox-navigation-android/pull/6269) -- Marked `MapboxExitText`, `MapboxLaneGuidance`, `MapboxLaneGuidanceAdapter`, `MapboxManeuverView`, `MapboxPrimaryManeuver`, `MapboxSecondaryManeuver`, `MapboxStepDistance`, `MapboxSubManeuver`, `MapboxTurnIconManeuver`, `MapboxUpcomingManeuverAdapter` methods with `@UiThread` annotation. [#6270](https://github.com/mapbox/mapbox-navigation-android/pull/6270) -- Marked `RouteShieldCallback` methods with `@UiThread` annotation. [#6271](https://github.com/mapbox/mapbox-navigation-android/pull/6271) -- Fixed an issue with `NavigationView` that caused road label position to not update after changing peek height of the Info Panel. [#6463](https://github.com/mapbox/mapbox-navigation-android/pull/6463) -- Updated `Store` to allow `Action` dispatch from `State` observers. [#6455](https://github.com/mapbox/mapbox-navigation-android/pull/6455) -- Improved `NavigationView` to restore navigation camera state after the view is recreated, e.g. due to a configuration change. [#6472](https://github.com/mapbox/mapbox-navigation-android/pull/6472) -- Introduced `ViewBinderCustomization.mapViewBinder` instead of `NavigationView.customizeMapView` to allow for customizing mapView. [#6433](https://github.com/mapbox/mapbox-navigation-android/pull/6433) - To migrate change your code from: -```kotlin -binding.navigationView.customizeMapView(customMapView) -``` -into: -```kotlin -binding.navigationView.customizeViewBinders { - mapViewBinder = object : MapViewBinder() { - override fun getMapView(viewGroup: ViewGroup): MapView = customMapView - } -} -``` -- Removed force disabling of `MapView#compass` for custom MapViews. [#6433](https://github.com/mapbox/mapbox-navigation-android/pull/6433) -- :warning: Improved alternatives route processing. `MapboxNavigation#setNavigationRoutes` doesn't accept alternatives which don't deviate from primary route or which have different destinations. Rejected alternatives will be present in `RoutesSetSuccess.ignoredAlternatives` and won't produce `AlternativeRouteMetadata`. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Fixed false detection of passed alternatives that led to their removal. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Improved route matching. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Updated `LocationMatcherResult#zLevel`, `LocationMatcherResult#road` to have no values during `RouteProgressState#OFF_ROUTE` state. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Fixed crash that occurred when user selected Disagree in Telemetry Settings dialog from the map info screen. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- :warning: Restructured the package system of Drop-In UI into feature verticals. [#6430](https://github.com/mapbox/mapbox-navigation-android/pull/6430) -- [TileStoreService] Use shared memory for marshaling large types and improve error handling. [#6422](https://github.com/mapbox/mapbox-navigation-android/pull/6422) -- [TileStoreService] Fixed an issue that prevented callbacks to be invoked if an operation had to be retried because of a loss of connection to the service process. [#6422](https://github.com/mapbox/mapbox-navigation-android/pull/6422) -- Fixed an issue with restricted road visualization on the route line that occurred during route refreshes. [#6399](https://github.com/mapbox/mapbox-navigation-android/pull/6399) -- Improved precision of restricted sections visualization, especially for long routes. [#6399](https://github.com/mapbox/mapbox-navigation-android/pull/6399) -- Fixed a rare issue where alternative route would not be vanished until deviation point for `MapboxRouteLineApi#setNavigationRoutes(routes, metadata)` when the route's geometry contained duplicate points. [#6399](https://github.com/mapbox/mapbox-navigation-android/pull/6399) -- Introduced `ViewStyleCutomization.compassButtonParams` property to configure compass. [#6395](https://github.com/mapbox/mapbox-navigation-android/pull/6395) -- Introduced `MapboxExtendableButtonParams.enabled` property to enable/disable a button. [#6395](https://github.com/mapbox/mapbox-navigation-android/pull/6395) -- Renamed `MapboxAudioGuidance.getInstance()` to `getRegisteredInstance`. Rename `unMute` to `unmute` for audio guidance classes. [#6445](https://github.com/mapbox/mapbox-navigation-android/pull/6445) -- Fixed an issue with `NavigationView` that prevented camera from going into following state after starting a trip. [#6449](https://github.com/mapbox/mapbox-navigation-android/pull/6449) -- Marked `ReplayProgressObserver`, `MapboxReplayer`, `ReplayLocationEngine`, `RerouteController#RoutesCallback`, `NavigationRerouteController#RoutesCallback`, `LocationObserver`, `NavigationSessionStateObserver`, `OffRouteObserver`, `RouteProgressObserver`, `TripSessionStateObserver`, `VoiceInstructionsObserver` methods with `@UiThread` annotation. [#6266](https://github.com/mapbox/mapbox-navigation-android/pull/6266) -- Fix crash due to multiple DataStores active. [#6392](https://github.com/mapbox/mapbox-navigation-android/pull/6392) -- Replaced `NavigationViewApiError` error classes with single error class that accepts `NavigationViewApiErrorTypes`. [#6390](https://github.com/mapbox/mapbox-navigation-android/pull/6390) -- Fixed the issue where `AlternativeRouteMetadata` instances were not updated when alternative routes were refreshed. The issue did not impact the primary route. [#6389](https://github.com/mapbox/mapbox-navigation-android/pull/6389) -- Updated `UiComponent` to use `Dispatchers.Main.Immediate`. [#6393](https://github.com/mapbox/mapbox-navigation-android/pull/6393) -- Mitigated a rare issue that caused a crash in alternative routes fork offset calculation when using `MapboxRouteLineApi#setNavigationRoutes`. [#6404](https://github.com/mapbox/mapbox-navigation-android/pull/6404) -- Improved `MapboxNavigation#startTripSession(withForegroundService = true)` docs to indicate that it should only be called from a foreground state. [#6405](https://github.com/mapbox/mapbox-navigation-android/pull/6405) -- Fixed an issue where registered `RouteProgressObserver`s were not invoked, while alternative routes were updated. [#6397](https://github.com/mapbox/mapbox-navigation-android/pull/6397) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.1` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.10.0-alpha.3 - 11 November, 2022 -### Changelog -[Changes between v2.10.0-alpha.2 and v2.10.0-alpha.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-alpha.2...v2.10.0-alpha.3) - -#### Features -- Added public-preview Copilot feature. [#6572](https://github.com/mapbox/mapbox-navigation-android/pull/6572) -- :warning: Introduced `ViewStyleCustomization.locationPuckOptions` in favor of `ViewStyleCustomization.locationPuck` that can be used to leverage `LocationPuckOptions` to change the location puck at runtime for each navigation state. [#6574](https://github.com/mapbox/mapbox-navigation-android/pull/6574) -- Removed `@Experimental` annotation from all files related to Drop-In UI. [#6471](https://github.com/mapbox/mapbox-navigation-android/pull/6471) -- Added experimental routes preview state, see `MapboxNavigaton#setRoutesPreview`, `MapboxNavigaton#changeRoutesPreviewPrimaryRoute`, `MapboxNavigaton#registerRoutesPreviewObserver`, `MapboxNavigaton#getRoutesPreview`. [#6495](https://github.com/mapbox/mapbox-navigation-android/pull/6495) -#### Bug fixes and improvements -- Updated route refresh log to account for state_of_charge annotations and waypoints updates. [#6579](https://github.com/mapbox/mapbox-navigation-android/pull/6579) -- :warning: Updated the `RoadObject#location` property to be lazily initialized. This change greatly decreases `RouteProgress` generation time and boosts performance when navigating routes with many `UpcomingRoadObject`s [#6573](https://github.com/mapbox/mapbox-navigation-android/pull/6573) -#### Known issues :bangbang: -- The first `BannerInstructions` of `RouterProgress` and `BannerInstructionsObserver` may not be delivered after starting active guidance. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.10.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.10.0-beta.1)) -- Mapbox Navigation Native `v121.0.0` -- Mapbox Core Common `v23.2.0-beta.1` -- Mapbox Java `v6.10.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.10.0-beta.2)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.10.0-alpha.2 - 04 November, 2022 -### Changelog -[Changes between v2.10.0-alpha.1 and v2.10.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.10.0-alpha.1...v2.10.0-alpha.2) - -#### Features -#### Bug fixes and improvements -- Fixed an issue where "silent waypoints" (not regular waypoints that define legs) had markers added on the map when route line was drawn with `MapboxRouteLineApi` and `MapboxRouteLineView`. [#6526](https://github.com/mapbox/mapbox-navigation-android/pull/6526) -- Fixed an issue where `DirectionsResponse#waypoints` list was cleared after a successful non-EV route refresh. [#6539](https://github.com/mapbox/mapbox-navigation-android/pull/6539) -- Fixed an issue with EV route refresh failing in cases where EV data updates are not provided. Now, the initial parameters from a route request will be used as a fallback. [#6534](https://github.com/mapbox/mapbox-navigation-android/pull/6534) -- Slightly decreased the memory consumption of the online router. [#6562](https://github.com/mapbox/mapbox-navigation-android/pull/6562) -- Improved positioning and location signal simulation in tunnels. [#6562](https://github.com/mapbox/mapbox-navigation-android/pull/6562) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.1` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0-beta.2)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.9.0-rc.2 - 03 November, 2022 -### Changelog -[Changes between v2.9.0-rc.1 and v2.9.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-rc.1...v2.9.0-rc.2) - -#### Features -- Added `ComponentInstaller` for the `TripProgressComponent` that offers simplified integration of the `MapboxTripProgressView` and `MapboxTripProgressApi`. [#6513](https://github.com/mapbox/mapbox-navigation-android/pull/6513) -- Introduced new `ViewOptionsCustomization` options that allows showing/hiding of various `NavigationView` subviews. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showManeuver` can be used to show/hide the maneuver view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showSpeedLimit` can be used to show/hide the speed limit view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showRoadName` can be used to show/hide the road name view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showActionButtons` can be used to show/hide action buttons layout. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showCompassActionButton` can be used to show/hide compass action button. The default is `false`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showCameraModeActionButton` can be used to show/hide toggle camera mode action button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showToggleAudioActionButton` can be used to show/hide toggle voice instructions action button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showRecenterActionButton` can be used to show/hide re-center camera action button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showTripProgress` can be used to show/hide info panel's trip progress view. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showRoutePreviewButton` can be used to show/hide info panel's show route preview button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showStartNavigationButton` can be used to show/hide info panel's start navigation button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) - - `ViewOptionsCustomization.showEndNavigationButton` can be used to show/hide info panel's end navigation button. The default is `true`. [#6506](https://github.com/mapbox/mapbox-navigation-android/pull/6506) -- Introduced `ViewOptionsCustomization.showPoiName` and `ViewOptionsCustomization.showArrivalText` that allows showing/hiding of the POI and arrival text view. [#6515](https://github.com/mapbox/mapbox-navigation-android/pull/6515) -- Introduced `ViewBinderCustomization.infoPanelPoiNameBinder` and `ViewBinderCustomization.infoPanelArrivalTextBinder` that allows injection of custom Info Panel POI and arrival text view into `NavigationView`. [#6515](https://github.com/mapbox/mapbox-navigation-android/pull/6515) -- Added `LocationMatcherResult#inTunnel` which indicates if a current matched location is in a tunnel. [#6548](https://github.com/mapbox/mapbox-navigation-android/pull/6548) -#### Bug fixes and improvements -- :warning: Removed `MapboxMapScalebarParams` and replaced `ViewStyleCustomization.mapScalebarParams` by `ViewOptionsCustomization.showMapScalebar` [#6523](https://github.com/mapbox/mapbox-navigation-android/pull/6523) -- Refactored `ScalebarComponent` to use `ViewOptionsCustomization.distanceFormatterOptions` to change between imperial and metric based unit. [#6523](https://github.com/mapbox/mapbox-navigation-android/pull/6523) -- :warning: Updated `NavigationView` buttons customization to allow styling via XML styles: [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.compassButtonParams` option has been replaced by `ViewStyleCustomization.compassButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultCompassButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.cameraModeButtonParams` option has been replaced by `ViewStyleCustomization.cameraModeButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultCameraModeButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.audioGuidanceButtonParams` option has been replaced by `ViewStyleCustomization.audioGuidanceButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultAudioGuidanceButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.recenterButtonParams` option has been replaced by `ViewStyleCustomization.recenterButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultRecenterButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.routePreviewButtonParams` option has been replaced by `ViewStyleCustomization.routePreviewButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultRoutePreviewButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.startNavigationButtonParams` option has been replaced by `ViewStyleCustomization.startNavigationButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultStartNavigationButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - `ViewStyleCustomization.endNavigationButtonParams` option has been replaced by `ViewStyleCustomization.endNavigationButtonStyle`. The default style can be accessed via `ViewStyleCustomization.defaultEndNavigationButtonStyle()` [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) - - The `MapboxExtendableButtonParams` class has been removed. Any action button placement adjustments must be done via custom `ActionButtonsBinder` implementation. [#6498](https://github.com/mapbox/mapbox-navigation-android/pull/6498) -- Fixed an issue with `NavigationView` that caused road label position to not update in some cases. [#6538](https://github.com/mapbox/mapbox-navigation-android/pull/6538) -- Slightly improved performance of updates to the traveled portion of the route in MapboxRouteLineView. [#6528](https://github.com/mapbox/mapbox-navigation-android/pull/6528) -- Fixed a problem with custom route line layer scaling not getting applied to the correct layer(s) when switching between routes. [#6544](https://github.com/mapbox/mapbox-navigation-android/pull/6544) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.0` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0-beta.2)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.10.0-alpha.1 - 28 October, 2022 -### Changelog -[Changes between v2.9.0 and v2.10.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0...v2.10.0-alpha.1) - -#### Features -- Added support for EV route refresh. [#6511](https://github.com/mapbox/mapbox-navigation-android/pull/6511) -- Added `MapboxNavigation#onEVDataUpdated` method to be invoked by the end user to notify Navigation SDK of EV data changes so that it can be used in refresh requests. [#6511](https://github.com/mapbox/mapbox-navigation-android/pull/6511) -#### Bug fixes and improvements -- Fixed an issue where re-routes could have failed for EV routes. [#6005](https://github.com/mapbox/mapbox-navigation-android/pull/6005) - -:warning: `RouteProgress#remainingWaypoints` defines the amount of all remaining waypoints, including explicit (requested with `RouteOptions#coordinatesList`) and implicit (added on the fly, like Electric Vehicle waypoints - [see](https://docs.mapbox.com/api/navigation/directions/#electric-vehicle-routing)) ones. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.0` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - - -## Mapbox Navigation SDK 2.9.0-rc.1 - 28 October, 2022 -### Changelog -[Changes between v2.9.0-beta.3 and v2.9.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-beta.3...v2.9.0-rc.1) - -#### Features -#### Bug fixes and improvements -- Improved experience in tunnels and reduced the likelihood of losing road edge matching candidates. [#6510](https://github.com/mapbox/mapbox-navigation-android/pull/6510) -- Fixed an issue with `NavigationView` that caused road label position to not update in some cases. [#6508](https://github.com/mapbox/mapbox-navigation-android/pull/6508) -- Fixed an issue where the SDK was trying to send telemetry events when telemetry is switched off globally. [#6512](https://github.com/mapbox/mapbox-navigation-android/pull/6512) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0)) -- Mapbox Navigation Native `v119.0.0` -- Mapbox Core Common `v23.1.1` -- Mapbox Java `v6.9.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.9.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.9.0-beta.3 - 21 October, 2022 -### Changelog -[Changes between v2.9.0-beta.2 and v2.9.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-beta.2...v2.9.0-beta.3) - -#### Features -- Added `ViewBinderCustomization.infoPanelRoutePreviewButtonBinder` and `ViewBinderCustomization.infoPanelStartNavigationButtonBinder` that allows injection of custom Info Panel buttons for Route Preview and Start Navigation in `NavigationView`. [#6490](https://github.com/mapbox/mapbox-navigation-android/pull/6490) -- Added `ViewBinderCustomization.actionCompassButtonBinder`, `ViewBinderCustomization.actionCameraModeButtonBinder`, `ViewBinderCustomization.actionToggleAudioButtonBinder` and `ViewBinderCustomization.actionRecenterButtonBinder` that allows injection of a custom Compass, Camera Mode, Toggle Voice Instructions and Camera Recenter Buttons in `NavigationView`. [#6490](https://github.com/mapbox/mapbox-navigation-android/pull/6490) -- Introduced `ActionButtonsBinder` base `UIBinder` class, that allows use of a custom action buttons layout with default action buttons in `NavigationView`. [#6490](https://github.com/mapbox/mapbox-navigation-android/pull/6490) -#### Bug fixes and improvements -- Improved precision of congestion visualization and independent leg styling transitions, especially for long routes. [#6476](https://github.com/mapbox/mapbox-navigation-android/pull/6476) -- Fixed an issue with congestion visualization on the route line that occurred during route refreshes. [#6476](https://github.com/mapbox/mapbox-navigation-android/pull/6476) -- Made `MapViewBinder#shouldLoadMapStyle` false by default. [#6485](https://github.com/mapbox/mapbox-navigation-android/pull/6485) -- Fixed an issue that prevented any registered `OnBackPressedCallback`s to fire when `NavigationView` is attached. [#6483](https://github.com/mapbox/mapbox-navigation-android/pull/6483) -- Removed `NavigationViewListener.onBackPressed()`. You can register your own [OnBackPressedCallback](https://developer.android.com/reference/androidx/activity/OnBackPressedCallback) to intercept any `NavigationView` BACK press events. [#6483](https://github.com/mapbox/mapbox-navigation-android/pull/6483) -- Fixed an issue with `NavigationView` that caused trip session not to start after granting location permissions that were requested outside of Drop-In UI by an application. [#6489](https://github.com/mapbox/mapbox-navigation-android/pull/6489) -- Fixed an issue with `NavigationView` that caused unexpected camera movements when switching between navigation states. [#6487](https://github.com/mapbox/mapbox-navigation-android/pull/6487) -- Supported changing `MapboxVoiceInstructionsPlayer` language in runtime via `updateLanguage` method. [#6491](https://github.com/mapbox/mapbox-navigation-android/pull/6491) -- Deprecated `MapboxVoiceInstructionsPlayer` constructors that accept access token and introduced the ones without it. [#6491](https://github.com/mapbox/mapbox-navigation-android/pull/6491) -- Introduced `NavigationViewApi.getCurrentVoiceInstructionsPlayer()` which can be used to play custom voice instructions. [#6475](https://github.com/mapbox/mapbox-navigation-android/pull/6475) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0-rc.1)) -- Mapbox Navigation Native `v118.0.0` -- Mapbox Core Common `v23.1.0-rc.2` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.9.0-beta.2 - 14 October, 2022 -### Changelog -[Changes between v2.9.0-beta.1 and v2.9.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-beta.1...v2.9.0-beta.2) - -#### Bug fixes and improvements -- Updated `RecenterButtonComponent` and `CameraModeButtonComponent` to show in `RoutePreview` state. [#6465](https://github.com/mapbox/mapbox-navigation-android/pull/6465) -- Fixed an issue where restrictions were drawn only on the first leg of the route, if independent leg styling was not used (default behavior). [#6440](https://github.com/mapbox/mapbox-navigation-android/pull/6440) -- Fixed a crash in `MapboxJunctionApi` that happens when a junction contains an invalid bitmap. [#6459](https://github.com/mapbox/mapbox-navigation-android/pull/6459) -- Updated `MapboxJunctionApi` to ignore banner components with subtype `signboard`. `MapboxSignboardApi` should be used to handle such components. [#6459](https://github.com/mapbox/mapbox-navigation-android/pull/6459) -- Marked `MapboxSpeedLimitView`, `MapboxStatusView`, `MapboxTripProgressView`, `MapboxSoundButton` methods with `@UiThread` annotation. [#6272](https://github.com/mapbox/mapbox-navigation-android/pull/6272) -- Marked `InfoPanelBinder`, `NavigationView`, `NavigationViewApi` methods with `@UiThread` annotation. [#6269](https://github.com/mapbox/mapbox-navigation-android/pull/6269) -- Marked `MapboxExitText`, `MapboxLaneGuidance`, `MapboxLaneGuidanceAdapter`, `MapboxManeuverView`, `MapboxPrimaryManeuver`, `MapboxSecondaryManeuver`, `MapboxStepDistance`, `MapboxSubManeuver`, `MapboxTurnIconManeuver`, `MapboxUpcomingManeuverAdapter` methods with `@UiThread` annotation. [#6270](https://github.com/mapbox/mapbox-navigation-android/pull/6270) -- Marked `RouteShieldCallback` methods with `@UiThread` annotation. [#6271](https://github.com/mapbox/mapbox-navigation-android/pull/6271) -- Fixed an issue with `NavigationView` that caused road label position to not update after changing peek height of the Info Panel. [#6463](https://github.com/mapbox/mapbox-navigation-android/pull/6463) -- Updated `Store` to allow `Action` dispatch from `State` observers. [#6455](https://github.com/mapbox/mapbox-navigation-android/pull/6455) -- Improved `NavigationView` to restore navigation camera state after the view is recreated, e.g. due to a configuration change. [#6472](https://github.com/mapbox/mapbox-navigation-android/pull/6472) -- Introduced `ViewBinderCustomization.mapViewBinder` instead of `NavigationView.customizeMapView` to allow for customizing mapView. [#6433](https://github.com/mapbox/mapbox-navigation-android/pull/6433) - To migrate change your code from: -```kotlin -binding.navigationView.customizeMapView(customMapView) -``` -into: -```kotlin -binding.navigationView.customizeViewBinders { - mapViewBinder = object : MapViewBinder() { - override fun getMapView(viewGroup: ViewGroup): MapView = customMapView - } -} -``` -- Removed force disabling of `MapView#compass` for custom MapViews. [#6433](https://github.com/mapbox/mapbox-navigation-android/pull/6433) -- :warning: Improved alternatives route processing. `MapboxNavigation#setNavigationRoutes` doesn't accept alternatives which don't deviate from primary route or which have different destinations. Rejected alternatives will be present in `RoutesSetSuccess.ignoredAlternatives` and won't produce `AlternativeRouteMetadata`. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Fixed false detection of passed alternatives that led to their removal. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Improved route matching. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Updated `LocationMatcherResult#zLevel`, `LocationMatcherResult#road` to have no values during `RouteProgressState#OFF_ROUTE` state. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) -- Fixed crash that occurred when user selected Disagree in Telemetry Settings dialog from the map info screen. [#6464](https://github.com/mapbox/mapbox-navigation-android/pull/6464) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0-rc.1)) -- Mapbox Navigation Native `v118.0.0` -- Mapbox Core Common `v23.1.0-rc.2` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.9.0-beta.1 - 06 October, 2022 -### Changelog -[Changes between v2.9.0-alpha.4 and v2.9.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-alpha.4...v2.9.0-beta.1) - -#### Known issues :bangbang: -- `MapView` may crash when user selects Disagree in Telemetry Settings dialog. -- Navigation SDK unintentionally brings in the `ACCESS_BACKGROUND_LOCATION` permission definition in the merged manifest. You can remove the permission from your app's manifest with: -``` - -``` - -#### Features -- Added an experimental `DeveloperMetadataObserver` that can be registered via `MapboxNavigation#registerDeveloperMetadataObserver` and can be used for getting `DeveloperMetadata` which contains useful information (e.g. `copilotSessionId`) that should be included when reporting an issue. [#6456](https://github.com/mapbox/mapbox-navigation-android/pull/6456) -#### Bug fixes and improvements -- :warning: Restructured the package system of Drop-In UI into feature verticals. [#6430](https://github.com/mapbox/mapbox-navigation-android/pull/6430) -- [TileStoreService] Use shared memory for marshaling large types and improve error handling. [#6422](https://github.com/mapbox/mapbox-navigation-android/pull/6422) -- [TileStoreService] Fixed an issue that prevented callbacks to be invoked if an operation had to be retried because of a loss of connection to the service process. [#6422](https://github.com/mapbox/mapbox-navigation-android/pull/6422) -- Fixed an issue with restricted road visualization on the route line that occurred during route refreshes. [#6399](https://github.com/mapbox/mapbox-navigation-android/pull/6399) -- Improved precision of restricted sections visualization, especially for long routes. [#6399](https://github.com/mapbox/mapbox-navigation-android/pull/6399) -- Fixed a rare issue where alternative route would not be vanished until deviation point for `MapboxRouteLineApi#setNavigationRoutes(routes, metadata)` when the route's geometry contained duplicate points. [#6399](https://github.com/mapbox/mapbox-navigation-android/pull/6399) -- Introduced `ViewStyleCutomization.compassButtonParams` property to configure compass. [#6395](https://github.com/mapbox/mapbox-navigation-android/pull/6395) -- Introduced `MapboxExtendableButtonParams.enabled` property to enable/disable a button. [#6395](https://github.com/mapbox/mapbox-navigation-android/pull/6395) -- Renamed `MapboxAudioGuidance.getInstance()` to `getRegisteredInstance`. Rename `unMute` to `unmute` for audio guidance classes. [#6445](https://github.com/mapbox/mapbox-navigation-android/pull/6445) -- Fixed an issue with `NavigationView` that prevented camera from going into following state after starting a trip. [#6449](https://github.com/mapbox/mapbox-navigation-android/pull/6449) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.9.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.9.0-beta.2)) -- Mapbox Navigation Native `v116.0.0` -- Mapbox Core Common `v23.1.0-beta.2` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) - -## Mapbox Navigation SDK 2.9.0-alpha.4 - 30 September, 2022 -### Changelog -[Changes between v2.9.0-alpha.3 and v2.9.0-alpha.4](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-alpha.3...v2.9.0-alpha.4) - -#### Features -- Introduced `NavigationView.setRouteOptionsInterceptor` that allows to override `RouteOptions` used by `NavigationView`. [#6391](https://github.com/mapbox/mapbox-navigation-android/pull/6391) -- Added `ComponentInstaller` for the `RoadNameComponent` that offers simplified integration of a `MapboxRoadNameView`. [#6400](https://github.com/mapbox/mapbox-navigation-android/pull/6400) -#### Bug fixes and improvements -- Marked `ReplayProgressObserver`, `MapboxReplayer`, `ReplayLocationEngine`, `RerouteController#RoutesCallback`, `NavigationRerouteController#RoutesCallback`, `LocationObserver`, `NavigationSessionStateObserver`, `OffRouteObserver`, `RouteProgressObserver`, `TripSessionStateObserver`, `VoiceInstructionsObserver` methods with `@UiThread` annotation. [#6266](https://github.com/mapbox/mapbox-navigation-android/pull/6266) -- Fix crash due to multiple DataStores active. [#6392](https://github.com/mapbox/mapbox-navigation-android/pull/6392) -- Replaced `NavigationViewApiError` error classes with single error class that accepts `NavigationViewApiErrorTypes`. [#6390](https://github.com/mapbox/mapbox-navigation-android/pull/6390) -- Fixed the issue where `AlternativeRouteMetadata` instances were not updated when alternative routes were refreshed. The issue did not impact the primary route. [#6389](https://github.com/mapbox/mapbox-navigation-android/pull/6389) -- Updated `UiComponent` to use `Dispatchers.Main.Immediate`. [#6393](https://github.com/mapbox/mapbox-navigation-android/pull/6393) -- Mitigated a rare issue that caused a crash in alternative routes fork offset calculation when using `MapboxRouteLineApi#setNavigationRoutes`. [#6404](https://github.com/mapbox/mapbox-navigation-android/pull/6404) -- Improved `MapboxNavigation#startTripSession(withForegroundService = true)` docs to indicate that it should only be called from a foreground state. [#6405](https://github.com/mapbox/mapbox-navigation-android/pull/6405) -- Fixed an issue where registered `RouteProgressObserver`s were not invoked, while alternative routes were updated. [#6397](https://github.com/mapbox/mapbox-navigation-android/pull/6397) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.1` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0 - 29 September, 2022 -### Changelog -[Changes between v2.7.0 and v2.8.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0...v2.8.0) - -#### Features -- Added _Experimental_ `RouteRefreshStatesObserver` that can be used to observe route refresh states. To subscribe and unsubscribe on updates corresponding use `MapboxNavigation#registerRouteRefreshStateObserver` and `MapboxNavigation#unregisterRouteRefreshStateObserver`. [#6345](https://github.com/mapbox/mapbox-navigation-android/pull/6345) -- Added `ViewBinderCustomization.infoPanelHeaderFreeDriveBinder`, `ViewBinderCustomization.infoPanelHeaderDestinationPreviewBinder`, `ViewBinderCustomization.infoPanelHeaderRoutesPreviewBinder`, `ViewBinderCustomization.infoPanelHeaderActiveGuidanceBinder` and `ViewBinderCustomization.infoPanelHeaderArrivalBinder` that allows injection of a custom header content for each Navigation State in `NavigationView`. [#6273](https://github.com/mapbox/mapbox-navigation-android/pull/6273) -- Introduced `MapboxExtendableButtonParams` to allow end users to customize the default Drop-In UI buttons. [#6327](https://github.com/mapbox/mapbox-navigation-android/pull/6327) -- Added `ViewBinderCustomization.infoPanelEndNavigationButtonBinder` that allows injection of a custom Info Panel End Navigation Button in `NavigationView`. [#6331](https://github.com/mapbox/mapbox-navigation-android/pull/6331) -- Improved the route refresh feature to also refresh _closures_ (`RouteLeg#closures`). [#6274](https://github.com/mapbox/mapbox-navigation-android/pull/6274) -- Added `requireMapboxNavigation` to offer a simple way to use `MapboxNavigationApp`. [#6233](https://github.com/mapbox/mapbox-navigation-android/pull/6233) -- Implemented continuous alternatives in Drop-In UI. [#6213](https://github.com/mapbox/mapbox-navigation-android/pull/6213) -- Introduced `MapboxRestAreaApi#generateRestAreaGuideMap` to be used to fetch service/parking area guide maps using `BannerInstruction`. [#6239](https://github.com/mapbox/mapbox-navigation-android/pull/6239) -- Introduced `MapboxRestAreaApi#generateUpcomingRestAreaGuideMap` to be used to fetch service/parking area guide maps using `RestStop`. [#6239](https://github.com/mapbox/mapbox-navigation-android/pull/6239) -- Introduced `MapboxManeuverView#maneuverViewState` to allow users to observe changes to `MapboxManeuverViewState` when the view expands and collapses. [#6286](https://github.com/mapbox/mapbox-navigation-android/pull/6286) -- Introduced `NavigationViewApi#onManeuverCollapsed` and `NavigationViewApi#onManeuverExpanded` callback which is triggered upon changes to `MapboxManeuverViewState`. [#6286](https://github.com/mapbox/mapbox-navigation-android/pull/6286) -- Implemented logic that would display `BannerComponents` of `type` `GuidanceView` and `subType` `BannerComponents#SAPA`, `BannerComponents#CITYREAL`, `BannerComponents#AFTERTOLL`, `BannerComponents#SIGNBOARD`, `BannerComponents#TOLLBRANCH`, `BannerComponents#EXPRESSWAY_ENTRANCE`, `BannerComponents#EXPRESSWAY_EXIT` using `JunctionViewApi`. [#6285](https://github.com/mapbox/mapbox-navigation-android/pull/6285) -- Calling `MapboxNavigationApp.setup` will create a new `MapboxNavigation` instance with new `NavigationOptions` even if the app has been setup. [#6288](https://github.com/mapbox/mapbox-navigation-android/pull/6288) -- Added `MapboxDumpRegistry` which allows you to define adb commands for the sdk. [#6234](https://github.com/mapbox/mapbox-navigation-android/pull/6234) -- Added `NavigationViewListener.onBackPressed()`. This method allows client code to intercept any `NavigationView` BACK press events. [#6244](https://github.com/mapbox/mapbox-navigation-android/pull/6244) -- Added `ComponentInstaller` for the `NavigationCameraComponent` that offers simplified integration of the `NavigationCamera`. [#6202](https://github.com/mapbox/mapbox-navigation-android/pull/6202) -- Added `ComponentInstaller` for the `CameraModeButtonComponent` that offers simplified integration of the `NavigationCamera` mode button. [#6202](https://github.com/mapbox/mapbox-navigation-android/pull/6202) -- Added `NavigationViewOptions#distanceFormatterOptions` to allow for specifying `DistanceFormatterOptions` at runtime. [#6222](https://github.com/mapbox/mapbox-navigation-android/pull/6222) -- Added the `isUrban` flag to `EHorizonEdgeMetadata` which define if an edge is in urban area. [#6178](https://github.com/mapbox/mapbox-navigation-android/pull/6178) -- Added the `isUrban` flag to `RoadObject` which define if an object is in urban area. Might be `null` if it's not possible to define. [#6178](https://github.com/mapbox/mapbox-navigation-android/pull/6178) -- Added `ComponentInstaller` for the `RecenterButtonComponent` that offers simplified integration of map recenter button. [#6158](https://github.com/mapbox/mapbox-navigation-android/pull/6158) -- Introduced `ViewOptionsCustomization.isInfoPanelHideable` that allows control over whether the `NavigationView` Info Panel can hide when it is swiped down. [#6132](https://github.com/mapbox/mapbox-navigation-android/pull/6132) -- Introduced `ViewOptionsCustomization.infoPanelForcedState` that allows overriding of the `NavigationView` Info Panel (BottomSheetBehaviour) state. [#6132](https://github.com/mapbox/mapbox-navigation-android/pull/6132) - -#### Bug fixes and improvements -- Fixed super late hwy exit detection after leaving a tunnel (auto profile only). [#6346](https://github.com/mapbox/mapbox-navigation-android/pull/6346) -- Fixed the issue with incorrect geometry indices for `RouteLeg#incidents` and `RouteLeg#closures` after refresh. [#6364](https://github.com/mapbox/mapbox-navigation-android/pull/6364) -- Improved alternatives id robustness by adding new alternatives to existing instead of replacing them during `MapboxNavigation#requestAlternativeRoutes`. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Improved stop detector for auto profile. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Fixed an issue where `NavigationRoute#upcomingRoadObjects` was not refreshed. This issue did not impact the deprecated `RoadObjectsOnRouteObserver`. [#6378](https://github.com/mapbox/mapbox-navigation-android/pull/6378) -- Improved `MapboxNavigation#startTripSession(withForegroundService = true)` docs to indicate that it should only be called from a foreground state. [#6405](https://github.com/mapbox/mapbox-navigation-android/pull/6405) -- Mitigated a rare issue that caused a crash in alternative routes fork offset calculation when using `MapboxRouteLineApi#setNavigationRoutes`. [#6404](https://github.com/mapbox/mapbox-navigation-android/pull/6404) -- Fixed super late hwy exit detection after leaving a tunnel (auto profile only). [#6346](https://github.com/mapbox/mapbox-navigation-android/pull/6346) -- Fixed the issue with incorrect geometry indices for `RouteLeg#incidents` and `RouteLeg#closures` after refresh. [#6364](https://github.com/mapbox/mapbox-navigation-android/pull/6364) -- Improved alternatives id robustness by adding new alternatives to existing instead of replacing them during `MapboxNavigation#requestAlternativeRoutes`. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Improved stop detector for auto profile. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Fixed an issue where `NavigationRoute#upcomingRoadObjects` was not refreshed. This issue did not impact the deprecated `RoadObjectsOnRouteObserver`. [#6378](https://github.com/mapbox/mapbox-navigation-android/pull/6378) -- Optimized calls to modify route arrow layer visibility. [#6308](https://github.com/mapbox/mapbox-navigation-android/pull/6308) -- Provide better java support for `MapboxNavigationApp`. [#6292](https://github.com/mapbox/mapbox-navigation-android/pull/6292) -- Expose `PointAnnotationOptions` in Drop-In UI to allow users to define the destination marker icon and it's positioning. [#6314](https://github.com/mapbox/mapbox-navigation-android/pull/6314) -- Marked `MapboxNavigationApp` methods with `@Throws` annotation. [#6324](https://github.com/mapbox/mapbox-navigation-android/pull/6324) -- Exposed `AlternativeRouteMetadata#alternativeId` which lets user distinguish a new alternative from updated alternatives. [#6329](https://github.com/mapbox/mapbox-navigation-android/pull/6329) -- Fixed an issue with `NavigationView` that caused maneuver view to be cut off. [#6328](https://github.com/mapbox/mapbox-navigation-android/pull/6328) -- Introduced `MapboxUpcomingManeuverViewAdapter#updateManeuverViewOptions()`, `MapboxUpcomingManeuverViewAdapter#updateUpcomingManeuverIconStyle()` and `upcomingManeuverListIconStyle` attribute to allow for customizing the colors of maneuver turn icons in upcoming maneuver view list. [#6330](https://github.com/mapbox/mapbox-navigation-android/pull/6330) -- Fixed an issue with `NavigationView` that caused overview camera to have wrong pitch. [#6278](https://github.com/mapbox/mapbox-navigation-android/pull/6278) -- Fixed an issue with `NavigationView` that caused camera issues after reroute or switching to an alternative route. [#6283](https://github.com/mapbox/mapbox-navigation-android/pull/6283) -- Fixed an issue with `NavigationView` that caused camera to unexpectedly change state in some situations. [#6291](https://github.com/mapbox/mapbox-navigation-android/pull/6291) -- Fixed an issue where step distance in `MapboxManeuverView` could have been cut off. [#6296](https://github.com/mapbox/mapbox-navigation-android/pull/6296) -- Fixed an issue where trip progress in `MapboxTripProgressView` could have been cut off if large font size is used. [#6296](https://github.com/mapbox/mapbox-navigation-android/pull/6296) -- Added Experimental API `NavigationRoute#hasUnexpectedClosures` to check if a route has unexpected closures that might require a re-route. [#6295](https://github.com/mapbox/mapbox-navigation-android/pull/6295) -- Improved route refresh. Now Navigation SDK recalculates `DirectionsRoute#duration`, `RouteLeg#duration`, `LegStep#duration` after route refresh based on `LegAnnotation#duration`. [#6287](https://github.com/mapbox/mapbox-navigation-android/pull/6287) -- Fixed an issue where portions of alternative routes that overlap with the primary route weren't hidden correctly, suffering from precision problems. [#6228](https://github.com/mapbox/mapbox-navigation-android/pull/6228) -- Fixed incorrect values in `AlternativeRouteInfo#duration` and `RouteProgress#durationRemaining`: now they rely on `route.leg.annotations.duration` if available, otherwise, `LegStep#duration` is used for calculations. [#6237](https://github.com/mapbox/mapbox-navigation-android/pull/6237) -- Added `guideMapUri` to the `RestStop`. [#6237](https://github.com/mapbox/mapbox-navigation-android/pull/6237) -- [TileStore Android Service] Fixed a crash when the service process is killed by the Android system. [#6237](https://github.com/mapbox/mapbox-navigation-android/pull/6237) -- Fixed `MapboxNavigationApp#detach` will not fully detach. This causes `MapboxNavigation` to continue to be accessible, and causes `MapboxNavigationObserver.onDetached` to be called multiple times. [#6245](https://github.com/mapbox/mapbox-navigation-android/pull/6245) -- Introduced `NavigationViewListener#onInfoPanelDragging` to inform user when `InfoPanel` is dragging. [#6249](https://github.com/mapbox/mapbox-navigation-android/pull/6249) -- Introduced `NavigationViewListener#onInfoPanelSettling` to inform user when `InfoPanel` is settling. [#6249](https://github.com/mapbox/mapbox-navigation-android/pull/6249) -- Added Android 13 support. [#6196](https://github.com/mapbox/mapbox-navigation-android/pull/6196) -- Declared [POST_NOTIFICATIONS](https://developer.android.com/reference/android/Manifest.permission#POST_NOTIFICATIONS) permission in SDK's AndroidManifest.xml. It is highly recommended for apps to request the permission in runtime. Without it, the SDK will not be able to show the notification with trip progress in the notification drawer for apps that target Android 13 or higher. [#6196](https://github.com/mapbox/mapbox-navigation-android/pull/6196) -- Marked `MapboxNavigationApp` and `MapboxMavigationObserver` methods with `@UiThread` annotations. [#6254](https://github.com/mapbox/mapbox-navigation-android/pull/6254) -- Fixed an issue where `RouteProgress#navigationRoute` could have been delivered with an incorrect route reference, if setting routes failed as reported by `RoutesSetCallback`. [#6255](https://github.com/mapbox/mapbox-navigation-android/pull/6255) -- Expanded debug and warning logs around `RouteProgress` generation and route setting processes, including when incorrect progress is delivered to `MapboxRouteLineApi#updateWithRouteProgress`. [#6255](https://github.com/mapbox/mapbox-navigation-android/pull/6255) -- Updated `NavigationViewApi`. Introduced `startFreeDrive`, `startDestinationPreview`, `startRoutePreview`, `startActiveGuidance`, `startArrival`. Removed `fetchRoutes`, `setPreviewRoutes`, `setRoutes`, `setDestination`. Replaced `enableTripSession` and `enableReplaySession` with `routeReplayEnabled(enabled: Boolean)`. [#6174](https://github.com/mapbox/mapbox-navigation-android/pull/6174) -- Updated `NavigationView` to allow drawing of the info panel behind the translucent navigation bar. [#6145](https://github.com/mapbox/mapbox-navigation-android/pull/6145) -- Optimized vanishing line updates (`MapboxRouteLineApi#updateTraveledRouteLine`) when going through restrictions and legs aren't styled independently. [#6169](https://github.com/mapbox/mapbox-navigation-android/pull/6169) -- Optimized cache management when switching between primary and alternative routes to improve the execution time of `MapboxRouteLineApi#setNavigationRoutes`. [#6171](https://github.com/mapbox/mapbox-navigation-android/pull/6171) -- Added support for _Onboard_ `snapping_include_static_closures` route request parameter (`RouteOptions#snappingIncludeStaticClosures`). [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed a race condition that could cause a hang during `TileStore` clean up. [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed a crash when the `TileStore` service process is killed by the Android system. [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed an issue where some callbacks for completed operations would be invoked again if the `TileStore` service process was terminated. [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed calculation of `AlternativeRouteMetadata` (duration and distance). [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Updated `NavigationView` to render upcoming maneuvers. [#6175](https://github.com/mapbox/mapbox-navigation-android/pull/6175) -- Made the SDK use `snapping_include_static_closures=true` for an origin of each re-route request. Similar to `snapping_include_closures=true`, but it includes statically closed roads, that is long-term. [#6164](https://github.com/mapbox/mapbox-navigation-android/pull/6164) -- Added `RouteLegProgress#geometryIndex` and `RouteProgress#currentRouteGeometryIndex`. [#6115](https://github.com/mapbox/mapbox-navigation-android/pull/6115) -- Improved default router to refresh a route partially instead of failing for routes over 1000 km long. [#6115](https://github.com/mapbox/mapbox-navigation-android/pull/6115) -- :warning: Disabled route refresh for routes that are set to `MapboxNavigation` while trip session is not running. A session has to be started (`MapboxNavigation#startTripSession`) for refresh feature to start as well. [#6115](https://github.com/mapbox/mapbox-navigation-android/pull/6115) -- :warning: Changed the behaviour of `RoutesObserver` to align it with other observables exposed by `MapboxNavigation`: now the `onRoutesChanged` will be invoked on registration if the routes were explicitly cleared before. [#6097](https://github.com/mapbox/mapbox-navigation-android/pull/6097) -- Fixed an issue where `NavigationView` switches from Active Guidance to Free Drive state after rotating device when replay is enabled. [#6140](https://github.com/mapbox/mapbox-navigation-android/pull/6140) -- Commit to a stable API for `MapboxNavigationApp` and `MapboxNavigationObserver`. This deprecates the `MapboxNavigationProvider`. [#6143](https://github.com/mapbox/mapbox-navigation-android/pull/6143) -- Fixed a crash when the service process is killed by the Android system. [#6125](https://github.com/mapbox/mapbox-navigation-android/pull/6125) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.1` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - -## Mapbox Navigation SDK 2.9.0-alpha.3 - 23 September, 2022 -### Changelog -[Changes between v2.9.0-alpha.2 and v2.9.0-alpha.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-alpha.2...v2.9.0-alpha.3) - -#### Known issues - -:bangbang: `MapboxAudioGuidance` crashes when attached to new instances of `MapboxNavigation`. This will crash `ui-androidauto` and `ui-dropin`. There is no known work around and it will be fixed in 2.9.0-alpha.4. [#6392](https://github.com/mapbox/mapbox-navigation-android/pull/6392) - -#### Features -- Moved `MapboxAudioGuidance` and `MapboxAudioGuidanceState` into public api. [#6336](https://github.com/mapbox/mapbox-navigation-android/pull/6336) -- Introduced `ViewOptionsCustomization.showCameraDebugInfo` to allow end users to enable camera debug info. [#6356](https://github.com/mapbox/mapbox-navigation-android/pull/6356) -- Added `ComponentInstaller` for the `LocationComponent` that offers simplified integration of map LocationPuck. [#6206](https://github.com/mapbox/mapbox-navigation-android/pull/6206) -- Added `ViewStyleCustomization.locationPuck` that allows to define a custom location puck using `NavigationView`. [#6365](https://github.com/mapbox/mapbox-navigation-android/pull/6365) -- Added _Experimental_ `RouteRefreshStatesObserver` that can be used to observe route refresh states. To subscribe and unsubscribe on updates corresponding use `MapboxNavigation#registerRouteRefreshStateObserver` and `MapboxNavigation#unregisterRouteRefreshStateObserver`. [#6345](https://github.com/mapbox/mapbox-navigation-android/pull/6345) -- Introduced `NavigationViewListener.onInfoPanelSlide` callback that allows observation of `NavigationView`'s Info Panel slide offset. [#6361](https://github.com/mapbox/mapbox-navigation-android/pull/6361) -#### Bug fixes and improvements -- Marked `PredictiveCacheController`, `MapboxBuildingView`, `ViewportDataSourceUpdateObserver`, `NavigationScaleGestureHandler`, `NavigationCameraStateChangedObserver`, `NavigationCameraStateTransition`, `NavigationCameraTransition`, `TransitionEndListener`, `MapboxRecenterButton`, `MapboxRouteOverviewButton`, `MapboxJunctionView`, `MapboxSignboardView`, `MapboxRoadNameLabelView`, `MapboxRoadNameView`, `MapboxRouteArrowView`, `MapboxRouteLineView`, `MapboxCameraModeButton` methods and `View.capture` extension with `@UiThread` annotation. [#6235](https://github.com/mapbox/mapbox-navigation-android/pull/6235) -- Marked `Binder`, `MapboxExtendableButton` methods and `MapboxNavigation#installComponents` methods with `@UiThread` annotation. [#6268](https://github.com/mapbox/mapbox-navigation-android/pull/6268) -- Fixed an issue with `NavigationView` that caused `ViewOptionsCustomization.routeArrowOptions` to be ignored, if arrows have already been drawn on the map. [#6333](https://github.com/mapbox/mapbox-navigation-android/pull/6333) -- Replaced `ViewStyleCustomization.defaultMarkerAnnotationOptions` with `ViewStyleCustomization.defaultDestinationMarkerAnnotationOptions`. [#6365](https://github.com/mapbox/mapbox-navigation-android/pull/6365) -- Fixed the issue with incorrect geometry indices for `RouteLeg#incidents` and `RouteLeg#closures` after refresh. [#6364](https://github.com/mapbox/mapbox-navigation-android/pull/6364) -- Introduced `NavigationViewListener#onMapClicked` to inform when a map was clicked, but the event was not processed by `NavigationView`. [#6360](https://github.com/mapbox/mapbox-navigation-android/pull/6360) -- Fixed crash caused by `ConstantVelocityInterpolator` creating `PathInterpolator` with an invalid path. [#6367](https://github.com/mapbox/mapbox-navigation-android/pull/6367) -- Improved alternatives id robustness by adding new alternatives to existing instead of replacing them during `MapboxNavigation#requestAlternativeRoutes`. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Improved stop detector for auto profile. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Fixed `RoadNameLabel` position issues by making sure that it updates when expanding and collapsing the info panel. [#6361](https://github.com/mapbox/mapbox-navigation-android/pull/6361) -- Fixed `InfoPanel` overlapping the `RoadNameLabel` in free drive state with the device being in landscape orientation. [#6361](https://github.com/mapbox/mapbox-navigation-android/pull/6361) -- Introduced `ViewStyleCustomization#mapScalebarParams` that allows for configuring map scalebar. [#6355](https://github.com/mapbox/mapbox-navigation-android/pull/6355) -- Fixed an issue where `NavigationRoute#upcomingRoadObjects` was not refreshed. This issue did not impact the deprecated `RoadObjectsOnRouteObserver`. [#6378](https://github.com/mapbox/mapbox-navigation-android/pull/6378) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.1` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0-rc.3 - 23 September, 2022 -### Changelog -[Changes between v2.8.0-rc.2 and v2.8.0-rc.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-rc.2...v2.8.0-rc.3) - -#### Features -- Added _Experimental_ `RouteRefreshStatesObserver` that can be used to observe route refresh states. To subscribe and unsubscribe on updates corresponding use `MapboxNavigation#registerRouteRefreshStateObserver` and `MapboxNavigation#unregisterRouteRefreshStateObserver`. [#6345](https://github.com/mapbox/mapbox-navigation-android/pull/6345) - -#### Bug fixes and improvements -- Fixed super late hwy exit detection after leaving a tunnel (auto profile only). [#6346](https://github.com/mapbox/mapbox-navigation-android/pull/6346) -- Fixed the issue with incorrect geometry indices for `RouteLeg#incidents` and `RouteLeg#closures` after refresh. [#6364](https://github.com/mapbox/mapbox-navigation-android/pull/6364) -- Improved alternatives id robustness by adding new alternatives to existing instead of replacing them during `MapboxNavigation#requestAlternativeRoutes`. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Improved stop detector for auto profile. [#6373](https://github.com/mapbox/mapbox-navigation-android/pull/6373) -- Fixed an issue where `NavigationRoute#upcomingRoadObjects` was not refreshed. This issue did not impact the deprecated `RoadObjectsOnRouteObserver`. [#6378](https://github.com/mapbox/mapbox-navigation-android/pull/6378) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.1` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - -## Mapbox Navigation SDK 2.9.0-alpha.2 - 16 September, 2022 -### Changelog -[Changes between v2.9.0-alpha.1 and v2.9.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.9.0-alpha.1...v2.9.0-alpha.2) - -#### Features -#### Bug fixes and improvements -- Fixed super late hwy exit detection after leaving a tunnel (auto profile only). [#6346](https://github.com/mapbox/mapbox-navigation-android/pull/6346) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.0` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0-rc.2 - 16 September, 2022 -### Changelog -[Changes between v2.8.0-rc.1 and v2.8.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-rc.1...v2.8.0-rc.2) - -#### Features -#### Bug fixes and improvements - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0)) -- Mapbox Navigation Native `v115.0.0` -- Mapbox Core Common `v23.0.0` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.9.0-alpha.1 - 15 September, 2022 -### Changelog -[Changes between v2.8.0 and v2.9.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0...v2.9.0-alpha.1) - -#### Features -#### Bug fixes and improvements - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0-rc.1)) -- Mapbox Navigation Native `v114.0.0` -- Mapbox Core Common `v23.0.0-rc.2` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0-rc.1 - 15 September, 2022 -### Changelog -[Changes between v2.8.0-beta.3 and v2.8.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-beta.3...v2.8.0-rc.1) - -#### Features -- Added `ViewBinderCustomization.infoPanelHeaderFreeDriveBinder`, `ViewBinderCustomization.infoPanelHeaderDestinationPreviewBinder`, `ViewBinderCustomization.infoPanelHeaderRoutesPreviewBinder`, `ViewBinderCustomization.infoPanelHeaderActiveGuidanceBinder` and `ViewBinderCustomization.infoPanelHeaderArrivalBinder` that allows injection of a custom header content for each Navigation State in `NavigationView`. [#6273](https://github.com/mapbox/mapbox-navigation-android/pull/6273) -- Introduced `MapboxExtendableButtonParams` to allow end users to customize the default Drop-In UI buttons. [#6327](https://github.com/mapbox/mapbox-navigation-android/pull/6327) -- Added `ViewBinderCustomization.infoPanelEndNavigationButtonBinder` that allows injection of a custom Info Panel End Navigation Button in `NavigationView`. [#6331](https://github.com/mapbox/mapbox-navigation-android/pull/6331) -#### Bug fixes and improvements -- Optimized calls to modify route arrow layer visibility. [#6308](https://github.com/mapbox/mapbox-navigation-android/pull/6308) -- Provide better java support for `MapboxNavigationApp`. [#6292](https://github.com/mapbox/mapbox-navigation-android/pull/6292) -- Expose `PointAnnotationOptions` in Drop-In UI to allow users to define the destination marker icon and it's positioning. [#6314](https://github.com/mapbox/mapbox-navigation-android/pull/6314) -- Marked `MapboxNavigationApp` methods with `@Throws` annotation. [#6324](https://github.com/mapbox/mapbox-navigation-android/pull/6324) -- Exposed `AlternativeRouteMetadata#alternativeId` which lets user distinguish a new alternative from updated alternatives. [#6329](https://github.com/mapbox/mapbox-navigation-android/pull/6329) -- Fixed an issue with `NavigationView` that caused maneuver view to be cut off. [#6328](https://github.com/mapbox/mapbox-navigation-android/pull/6328) -- Introduced `MapboxUpcomingManeuverViewAdapter#updateManeuverViewOptions()`, `MapboxUpcomingManeuverViewAdapter#updateUpcomingManeuverIconStyle()` and `upcomingManeuverListIconStyle` attribute to allow for customizing the colors of maneuver turn icons in upcoming maneuver view list. [#6330](https://github.com/mapbox/mapbox-navigation-android/pull/6330) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0-rc.1)) -- Mapbox Navigation Native `v114.0.0` -- Mapbox Core Common `v23.0.0-rc.2` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0-beta.3 - 09 September, 2022 -### Changelog -[Changes between v2.8.0-beta.2 and v2.8.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-beta.2...v2.8.0-beta.3) - -#### Features -- Improved the route refresh feature to also refresh _closures_ (`RouteLeg#closures`). [#6274](https://github.com/mapbox/mapbox-navigation-android/pull/6274) -- Added `requireMapboxNavigation` to offer a simple way to use `MapboxNavigationApp`. [#6233](https://github.com/mapbox/mapbox-navigation-android/pull/6233) -- Implemented continuous alternatives in Drop-In UI. [#6213](https://github.com/mapbox/mapbox-navigation-android/pull/6213) -- Introduced `MapboxRestAreaApi#generateRestAreaGuideMap` to be used to fetch service/parking area guide maps using `BannerInstruction`. [#6239](https://github.com/mapbox/mapbox-navigation-android/pull/6239) -- Introduced `MapboxRestAreaApi#generateUpcomingRestAreaGuideMap` to be used to fetch service/parking area guide maps using `RestStop`. [#6239](https://github.com/mapbox/mapbox-navigation-android/pull/6239) -- Introduced `MapboxManeuverView#maneuverViewState` to allow users to observe changes to `MapboxManeuverViewState` when the view expands and collapses. [#6286](https://github.com/mapbox/mapbox-navigation-android/pull/6286) -- Introduced `NavigationViewApi#onManeuverCollapsed` and `NavigationViewApi#onManeuverExpanded` callback which is triggered upon changes to `MapboxManeuverViewState`. [#6286](https://github.com/mapbox/mapbox-navigation-android/pull/6286) -- Implemented logic that would display `BannerComponents` of `type` `GuidanceView` and `subType` `BannerComponents#SAPA`, `BannerComponents#CITYREAL`, `BannerComponents#AFTERTOLL`, `BannerComponents#SIGNBOARD`, `BannerComponents#TOLLBRANCH`, `BannerComponents#EXPRESSWAY_ENTRANCE`, `BannerComponents#EXPRESSWAY_EXIT` using `JunctionViewApi`. [#6285](https://github.com/mapbox/mapbox-navigation-android/pull/6285) -- Calling `MapboxNavigationApp.setup` will create a new `MapboxNavigation` instance with new `NavigationOptions` even if the app has been setup. [#6288](https://github.com/mapbox/mapbox-navigation-android/pull/6288) -- Added `MapboxDumpRegistry` which allows you to define adb commands for the sdk. [#6234](https://github.com/mapbox/mapbox-navigation-android/pull/6234) -#### Bug fixes and improvements -- Fixed an issue with `NavigationView` that caused overview camera to have wrong pitch. [#6278](https://github.com/mapbox/mapbox-navigation-android/pull/6278) -- Fixed an issue with `NavigationView` that caused camera issues after reroute or switching to an alternative route. [#6283](https://github.com/mapbox/mapbox-navigation-android/pull/6283) -- Fixed an issue with `NavigationView` that caused camera to unexpectedly change state in some situations. [#6291](https://github.com/mapbox/mapbox-navigation-android/pull/6291) -- Fixed an issue where step distance in `MapboxManeuverView` could have been cut off. [#6296](https://github.com/mapbox/mapbox-navigation-android/pull/6296) -- Fixed an issue where trip progress in `MapboxTripProgressView` could have been cut off if large font size is used. [#6296](https://github.com/mapbox/mapbox-navigation-android/pull/6296) -- Added Experimental API `NavigationRoute#hasUnexpectedClosures` to check if a route has unexpected closures that might require a re-route. [#6295](https://github.com/mapbox/mapbox-navigation-android/pull/6295) -- Improved route refresh. Now Navigation SDK recalculates `DirectionsRoute#duration`, `RouteLeg#duration`, `LegStep#duration` after route refresh based on `LegAnnotation#duration`. [#6287](https://github.com/mapbox/mapbox-navigation-android/pull/6287) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0-rc.1)) -- Mapbox Navigation Native `v114.0.0` -- Mapbox Core Common `v23.0.0-rc.2` -- Mapbox Java `v6.8.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.4)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - -## Mapbox Navigation SDK 2.8.0-beta.2 - 01 September, 2022 -### Changelog -[Changes between v2.8.0-beta.1 and v2.8.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-beta.1...v2.8.0-beta.2) - -#### Features -- Added `NavigationViewListener.onBackPressed()`. This method allows client code to intercept any `NavigationView` BACK press events. [#6244](https://github.com/mapbox/mapbox-navigation-android/pull/6244) - -#### Bug fixes and improvements -- Fixed an issue where portions of alternative routes that overlap with the primary route weren't hidden correctly, suffering from precision problems. [#6228](https://github.com/mapbox/mapbox-navigation-android/pull/6228) -- Fixed incorrect values in `AlternativeRouteInfo#duration` and `RouteProgress#durationRemaining`: now they rely on `route.leg.annotations.duration` if available, otherwise, `LegStep#duration` is used for calculations. [#6237](https://github.com/mapbox/mapbox-navigation-android/pull/6237) -- Added `guideMapUri` to the `RestStop`. [#6237](https://github.com/mapbox/mapbox-navigation-android/pull/6237) -- [TileStore Android Service] Fixed a crash when the service process is killed by the Android system. [#6237](https://github.com/mapbox/mapbox-navigation-android/pull/6237) -- Fixed `MapboxNavigationApp#detach` will not fully detach. This causes `MapboxNavigation` to continue to be accessible, and causes `MapboxNavigationObserver.onDetached` to be called multiple times. [#6245](https://github.com/mapbox/mapbox-navigation-android/pull/6245) -- Introduced `NavigationViewListener#onInfoPanelDragging` to inform user when `InfoPanel` is dragging. [#6249](https://github.com/mapbox/mapbox-navigation-android/pull/6249) -- Introduced `NavigationViewListener#onInfoPanelSettling` to inform user when `InfoPanel` is settling. [#6249](https://github.com/mapbox/mapbox-navigation-android/pull/6249) -- Added Android 13 support. [#6196](https://github.com/mapbox/mapbox-navigation-android/pull/6196) -- Declared [POST_NOTIFICATIONS](https://developer.android.com/reference/android/Manifest.permission#POST_NOTIFICATIONS) permission in SDK's AndroidManifest.xml. It is highly recommended for apps to request the permission in runtime. Without it, the SDK will not be able to show the notification with trip progress in the notification drawer for apps that target Android 13 or higher. [#6196](https://github.com/mapbox/mapbox-navigation-android/pull/6196) -- Marked `MapboxNavigationApp` and `MapboxMavigationObserver` methods with `@UiThread` annotations. [#6254](https://github.com/mapbox/mapbox-navigation-android/pull/6254) -- Fixed an issue where `RouteProgress#navigationRoute` could have been delivered with an incorrect route reference, if setting routes failed as reported by `RoutesSetCallback`. [#6255](https://github.com/mapbox/mapbox-navigation-android/pull/6255) -- Expanded debug and warning logs around `RouteProgress` generation and route setting processes, including when incorrect progress is delivered to `MapboxRouteLineApi#updateWithRouteProgress`. [#6255](https://github.com/mapbox/mapbox-navigation-android/pull/6255) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0-rc.1)) -- Mapbox Navigation Native `v113.0.0` -- Mapbox Core Common `v23.0.0-rc.2` -- Mapbox Java `v6.8.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.3)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - -## Mapbox Navigation SDK 2.8.0-beta.1 - 25 August, 2022 -### Changelog -[Changes between v2.8.0-alpha.3 and v2.8.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-alpha.3...v2.8.0-beta.1) - -#### Features -- Added `ComponentInstaller` for the `NavigationCameraComponent` that offers simplified integration of the `NavigationCamera`. [#6202](https://github.com/mapbox/mapbox-navigation-android/pull/6202) -- Added `ComponentInstaller` for the `CameraModeButtonComponent` that offers simplified integration of the `NavigationCamera` mode button. [#6202](https://github.com/mapbox/mapbox-navigation-android/pull/6202) -- Added `NavigationViewOptions#distanceFormatterOptions` to allow for specifying `DistanceFormatterOptions` at runtime. [#6222](https://github.com/mapbox/mapbox-navigation-android/pull/6222) -#### Bug fixes and improvements -- Updated `NavigationViewApi`. Introduced `startFreeDrive`, `startDestinationPreview`, `startRoutePreview`, `startActiveGuidance`, `startArrival`. Removed `fetchRoutes`, `setPreviewRoutes`, `setRoutes`, `setDestination`. Replaced `enableTripSession` and `enableReplaySession` with `routeReplayEnabled(enabled: Boolean)`. [#6174](https://github.com/mapbox/mapbox-navigation-android/pull/6174) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v10.8.0-beta.1)) -- Mapbox Navigation Native `v112.0.0` -- Mapbox Core Common `v23.0.0-beta.1` -- Mapbox Java `v6.8.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.2)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - -## Mapbox Navigation SDK 2.8.0-alpha.3 - 17 August, 2022 -### Changelog -[Changes between v2.8.0-alpha.2 and v2.8.0-alpha.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-alpha.2...v2.8.0-alpha.3) - -#### Features -- Added the `isUrban` flag to `EHorizonEdgeMetadata` which define if an edge is in urban area. [#6178](https://github.com/mapbox/mapbox-navigation-android/pull/6178) -- Added the `isUrban` flag to `RoadObject` which define if an object is in urban area. Might be `null` if it's not possible to define. [#6178](https://github.com/mapbox/mapbox-navigation-android/pull/6178) -- Added `ComponentInstaller` for the `RecenterButtonComponent` that offers simplified integration of map recenter button. [#6158](https://github.com/mapbox/mapbox-navigation-android/pull/6158) - -#### Bug fixes and improvements -- Updated `NavigationView` to allow drawing of the info panel behind the translucent navigation bar. [#6145](https://github.com/mapbox/mapbox-navigation-android/pull/6145) -- Optimized vanishing line updates (`MapboxRouteLineApi#updateTraveledRouteLine`) when going through restrictions and legs aren't styled independently. [#6169](https://github.com/mapbox/mapbox-navigation-android/pull/6169) -- Optimized cache management when switching between primary and alternative routes to improve the execution time of `MapboxRouteLineApi#setNavigationRoutes`. [#6171](https://github.com/mapbox/mapbox-navigation-android/pull/6171) -- Added support for _Onboard_ `snapping_include_static_closures` route request parameter (`RouteOptions#snappingIncludeStaticClosures`). [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed a race condition that could cause a hang during `TileStore` clean up. [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed a crash when the `TileStore` service process is killed by the Android system. [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed an issue where some callbacks for completed operations would be invoked again if the `TileStore` service process was terminated. [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Fixed calculation of `AlternativeRouteMetadata` (duration and distance). [#6168](https://github.com/mapbox/mapbox-navigation-android/pull/6168) -- Updated `NavigationView` to render upcoming maneuvers. [#6175](https://github.com/mapbox/mapbox-navigation-android/pull/6175) -- Made the SDK use `snapping_include_static_closures=true` for an origin of each re-route request. Similar to `snapping_include_closures=true`, but it includes statically closed roads, that is long-term. [#6164](https://github.com/mapbox/mapbox-navigation-android/pull/6164) -- Added `RouteLegProgress#geometryIndex` and `RouteProgress#currentRouteGeometryIndex`. [#6115](https://github.com/mapbox/mapbox-navigation-android/pull/6115) -- Improved default router to refresh a route partially instead of failing for routes over 1000 km long. [#6115](https://github.com/mapbox/mapbox-navigation-android/pull/6115) -- :warning: Disabled route refresh for routes that are set to `MapboxNavigation` while trip session is not running. A session has to be started (`MapboxNavigation#startTripSession`) for refresh feature to start as well. [#6115](https://github.com/mapbox/mapbox-navigation-android/pull/6115) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.8.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.8.0-beta.1)) -- Mapbox Navigation Native `v112.0.0` -- Mapbox Core Common `v23.0.0-beta.1` -- Mapbox Java `v6.8.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.2)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0 - 17 August, 2022 -### Changelog -[Changes between v2.6.0 and v2.7.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0...v2.7.0) - -#### Features -- Introduced `ViewOptionsCustomization.isInfoPanelHideable` that allows control over whether the `NavigationView` Info Panel can hide when it is swiped down. [#6132](https://github.com/mapbox/mapbox-navigation-android/pull/6132) -- Introduced `ViewOptionsCustomization.infoPanelForcedState` that allows overriding of the `NavigationView` Info Panel (BottomSheetBehaviour) state. [#6132](https://github.com/mapbox/mapbox-navigation-android/pull/6132) -- Added `FollowingFrameOptions.focalPoint` that can be used to define the position of the first framed geometry point (typically the user location indicator, if available) in the `MapboxNavigationViewportDataSource.followingPadding`. [#5875](https://github.com/mapbox/mapbox-navigation-android/pull/5875) -- Added `ViewBinderCustomization.infoPanelBinder` that allows installation of a custom info panel layout in `NavigationView`. [#6049](https://github.com/mapbox/mapbox-navigation-android/pull/6049) -- Added `ViewStyleCustomization.infoPanelPeekHeight` that allows customization of `NavigationView` info panel bottom sheet peek height. [#6049](https://github.com/mapbox/mapbox-navigation-android/pull/6049) -- Added `ViewStyleCustomization.infoPanelMarginStart`, `ViewStyleCustomization.infoPanelMarginEnd`, `ViewStyleCustomization.infoPanelBackground` that allows customization of a `NavigatioView` default info panel margins and background. [#6049](https://github.com/mapbox/mapbox-navigation-android/pull/6049) -- Introduced new API(s) `MapboxTripProgressApi#getTripDetails()`, `MapboxTripProgressView#renderTripOverview()` and `MapboxTripProgressView#renderLegOverview()` to allow users to visualize trip related details for the entire route or a given leg of a route, before starting active navigation. [#6068](https://github.com/mapbox/mapbox-navigation-android/pull/6068) -- Added `MapboxNavigation.requestRoadGraphDataUpdate` method and `RoadGraphDataUpdateCallback` class to request road graph data update and recreate `MapboxNavigation` instance in the callback to be able to use latest data even if the application lifecycle is very long. [#6044](https://github.com/mapbox/mapbox-navigation-android/pull/6044) -- :warning: Deprecated `RoadObjectsOnRouteObserver` in favor of a new getter `NavigationRoute.upcomingRoadObjects` to get access to list of `UpcomingRoadObject`. [#6032](https://github.com/mapbox/mapbox-navigation-android/pull/6032) -- Added `amenities` to `RestStop`. [#6007](https://github.com/mapbox/mapbox-navigation-android/pull/6007) -- Introduced `NavigationViewOptions.showInfoPanelInFreeDrive` option that allows showing of the BottomSheet Info Panel when `NavigationView` is in the Free Drive state. [#6011](https://github.com/mapbox/mapbox-navigation-android/pull/6011) -- Added `VoiceInstructionsPlayerOptions.abandonFocusDelay` option that allows specifying a delay in milliseconds until the player abandons audio focus after playing all queued voice instructions. [#5969](https://github.com/mapbox/mapbox-navigation-android/pull/5969) -- Added refresh of alternatives routes. [#5923](https://github.com/mapbox/mapbox-navigation-android/pull/5923) -- Moved `MapboxCameraModeButton` to `libnavui-maps` module. Moved `MapboxExtendableButton` to `libnavui-base` module. Added new styles for `MapboxAudioGuidanceButton`, `MapboxCameraModeButton` and `MapboxExtendableButton` views. Those styles can be used to change the default button shape to "Oval," "Square" or "Circle" [#5962](https://github.com/mapbox/mapbox-navigation-android/pull/5962) -- Added `IncidentInfo#affectedRoadNames`. [#6008](https://github.com/mapbox/mapbox-navigation-android/pull/6008) - -#### Bug fixes and improvements -- Updated `NavigationView` to render upcoming maneuvers. [#6175](https://github.com/mapbox/mapbox-navigation-android/pull/6175) -- Updated `NavigationView` to allow drawing of the info panel behind the translucent navigation bar. [#6145](https://github.com/mapbox/mapbox-navigation-android/pull/6145) -- Fixed an issue where `NavigationView` switches from Active Guidance to Free Drive state after rotating device when replay is enabled. [#6140](https://github.com/mapbox/mapbox-navigation-android/pull/6140) -- Fixed reroute for profiles other than driving/traffic. [#6146](https://github.com/mapbox/mapbox-navigation-android/pull/6146) -- Introduced `NavigationViewListener#onInfoPanelHidden` to inform user when `InfoPanel` hides. [#6113](https://github.com/mapbox/mapbox-navigation-android/pull/6113) -- Introduced `NavigationViewListener#onInfoPanelExpanded` to inform user when `InfoPanel` expands. [#6113](https://github.com/mapbox/mapbox-navigation-android/pull/6113) -- Introduced `NavigationViewListener#onInfoPanelCollapsed` to inform user when `InfoPanel` collapses. [#6113](https://github.com/mapbox/mapbox-navigation-android/pull/6113) -- Introduced `NavigationViewOptions.enableMapLongClickIntercept` that would allow users to disable `NavigationView` from handling `OnMapLongClick` events. [#6116](https://github.com/mapbox/mapbox-navigation-android/pull/6116) -- Introduced `MapViewObserver#onAttached` and `MapViewObserver#onDetached` to get access to `MapView` instance used by `NavigationView`. [#6116](https://github.com/mapbox/mapbox-navigation-android/pull/6116) -- Removed `NavigationViewListener.onMapStyleChanged`. [#6116](https://github.com/mapbox/mapbox-navigation-android/pull/6116) -- Added `ComponentInstaller` to `Maneuver` and `SpeedLimit` that offer simplified integration of maneuvers and speed limits APIs. [#6117](https://github.com/mapbox/mapbox-navigation-android/pull/6117) -- Fixed bearing calculation error during tunnel dead reckoning. [#6118](https://github.com/mapbox/mapbox-navigation-android/pull/6118) -- Updated `MapboxRouteLineApiExtensions` so that when coroutine scope calling the suspend functions is canceled, `MapboxRouteLineApi::cancel` is called. [#6094](https://github.com/mapbox/mapbox-navigation-android/pull/6094) -- :warning: Fixed an issue where `RoutesObserver` would be called with the previous routes set upon registration while a new routes set was already being processed. Now, the observer waits for the processing of `MapboxNavigation#setNavigationRoutes` to finish before delivering the result. [#6079](https://github.com/mapbox/mapbox-navigation-android/pull/6079) -- Remove the `MapView` from the `RouteArrowComponent` so that it can be used by Android Auto. [#6053](https://github.com/mapbox/mapbox-navigation-android/pull/6053) -- Enabled tunnel dead reckoning drift compensation by default for Auto profile. [#6061](https://github.com/mapbox/mapbox-navigation-android/pull/6061) -- Increased route line stickiness for Auto profile. [#6061](https://github.com/mapbox/mapbox-navigation-android/pull/6061) -- Improved off-road detection for Auto profile by relying more on the heading change relative to the road. [#6061](https://github.com/mapbox/mapbox-navigation-android/pull/6061) -- Added `PredictiveCacheController` constructor with `PredictiveCacheOptions`, `PredictiveCacheController(PredictiveCacheOptions)`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Deprecated constructors `PredictiveCacheController(PredictiveCacheLocationOptions, PredictiveCacheControllerErrorHandler)` and `PredictiveCacheController(PredictiveCacheLocationOptions, PredictiveCacheLocationOptions, PredictiveCacheControllerErrorHandler)`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Added `PredictiveCacheController#predictiveCacheControllerErrorHandler` to set and get `PredictiveCacheControllerErrorHandler`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Added `PredictiveCacheMapsOptions`(map specific, that also allow to specify zoom levels for which the map tiles should be cached) and `PredictiveCacheNavigationOptions`(navigation specific) available through the `PredictiveCacheOptions`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Reduced log entries related to getting map layers. [#6101](https://github.com/mapbox/mapbox-navigation-android/pull/6101) -- Changed `RouteOptionsUpdater` to use `snapping_include_closures=true` for origin of each re-route request. This resolves a situation when Nav SDK returned a route in an opposite direction or on a parallel road when a driver caused a re-route by entering a closed section of a road. [#6050](https://github.com/mapbox/mapbox-navigation-android/pull/6050) -- :warning: Added checks to `DirectionsRoute#toNavigationRoute` and `NavigationRoute#toDirectionsRoute` mappers which restrict mapping `NavigationRoute` to `DirectionsRoute` and vice versa for some Directions API features and properties (currently including only preview EV routing features), because the `DirectionsRoute` cannot carry information necessary to support turn-by-turn navigation when these features are enabled. If you are using EV routing preview feature, make sure to only interact with `MapboxNavigation#requestRoutes(RouteOptions, NavigationRouterCallback)`, `MapboxNavigation#setNavigationRoutes(List)`, and equivalent `NavigationRoute` APIs. [#6004](https://github.com/mapbox/mapbox-navigation-android/pull/6004) -- Adjusted the `RoutesSetCallback` API. [#6040](https://github.com/mapbox/mapbox-navigation-android/pull/6040) -- Updated `NavigationView` to reset `SharedApp` state when `MapboxNavigation`is destroyed. [#6039](https://github.com/mapbox/mapbox-navigation-android/pull/6039) -- Updated `NavigationView` to enable vanishing route line by default. Previous behaviour can be restored by setting `MapboxRouteLineOptions` with `vanishingRouteLineEnabled` flag set to `false` [#6055](https://github.com/mapbox/mapbox-navigation-android/pull/6055) - ```kotlin - navigationView.customizeViewOptions { - routeLineOptions = ViewOptionsCustomization.defaultRouteLineOptions(context) - .toBuilder(context) - .withVanishingRouteLineEnabled(false) - .build() - } - ``` -- Made `rerouteController` argument in `MapboxNavigation#setRerouteController` nullable. Null can be passed to disable automatic rerouting. [#5977](https://github.com/mapbox/mapbox-navigation-android/pull/5977) -- Introduced `RoutesSetCallback` parameter to `MapboxNavigation#setNavigationRoutes`, which is called after the routes passed to `MapboxNavigation#setNavigationRoutes` are processed or are failed to be processed. [#5946](https://github.com/mapbox/mapbox-navigation-android/pull/5946) -- Changed the behaviour of `RoutesObserver`: `onRoutesChanged` method will not be triggered if the navigator fails to process routes passed via `MapboxNavigation#setNavigationRoutes`. [#5946](https://github.com/mapbox/mapbox-navigation-android/pull/5946) -- Fixed Attribution Icon position in `NavigationView`. [#6012](https://github.com/mapbox/mapbox-navigation-android/pull/6012) -- Fixed Toggle Camera Mode Button behavior in `NavigationView`. [#6014](https://github.com/mapbox/mapbox-navigation-android/pull/6014) -- Increased `AudioFocusDelegateProvider` visibility to public to allow instantiation of the default `AsyncAudioFocusDelegate`. [#5969](https://github.com/mapbox/mapbox-navigation-android/pull/5969) -- Fixed serialization of models with unrecognized properties. [#6021](https://github.com/mapbox/mapbox-navigation-android/pull/6021) -- Fixed the intermittent native crash caused during _Free Drive_ transition from _Active Guidance with alternatives. [#6034](https://github.com/mapbox/mapbox-navigation-android/pull/6034) -- :warning: Changed the default log level from `Debug` to `Info`. To change the level for logs produced by Mapbox SDKs use `LogConfiguration.setLoggingLevel(LoggingLevel)`. [#5987](https://github.com/mapbox/mapbox-navigation-android/pull/5987) -- Fixed reroute request interruption when setting the `NavigationRerouteController` [#5950](https://github.com/mapbox/mapbox-navigation-android/pull/5950). -- Fixed setting trim offsets to route line trail layers. [#5982](https://github.com/mapbox/mapbox-navigation-android/pull/5982) -- Fixed a Drop-In UI issue where legacy shields were displayed instead of Mapbox designed ones with some of the map styles. [#5984](https://github.com/mapbox/mapbox-navigation-android/pull/5984) -- Updated `NavigationView` to support edge-to-edge display. [#5976](https://github.com/mapbox/mapbox-navigation-android/pull/5976) -- Updated `MapboxSpeechApi` to use persistent cache to decrease the bandwidth consumption. [#5790](https://github.com/mapbox/mapbox-navigation-android/pull/5790) -- Updated `DefaultResourceLoader` offline behaviour to return resources from the disk cache when available. [#5970](https://github.com/mapbox/mapbox-navigation-android/pull/5970) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0)) -- Mapbox Navigation Native `v111.0.0` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0-alpha.2 - 12 August, 2022 -### Changelog -[Changes between v2.8.0-alpha.1 and v2.8.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.8.0-alpha.1...v2.8.0-alpha.2) - -#### Features -- Introduced `ViewOptionsCustomization.isInfoPanelHideable` that allows control over whether the `NavigationView` Info Panel can hide when it is swiped down. [#6132](https://github.com/mapbox/mapbox-navigation-android/pull/6132) -- Introduced `ViewOptionsCustomization.infoPanelForcedState` that allows overriding of the `NavigationView` Info Panel (BottomSheetBehaviour) state. [#6132](https://github.com/mapbox/mapbox-navigation-android/pull/6132) - -#### Bug fixes and improvements -- :warning: Changed the behaviour of `RoutesObserver` to align it with other observables exposed by `MapboxNavigation`: now the `onRoutesChanged` will be invoked on registration if the routes were explicitly cleared before. [#6097](https://github.com/mapbox/mapbox-navigation-android/pull/6097) -- Fixed an issue where `NavigationView` switches from Active Guidance to Free Drive state after rotating device when replay is enabled. [#6140](https://github.com/mapbox/mapbox-navigation-android/pull/6140) -- Commit to a stable API for `MapboxNavigationApp` and `MapboxNavigationObserver`. This deprecates the `MapboxNavigationProvider`. [#6143](https://github.com/mapbox/mapbox-navigation-android/pull/6143) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0)) -- Mapbox Navigation Native `v111.0.0` -- Mapbox Core Common `v22.1.1` -- Mapbox Java `v6.8.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.8.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0-rc.2 - 11 August, 2022 -### Changelog -[Changes between v2.7.0-rc.1 and v2.7.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-rc.1...v2.7.0-rc.2) - -#### Features -#### Bug fixes and improvements -- Fixed reroute for profiles other than driving/traffic. [#6146](https://github.com/mapbox/mapbox-navigation-android/pull/6146) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0)) -- Mapbox Navigation Native `v111.0.0` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.8.0-alpha.1 - 04 August, 2022 -### Changelog -[Changes between v2.7.0-rc.1 and v2.8.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-rc.1...v2.8.0-alpha.1) - -#### Features -#### Bug fixes and improvements -- Fixed a crash when the service process is killed by the Android system. [#6125](https://github.com/mapbox/mapbox-navigation-android/pull/6125) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0)) -- Mapbox Navigation Native `v111.0.0` -- Mapbox Core Common `v22.1.1` -- Mapbox Java `v6.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0-rc.1 - 04 August, 2022 -### Changelog -[Changes between v2.7.0-beta.3 and v2.7.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-beta.3...v2.7.0-rc.1) - -#### Features -- Added `FollowingFrameOptions.focalPoint` that can be used to define the position of the first framed geometry point (typically the user location indicator, if available) in the `MapboxNavigationViewportDataSource.followingPadding`. [#5875](https://github.com/mapbox/mapbox-navigation-android/pull/5875) - -#### Bug fixes and improvements -- Introduced `NavigationViewListener#onInfoPanelHidden` to inform user when `InfoPanel` hides. [#6113](https://github.com/mapbox/mapbox-navigation-android/pull/6113) -- Introduced `NavigationViewListener#onInfoPanelExpanded` to inform user when `InfoPanel` expands. [#6113](https://github.com/mapbox/mapbox-navigation-android/pull/6113) -- Introduced `NavigationViewListener#onInfoPanelCollapsed` to inform user when `InfoPanel` collapses. [#6113](https://github.com/mapbox/mapbox-navigation-android/pull/6113) -- Introduced `NavigationViewOptions.enableMapLongClickIntercept` that would allow users to disable `NavigationView` from handling `OnMapLongClick` events. [#6116](https://github.com/mapbox/mapbox-navigation-android/pull/6116) -- Introduced `MapViewObserver#onAttached` and `MapViewObserver#onDetached` to get access to `MapView` instance used by `NavigationView`. [#6116](https://github.com/mapbox/mapbox-navigation-android/pull/6116) -- Removed `NavigationViewListener.onMapStyleChanged`. [#6116](https://github.com/mapbox/mapbox-navigation-android/pull/6116) -- Added `ComponentInstaller` to `Maneuver` and `SpeedLimit` that offer simplified integration of maneuvers and speed limits APIs. [#6117](https://github.com/mapbox/mapbox-navigation-android/pull/6117) -- Fixed bearing calculation error during tunnel dead reckoning. [#6118](https://github.com/mapbox/mapbox-navigation-android/pull/6118) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0)) -- Mapbox Navigation Native `v111.0.0` -- Mapbox Core Common `v22.1.0` -- Mapbox Java `v6.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0-beta.3 - 29 July, 2022 -### Changelog -[Changes between v2.7.0-beta.2 and v2.7.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-beta.2...v2.7.0-beta.3) - -#### Bug fixes and improvements -- Updated `MapboxRouteLineApiExtensions` so that when coroutine scope calling the suspend functions is canceled, `MapboxRouteLineApi::cancel` is called. [#6094](https://github.com/mapbox/mapbox-navigation-android/pull/6094) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0-rc.1)) -- Mapbox Navigation Native `v110.0.0` -- Mapbox Core Common `v22.1.0-rc.1` -- Mapbox Java `v6.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0-beta.2 - 22 July, 2022 -### Changelog -[Changes between v2.7.0-beta.1 and v2.7.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-beta.1...v2.7.0-beta.2) - -#### Features -- Added `ViewBinderCustomization.infoPanelBinder` that allows installation of a custom info panel layout in `NavigationView`. [#6049](https://github.com/mapbox/mapbox-navigation-android/pull/6049) -- Added `ViewStyleCustomization.infoPanelPeekHeight` that allows customization of `NavigationView` info panel bottom sheet peek height. [#6049](https://github.com/mapbox/mapbox-navigation-android/pull/6049) -- Added `ViewStyleCustomization.infoPanelMarginStart`, `ViewStyleCustomization.infoPanelMarginEnd`, `ViewStyleCustomization.infoPanelBackground` that allows customization of a `NavigatioView` default info panel margins and background. [#6049](https://github.com/mapbox/mapbox-navigation-android/pull/6049) -- Introduced new API(s) `MapboxTripProgressApi#getTripDetails()`, `MapboxTripProgressView#renderTripOverview()` and `MapboxTripProgressView#renderLegOverview()` to allow users to visualize trip related details for the entire route or a given leg of a route, before starting active navigation. [#6068](https://github.com/mapbox/mapbox-navigation-android/pull/6068) - -#### Bug fixes and improvements -- :warning: Fixed an issue where `RoutesObserver` would be called with the previous routes set upon registration while a new routes set was already being processed. Now, the observer waits for the processing of `MapboxNavigation#setNavigationRoutes` to finish before delivering the result. [#6079](https://github.com/mapbox/mapbox-navigation-android/pull/6079) -- Remove the `MapView` from the `RouteArrowComponent` so that it can be used by Android Auto. [#6053](https://github.com/mapbox/mapbox-navigation-android/pull/6053) -- Enabled tunnel dead reckoning drift compensation by default for Auto profile. [#6061](https://github.com/mapbox/mapbox-navigation-android/pull/6061) -- Increased route line stickiness for Auto profile. [#6061](https://github.com/mapbox/mapbox-navigation-android/pull/6061) -- Improved off-road detection for Auto profile by relying more on the heading change relative to the road. [#6061](https://github.com/mapbox/mapbox-navigation-android/pull/6061) -- Added `PredictiveCacheController` constructor with `PredictiveCacheOptions`, `PredictiveCacheController(PredictiveCacheOptions)`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Deprecated constructors `PredictiveCacheController(PredictiveCacheLocationOptions, PredictiveCacheControllerErrorHandler)` and `PredictiveCacheController(PredictiveCacheLocationOptions, PredictiveCacheLocationOptions, PredictiveCacheControllerErrorHandler)`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Added `PredictiveCacheController#predictiveCacheControllerErrorHandler` to set and get `PredictiveCacheControllerErrorHandler`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Added `PredictiveCacheMapsOptions`(map specific, that also allow to specify zoom levels for which the map tiles should be cached) and `PredictiveCacheNavigationOptions`(navigation specific) available through the `PredictiveCacheOptions`. [#6071](https://github.com/mapbox/mapbox-navigation-android/pull/6071) -- Reduced log entries related to getting map layers. [#6101](https://github.com/mapbox/mapbox-navigation-android/pull/6101) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0-rc.1)) -- Mapbox Navigation Native `v109.0.0` -- Mapbox Core Common `v22.1.0-rc.1` -- Mapbox Java `v6.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.7.0-beta.1)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0-beta.1 - 14 July, 2022 -### Changelog -[Changes between v2.7.0-alpha.3 and v2.7.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-alpha.3...v2.7.0-beta.1) - -#### Features -- Added `MapboxNavigation.requestRoadGraphDataUpdate` method and `RoadGraphDataUpdateCallback` class to request road graph data update and recreate `MapboxNavigation` instance in the callback to be able to use latest data even if the application lifecycle is very long. [#6044](https://github.com/mapbox/mapbox-navigation-android/pull/6044) - -#### Bug fixes and improvements -- Changed `RouteOptionsUpdater` to use `snapping_include_closures=true` for origin of each re-route request. This resolves a situation when Nav SDK returned a route in an opposite direction or on a parallel road when a driver caused a re-route by entering a closed section of a road. [#6050](https://github.com/mapbox/mapbox-navigation-android/pull/6050) -- :warning: Added checks to `DirectionsRoute#toNavigationRoute` and `NavigationRoute#toDirectionsRoute` mappers which restrict mapping `NavigationRoute` to `DirectionsRoute` and vice versa for some Directions API features and properties (currently including only preview EV routing features), because the `DirectionsRoute` cannot carry information necessary to support turn-by-turn navigation when these features are enabled. If you are using EV routing preview feature, make sure to only interact with `MapboxNavigation#requestRoutes(RouteOptions, NavigationRouterCallback)`, `MapboxNavigation#setNavigationRoutes(List)`, and equivalent `NavigationRoute` APIs. [#6004](https://github.com/mapbox/mapbox-navigation-android/pull/6004) -- Adjusted the `RoutesSetCallback` API. [#6040](https://github.com/mapbox/mapbox-navigation-android/pull/6040) -- Updated `NavigationView` to reset `SharedApp` state when `MapboxNavigation`is destroyed. [#6039](https://github.com/mapbox/mapbox-navigation-android/pull/6039) -- Updated `NavigationView` to enable vanishing route line by default. Previous behaviour can be restored by setting `MapboxRouteLineOptions` with `vanishingRouteLineEnabled` flag set to `false` [#6055](https://github.com/mapbox/mapbox-navigation-android/pull/6055) - ```kotlin - navigationView.customizeViewOptions { - routeLineOptions = ViewOptionsCustomization.defaultRouteLineOptions(context) - .toBuilder(context) - .withVanishingRouteLineEnabled(false) - .build() - } - ``` - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0-beta.1)) -- Mapbox Navigation Native `v108.0.1` -- Mapbox Core Common `v22.1.0-beta.1` -- Mapbox Java `v6.6.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.6.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.5` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.5-core-5.0.2)) - - -## Mapbox Navigation SDK 2.7.0-alpha.3 - July 8, 2022 -### Changelog -[Changes between v2.7.0-alpha.2 and v2.7.0-alpha.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-alpha.2...v2.7.0-alpha.3) - -#### Features -- :warning: Deprecated `RoadObjectsOnRouteObserver` in favor of a new getter `NavigationRoute.upcomingRoadObjects` to get access to list of `UpcomingRoadObject`. [#6032](https://github.com/mapbox/mapbox-navigation-android/pull/6032) -- Added `amenities` to `RestStop`. [#6007](https://github.com/mapbox/mapbox-navigation-android/pull/6007) -- Introduced `NavigationViewOptions.showInfoPanelInFreeDrive` option that allows showing of the BottomSheet Info Panel when `NavigationView` is in the Free Drive state. [#6011](https://github.com/mapbox/mapbox-navigation-android/pull/6011) -- Added `VoiceInstructionsPlayerOptions.abandonFocusDelay` option that allows specifying a delay in milliseconds until the player abandons audio focus after playing all queued voice instructions. [#5969](https://github.com/mapbox/mapbox-navigation-android/pull/5969) - -#### Bug fixes and improvements -- Made `rerouteController` argument in `MapboxNavigation#setRerouteController` nullable. Null can be passed to disable automatic rerouting. [#5977](https://github.com/mapbox/mapbox-navigation-android/pull/5977) -- Introduced `RoutesSetCallback` parameter to `MapboxNavigation#setNavigationRoutes`, which is called after the routes passed to `MapboxNavigation#setNavigationRoutes` are processed or are failed to be processed. [#5946](https://github.com/mapbox/mapbox-navigation-android/pull/5946) -- Changed the behaviour of `RoutesObserver`: `onRoutesChanged` method will not be triggered if the navigator fails to process routes passed via `MapboxNavigation#setNavigationRoutes`. [#5946](https://github.com/mapbox/mapbox-navigation-android/pull/5946) -- Fixed Attribution Icon position in `NavigationView`. [#6012](https://github.com/mapbox/mapbox-navigation-android/pull/6012) -- Fixed Toggle Camera Mode Button behavior in `NavigationView`. [#6014](https://github.com/mapbox/mapbox-navigation-android/pull/6014) -- Increased `AudioFocusDelegateProvider` visibility to public to allow instantiation of the default `AsyncAudioFocusDelegate`. [#5969](https://github.com/mapbox/mapbox-navigation-android/pull/5969) -- Fixed serialization of models with unrecognized properties. [#6021](https://github.com/mapbox/mapbox-navigation-android/pull/6021) -- Fixed the intermittent native crash caused during _Free Drive_ transition from _Active Guidance with alternatives. [#6034](https://github.com/mapbox/mapbox-navigation-android/pull/6034) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0-beta.1)) -- Mapbox Navigation Native `v108.0.1` -- Mapbox Core Common `v22.1.0-beta.1` -- Mapbox Java `v6.6.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.6.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.4`([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.4-core-5.0.2)) - -## Mapbox Navigation SDK 2.6.0 - July 7, 2022 -### Changelog -[Changes between v2.5.1 and v2.6.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.1...v2.6.0) - -#### Features -- Moved `MapboxCameraModeButton` to `libnavui-maps` module. Moved `MapboxExtendableButton` to `libnavui-base` module. Added new styles for `MapboxAudioGuidanceButton`, `MapboxCameraModeButton` and `MapboxExtendableButton` views. Those styles can be used to change the default button shape to "Oval," "Square" or "Circle" [#5962](https://github.com/mapbox/mapbox-navigation-android/pull/5962) -- Introduced `NavigationViewOptions.showInfoPanelInFreeDrive` option that allows showing of the BottomSheet Info Panel when `NavigationView` is in the Free Drive state. [#6011](https://github.com/mapbox/mapbox-navigation-android/pull/6011) -- Added `ViewBinderCustomization.customActionButtons` that allows installation of custom action buttons in `NavigationView` ActionBinder [#5937](https://github.com/mapbox/mapbox-navigation-android/pull/5937) -- Overloaded `PredictiveCacheController` `constructor` adding `predictiveCacheGuidanceLocationOptions` so that Maps / Navigation controller options can be configured separately. Noting that when using the secondary constructor `predictiveCacheLocationOptions` is used as `predictiveCacheGuidanceLocationOptions` to retain backwards compatibility. [#5927](https://github.com/mapbox/mapbox-navigation-android/pull/5927) -- Added an api for interacting with `NavigationView`. This API is experimental with the intention to become stable. [#5919](https://github.com/mapbox/mapbox-navigation-android/pull/5919) -- Added support for `NavigationViewListener`. This listener can be registered with `NavigationView` to observe changes to: navigation state, destination setting/clearing, Map `Style`, camera modes, camera viewport size, and audio guidance mute/un-mute state. [#5922](https://github.com/mapbox/mapbox-navigation-android/pull/5922) -- Added `MapboxNavigationApp#installComponents()` and `MapboxNavigation#installComponents()` APIs that offer simplified integration of voice, route line and route arrow APIs. These extensions allow to instantiate wrappers that automatically integrate `MapboxNavigation` with the selected components, taking care of data and lifecycle management. See documentation for `RouteLineComponent`, `RouteArrowComponent` and `AudioGuidanceButtonComponent`. [#5874](https://github.com/mapbox/mapbox-navigation-android/pull/5874) -- Added support for user feedbacks with custom types and subtypes. [#5915](https://github.com/mapbox/mapbox-navigation-android/pull/5915) -- :warning: Expired data in the current primary route is cleaned up if 3 consecutive refresh attempts fail. Congestion annotations become `"unknown"`. Numeric congestion annotations become `null`. Expired incidents disappear. [#5767](https://github.com/mapbox/mapbox-navigation-android/pull/5767). -- `RouteLineTrimOffset` exposed in `RouteLineDynamicData` to override the vanishing point offset produced by the `MapboxRouteLineApi`. [#5858](https://github.com/mapbox/mapbox-navigation-android/pull/5858) -- Added capabilities for Drop-In UI to render in landscape mode. [#5823](https://github.com/mapbox/mapbox-navigation-android/pull/5823) -- Added support for sharing multiple instances of `MapboxNavigationObserver`. [#5829](https://github.com/mapbox/mapbox-navigation-android/pull/5829) -- Added support for patches in Tile store. Tile store may download a patch to update an existing tile instead of downloading a new one. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) - -#### Bug fixes and improvements -- Fixed Attribution Icon position in `NavigationView` [#6012](https://github.com/mapbox/mapbox-navigation-android/pull/6012) -- Fixed Toggle Camera Mode Button behavior in `NavigationView`. [#6014](https://github.com/mapbox/mapbox-navigation-android/pull/6014) -- Fixed a Drop-In UI issue where legacy shields were displayed instead of Mapbox designed ones with some of the map styles. [#5984](https://github.com/mapbox/mapbox-navigation-android/pull/5984) -- Fixed setting trim offsets to route line trail layers. [#5982](https://github.com/mapbox/mapbox-navigation-android/pull/5982) -- Updated `NavigationView` to support edge-to-edge display. [#5976](https://github.com/mapbox/mapbox-navigation-android/pull/5976) -- Fixed user location indicator's velocity when `NavigationLocationProvider` is used together with `keyPoints`. [#5925](https://github.com/mapbox/mapbox-navigation-android/pull/5925) -- Fixed the issue with the close icon in the trip notification occasionally using wrong color when including ui-dropin dependency. [#5956](https://github.com/mapbox/mapbox-navigation-android/pull/5956) -- Added more callbacks to `NavigationViewListener` to allow for observing events related to fetching a route. [#5948](https://github.com/mapbox/mapbox-navigation-android/pull/5948) -- Fixed an issue where the default `NavigationCamera` transition to the `Following` state did not respect `NavigationCameraTransitionOptions#maxDuration`. [#5921](https://github.com/mapbox/mapbox-navigation-android/pull/5921) -- Added empty frames to Drop-In UI on the left and right side of the screen, thereby allowing users to inject custom views. [#5930](https://github.com/mapbox/mapbox-navigation-android/pull/5930) -- Improvements in route line layer management to eliminate blinking when alternative routes are recomputed and redrawn after passing a fork, in addition to improving performance by reducing route line layer redraws. [#5859](https://github.com/mapbox/mapbox-navigation-android/pull/5859) -- :warning: Moved `MapboxAudioGuidanceButton` from Drop-in UI to Voice module. [#5874](https://github.com/mapbox/mapbox-navigation-android/pull/5874) -- Changed `Onboard` router to fail fast and deliver an appropriate message when EV route requests are made, which are not supported yet. [#5905](https://github.com/mapbox/mapbox-navigation-android/pull/5905) -- Fixed an issue where offline route requests sometimes crashed the SDK. [#5905](https://github.com/mapbox/mapbox-navigation-android/pull/5905) -- :warning: Changed default `NavigationCamera` transitions to use the `flyTo` animation when transitioning to `NavigationCameraState#FOLLOWING` mode. [#5871](https://github.com/mapbox/mapbox-navigation-android/pull/5871) -- Improved enhanced locations bearing changes calculation on corners with high frequency input signal. [#5878](https://github.com/mapbox/mapbox-navigation-android/pull/5878) -- Fixed off-road detection in unmapped underground garages. [#5878](https://github.com/mapbox/mapbox-navigation-android/pull/5878) -- :warning: Changed `SaveHistoryCallback` to fire on the main thread instead of a worker thread. [#5878](https://github.com/mapbox/mapbox-navigation-android/pull/5878) -- Fixed an issue where the hosting `LifecycleOwner` used to dictate the lifecycle of the `NavigationView` was taken from the `Activity` even if the view was embedded in a `Fragment`. [#5818](https://github.com/mapbox/mapbox-navigation-android/pull/5818) -- Added an option to use different `ViewModelStoreOwner`s with the `NavigationView` (for example the one hosted by a `Fragment`). [#5818](https://github.com/mapbox/mapbox-navigation-android/pull/5818) -- Reduced memory consumptions on startup by not decoding tiles in predictive cache and latest version controller. [#5848](https://github.com/mapbox/mapbox-navigation-android/pull/5847) -- Fixed an issue where the vanishing point of the primary route line was not always reset when new routes were drawn following a previous active navigation session. [#5842](https://github.com/mapbox/mapbox-navigation-android/pull/5842) -- Fixed `LocationMatcherResult#location#time`. Now it follows Android conventions, i.e. contains UTC time in milliseconds instead of elapsed time. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) -- Fixed map-matching for some corner cases. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) -- Improved off-route detection in case of a teleport. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) -- Reduced cache misses in tile store. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0)) -- Mapbox Navigation Native `v106.0.0` -- Mapbox Core Common `v22.0.0` -- Mapbox Java `v6.6.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.6.0)) -- Mapbox Android Core `v5.0.2` ([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/core-5.0.2)) -- Mapbox Android Telemetry `v8.1.3`([release notes](https://github.com/mapbox/mapbox-events-android/releases/tag/telem-8.1.3-core-5.0.2)) - -## Mapbox Navigation SDK 2.7.0-alpha.2 - July 1, 2022 -### Changelog -[Changes between v2.7.0-alpha.1 and v2.7.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.7.0-alpha.1...v2.7.0-alpha.2) - -#### Features - -- Added refresh of alternatives routes. [#5923](https://github.com/mapbox/mapbox-navigation-android/pull/5923) -- Moved `MapboxCameraModeButton` to `libnavui-maps` module. Moved `MapboxExtendableButton` to `libnavui-base` module. Added new styles for `MapboxAudioGuidanceButton`, `MapboxCameraModeButton` and `MapboxExtendableButton` views. Those styles can be used to change the default button shape to "Oval," "Square" or "Circle" [#5962](https://github.com/mapbox/mapbox-navigation-android/pull/5962) -- Added `IncidentInfo#affectedRoadNames`. [#6008](https://github.com/mapbox/mapbox-navigation-android/pull/6008) - -#### Bug fixes and improvements - -- :warning: Changed the default log level from `Debug` to `Info`. To change the level for logs produced by Mapbox SDKs use `LogConfiguration.setLoggingLevel(LoggingLevel)`. [#5987](https://github.com/mapbox/mapbox-navigation-android/pull/5987) -- Fixed reroute request interruption when setting the `NavigationRerouteController` [#5950](https://github.com/mapbox/mapbox-navigation-android/pull/5950). -- Fixed setting trim offsets to route line trail layers. [#5982](https://github.com/mapbox/mapbox-navigation-android/pull/5982) -- Fixed a Drop-In UI issue where legacy shields were displayed instead of Mapbox designed ones with some of the map styles. [#5984](https://github.com/mapbox/mapbox-navigation-android/pull/5984) -- Updated `NavigationView` to support edge-to-edge display. [#5976](https://github.com/mapbox/mapbox-navigation-android/pull/5976) - -#### Known issues - -:bangbang: We are observing an [intermittent native crash](https://github.com/mapbox/mapbox-navigation-android/issues/5985) with this pre-release version when starting an active guidance session and then stopping the session by clicking on device back button. The root cause is still unknown and it only seems to affect specific devices. We are working to understand the issue and a fix is expected ahead of the final v2.7 release. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.7.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.7.0-beta.1)) -- Mapbox Navigation Native `v108.0.0` -- Mapbox Core Common `v22.1.0-beta.1` -- Mapbox Java `v6.6.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.6.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.2` - -## Mapbox Navigation SDK 2.6.0-rc.2 - July 1, 2022 -### Changelog -[Changes between v2.6.0-rc.1 and v2.6.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-rc.1...v2.6.0-rc.2) - -#### Bug fixes and improvements -- Fixed a Drop-In UI issue where legacy shields were displayed instead of Mapbox designed ones with some of the map styles. [#5984](https://github.com/mapbox/mapbox-navigation-android/pull/5984) -- Fixed setting trim offsets to route line trail layers. [#5982](https://github.com/mapbox/mapbox-navigation-android/pull/5982) -- Updated `NavigationView` to support edge-to-edge display. [#5976](https://github.com/mapbox/mapbox-navigation-android/pull/5976) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0)) -- Mapbox Navigation Native `v106.0.0` -- Mapbox Core Common `v22.0.0` -- Mapbox Java `v6.6.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.6.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.2` - -## Mapbox Navigation SDK 2.7.0-alpha.1 - June 24, 2022 -### Changelog -[Changes between v2.6.0-rc.1 and v2.7.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-rc.1...v2.7.0-alpha.1) - -#### Bug fixes and improvements - -- Updated `MapboxSpeechApi` to use persistent cache to decrease the bandwidth consumption. [#5790](https://github.com/mapbox/mapbox-navigation-android/pull/5790) -- Updated `DefaultResourceLoader` offline behaviour to return resources from the disk cache when available. [#5970](https://github.com/mapbox/mapbox-navigation-android/pull/5970) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0)) -- Mapbox Navigation Native `v107.0.0` -- Mapbox Core Common `v22.0.0` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.2` - -## Mapbox Navigation SDK 2.6.0-rc.1 - June 23, 2022 -### Changelog -[Changes between v2.6.0-beta.3 and v2.6.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-beta.3...v2.6.0-rc.1) - -#### Features -- Added `ViewBinderCustomization.customActionButtons` that allows installation of custom action buttons in `NavigationView` ActionBinder [#5937](https://github.com/mapbox/mapbox-navigation-android/pull/5937) - -#### Bug fixes and improvements -- Fixed user location indicator's velocity when `NavigationLocationProvider` is used together with `keyPoints`. [#5925](https://github.com/mapbox/mapbox-navigation-android/pull/5925) -- Fixed the issue with the close icon in the trip notification occasionally using wrong color when including ui-dropin dependency. [#5956](https://github.com/mapbox/mapbox-navigation-android/pull/5956) -- Added more callbacks to `NavigationViewListener` to allow for observing events related to fetching a route. [#5948](https://github.com/mapbox/mapbox-navigation-android/pull/5948) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0)) -- Mapbox Navigation Native `v106.0.0` -- Mapbox Core Common `v22.0.0` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.2` - -## Mapbox Navigation SDK 2.6.0-beta.3 - June 17, 2022 -### Changelog -[Changes between v2.6.0-beta.2 and v2.6.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-beta.2...v2.6.0-beta.3) - -#### Features -- Overloaded `PredictiveCacheController` `constructor` adding `predictiveCacheGuidanceLocationOptions` so that Maps / Navigation controller options can be configured separately. Noting that when using the secondary constructor `predictiveCacheLocationOptions` is used as `predictiveCacheGuidanceLocationOptions` to retain backwards compatibility. [#5927](https://github.com/mapbox/mapbox-navigation-android/pull/5927) -- Added an api for interacting with `NavigationView`. This API is experimental with the intention to become stable. [#5919](https://github.com/mapbox/mapbox-navigation-android/pull/5919) -- Added support for `NavigationViewListener`. This listener can be registered with `NavigationView` to observe changes to: navigation state, destination setting/clearing, Map `Style`, camera modes, camera viewport size, and audio guidance mute/un-mute state. [#5922](https://github.com/mapbox/mapbox-navigation-android/pull/5922) - -#### Bug fixes and improvements -- Fixed an issue where the default `NavigationCamera` transition to the `Following` state did not respect `NavigationCameraTransitionOptions#maxDuration`. [#5921](https://github.com/mapbox/mapbox-navigation-android/pull/5921) -- Added empty frames to Drop-In UI on the left and right side of the screen, thereby allowing users to inject custom views. [#5930](https://github.com/mapbox/mapbox-navigation-android/pull/5930) -- Improvements in route line layer management to eliminate blinking when alternative routes are recomputed and redrawn after passing a fork, in addition to improving performance by reducing route line layer redraws. [#5859](https://github.com/mapbox/mapbox-navigation-android/pull/5859) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0)) -- Mapbox Navigation Native `v106.0.0` -- Mapbox Core Common `v22.0.0` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.2` - -## Mapbox Navigation SDK 2.6.0-beta.2 - June 9, 2022 -### Changelog -[Changes between v2.6.0-beta.1 and v2.6.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-beta.1...v2.6.0-beta.2) - -#### Features -- Added `MapboxNavigationApp#installComponents()` and `MapboxNavigation#installComponents()` APIs that offer simplified integration of voice, route line and route arrow APIs. These extensions allow to instantiate wrappers that automatically integrate `MapboxNavigation` with the selected components, taking care of data and lifecycle management. See documentation for `RouteLineComponent`, `RouteArrowComponent` and `AudioGuidanceButtonComponent`. [#5874](https://github.com/mapbox/mapbox-navigation-android/pull/5874) -- Added support for user feedbacks with custom types and subtypes. [#5915](https://github.com/mapbox/mapbox-navigation-android/pull/5915) - -#### Bug fixes and improvements -- :warning: Moved `MapboxAudioGuidanceButton` from Drop-in UI to Voice module. [#5874](https://github.com/mapbox/mapbox-navigation-android/pull/5874) -- Changed `Onboard` router to fail fast and deliver an appropriate message when EV route requests are made, which are not supported yet. [#5905](https://github.com/mapbox/mapbox-navigation-android/pull/5905) -- Fixed an issue where offline route requests sometimes crashed the SDK. [#5905](https://github.com/mapbox/mapbox-navigation-android/pull/5905) -- :warning: Changed default `NavigationCamera` transitions to use the `flyTo` animation when transitioning to `NavigationCameraState#FOLLOWING` mode. [#5871](https://github.com/mapbox/mapbox-navigation-android/pull/5871) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0-rc.1)) -- Mapbox Navigation Native `v105.0.0` -- Mapbox Core Common `v22.0.0-rc.2` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.2` - -## Mapbox Navigation SDK 2.5.1 - June 2, 2022 -### Changelog -[Changes between v2.5.0 and v2.5.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0...v2.5.1) - -#### Bug fixes and improvements -- Fixed an issue where offline route requests sometimes crashed the SDK. [#5894](https://github.com/mapbox/mapbox-navigation-android/pull/5894) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v101.0.1` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.6.0-beta.1 - June 2, 2022 -### Changelog -[Changes between v2.6.0-alpha.2 and v2.6.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-alpha.2...v2.6.0-beta.1) - -#### Features -- :warning: Expired data in the current primary route is cleaned up if 3 consecutive refresh attempts fail. Congestion annotations become `"unknown"`. Numeric congestion annotations become `null`. Expired incidents disappear. [#5767](https://github.com/mapbox/mapbox-navigation-android/pull/5767). - -#### Bug fixes and improvements -- Improved enhanced locations bearing changes calculation on corners with high frequency input signal. [#5878](https://github.com/mapbox/mapbox-navigation-android/pull/5878) -- Fixed off-road detection in unmapped underground garages. [#5878](https://github.com/mapbox/mapbox-navigation-android/pull/5878) -- :warning: Changed `SaveHistoryCallback` to fire on the main thread instead of a worker thread. [#5878](https://github.com/mapbox/mapbox-navigation-android/pull/5878) -- Fixed an issue where the hosting `LifecycleOwner` used to dictate the lifecycle of the `NavigationView` was taken from the `Activity` even if the view was embedded in a `Fragment`. [#5818](https://github.com/mapbox/mapbox-navigation-android/pull/5818) -- Added an option to use different `ViewModelStoreOwner`s with the `NavigationView` (for example the one hosted by a `Fragment`). [#5818](https://github.com/mapbox/mapbox-navigation-android/pull/5818) - -#### Known issues -- :bangbang: Expiration of congestion annotations and incidents doesn't work for alternative routes, which can cause inconsistency and a false fact that alternative route is faster. -- Improvements in route line layer management to eliminate blinking when alternative routes are recomputed and redrawn after passing a fork, in addition to improving performance by reducing route line layer redraws. [#5859](https://github.com/mapbox/mapbox-navigation-android/pull/5859) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0-beta.2)) -- Mapbox Navigation Native `v104.0.0` -- Mapbox Core Common `v22.0.0-beta.1` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0 - May 26, 2022 - -:bangbang: We have identified a crash in this release https://github.com/mapbox/mapbox-navigation-android/issues/5876. - The team is working on a patch. We do not recommend you using this version of the SDK in production. - -### Changelog -[Changes between v2.4.1 and v2.5.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.1...v2.5.0) - -#### Features -- Exposed `NavigationRoute#id` and `RouteProgress#routeAlternativeId` which together can be used to immediately find an alternative route that a user might've turned into and generated an off-route event. [#5653](https://github.com/mapbox/mapbox-navigation-android/pull/5653) -- Exposed `MapboxNavigation#getAlternativeMetadataFor` function which returns metadata associated with alternative routes that are tracked in the current navigation session. This metadata can be used with `MapboxRouteLineApi#setNavigationRoutes` to hide portions of the alternative routes until their deviation point with the primary route. This is especially helpful in preventing alternative routes from resurfacing under the puck if the vanishing route line feature is enabled. [#5653](https://github.com/mapbox/mapbox-navigation-android/pull/5653) -- Added `MapboxNavigation#setTripNotificationInterceptor` to allow for notification customizations. This makes the notification compatible with the `CarAppExtender`. [#5669](https://github.com/mapbox/mapbox-navigation-android/pull/5669) -- :warning: Navigation Camera will no longer animate to `pitch 0` when approaching following maneuvers: "continue", "merge", "on ramp", "off ramp" and "fork". Original behavior can be restored by setting an empty list to `FollowingFrameOptions#pitchNearManeuvers#excludedManeuvers`. -- Added support for excluding maneuvers from the 'pitch to 0' camera updates when `FollowingFrameOptions#pitchNearManeuvers` is enabled. See `FollowingFrameOptions#pitchNearManeuvers#excludedManeuvers`. [#5717](https://github.com/mapbox/mapbox-navigation-android/pull/5717) -- Introduced persistent cache for assets downloaded by `MapboxJunctionApi`, `MapboxSignboardApi` and `MapboxRouteShieldApi` to decrease the bandwidth consumption. [#5750](https://github.com/mapbox/mapbox-navigation-android/pull/5750) -- Added `RestStop#name` field which contains a name of the service/rest area, when available. [#5768](https://github.com/mapbox/mapbox-navigation-android/pull/5768) -- Exposed `NavigationRoute#origin` that describes the type of router that generated the particular route. [#5766](https://github.com/mapbox/mapbox-navigation-android/pull/5766) -- Added `RestStop#name` values for updates coming from EHorizon. [#5807](https://github.com/mapbox/mapbox-navigation-android/pull/5807) -- Updated feature `route refresh`: now also supports refreshing `incidents` along the route found in `RouteLeg#incidents` and `RoadObjectsOnRouteObserver`. [#5749](https://github.com/mapbox/mapbox-navigation-android/pull/5749) -- Added `NavigationOptions.enableSensors` which enables analyzing data from sensors for better location prediction in case of a weak GPS signal [#5800](https://github.com/mapbox/mapbox-navigation-android/pull/5800) -- Added `MapboxReplayer#eventRealtimeOffset` to allow adjusting simulated locations timestamps for more accurate replays. [#5748](https://github.com/mapbox/mapbox-navigation-android/pull/5748) -- Added `ReplayRouteOptions#frequency` to allow adjusting the simulated location frequency. [#5724](https://github.com/mapbox/mapbox-navigation-android/pull/5724) -- Added `TollCollection#name` field which contains a name of the toll collection point, when available. [#5784](https://github.com/mapbox/mapbox-navigation-android/pull/5784) - -#### Bug fixes and improvements -- :warning: Realigned all `NavigationCamera` transitions to not fallback to `Idle` if a transition is canceled to keep the behavior consistent and predictable (state transitions used to be cancelable while frame transitions weren't). If you need the `NavigationCamera` to reset to `Idle` on external interactions or cancellations, use `NavigationBasicGesturesHandler` or `NavigationScaleGestureHandler` [#5607](https://github.com/mapbox/mapbox-navigation-android/pull/5607) -- Improved reroute experience for a default controller. `MapboxRerouteController` now immediately switches to an alternative route when a user turns to it, without making an unnecessary route request. [#5645](https://github.com/mapbox/mapbox-navigation-android/pull/5645) -- Added `NavigationOptions#EHorizonOptions#AlertServiceOptions` which allow to control which road objects are picked up from the eHorizon graph. :warning: Since Restricted Areas can be resource intensive to pick up, they are now disabled by default. [#5693](https://github.com/mapbox/mapbox-navigation-android/pull/5693) -- :warning: Added more runtime styling options to `ManeuverViewOptions` and deprecated individual styling methods [#5733](https://github.com/mapbox/mapbox-navigation-android/pull/5733) -- :warning: Removed support for style changes of standalone UI components based on `NavigationView` `attributes`. Introduced runtime styling support instead. [#5730](https://github.com/mapbox/mapbox-navigation-android/pull/5730) -- Parallelized some work in `MapboxNavigation#requestRoutes` to decrease the time in which `NavigationRouterCallback` returns. [#5718](https://github.com/mapbox/mapbox-navigation-android/pull/5718) -- :warning: Refactored the designs for `MapboxTripProgressView`. [#5744](https://github.com/mapbox/mapbox-navigation-android/pull/5744) -- Fixed an issue where [replacing the default logger module](https://docs.mapbox.com/android/navigation/guides/get-started/modularization/#logger) was throwing a runtime exception during library loading. [#5738](https://github.com/mapbox/mapbox-navigation-android/pull/5738) - - extension `DirectionsRoute#toNavigationRoute()` by `DirectionsRoute#toNavigationRoute(RouterOrigin)`. - - extension `List#toNavigationRoutes()` by `List#toNavigationRoutes(RouterOrigin)`; - - method `NavigationRoute#create(String, String)` by `NavigationRoute#create(String, String, RouterOrigin)`; - - method `NavigationRoute#create(DirectionsResponse, RouteOptions)` by `NavigationRoute#create(DirectionsResponse, RouteOptions, RouterOrigin)`; -- :warning: Deprecated `NavigationRoute` creation and mapping functions in favor of equivalents that take `RouterOrigin` as a parameter. If not provided, `RouterOrigin.Custom()` is used. [#5738](https://github.com/mapbox/mapbox-navigation-android/pull/5738) -- Changed the internal vanishing route line feature implementation to use the `line-trim-offset` property of `LineLayer` to improve the performance of updates. The optimization is not available when `MapboxRouteLineOptions#styleInactiveRouteLegsIndependently` is enabled. [#5697](https://github.com/mapbox/mapbox-navigation-android/pull/5697) -- Improved behavior of enhanced location teleports on parallel roads, especially forks. [#5768](https://github.com/mapbox/mapbox-navigation-android/pull/5768) -- Now it's possible to see the same route in `NavigationRouteAlternativesObserver` but coming from an offboard router if the current route was built onboard which can be used to always prefer an offboard-generated route over an onboard-generated one. This is a good practice because offboard-generated routes take live road conditions into account, have more precise ETAs, and can also be refreshed as the user drives and conditions change. Check `NavigationRouteAlternativesObserver` documentation for example usage. [#5768](https://github.com/mapbox/mapbox-navigation-android/pull/5768) -- Fixed feature to customize alternative route line colors based on route property. [#5802](https://github.com/mapbox/mapbox-navigation-android/pull/5802) -- :warning: `VoiceInstructionsObserver` doesn't trigger the last available voice instruction on registration with `MapboxNavigation#registerVoiceInstructionsObserver` anymore. The invocations of `VoiceInstructionsObserver` are critical to drive the correct timing of the instructions to be read out, that's why delivering the outdated value on registration could have led to incorrect guidance instructions. Use `RouteProgress#voiceInstructions` to get the last available voice instruction.[#5746](https://github.com/mapbox/mapbox-navigation-android/issues/5746) -- Fixed simulated route feasibility calculations. This will improve the accuracy of replay for curved roads. [#5748](https://github.com/mapbox/mapbox-navigation-android/pull/5748) -- Improved the accuracy of simulated locations speeds and the coordinate distance. This also fixed issues where the simulated driver would stall or jump near route turns. [#5724](https://github.com/mapbox/mapbox-navigation-android/pull/5724) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v101.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.6.0-alpha.2 - May 25, 2022 -### Changelog -[Changes between v2.6.0-alpha.1 and v2.6.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.6.0-alpha.1...v2.6.0-alpha.2) - -#### Features -- `RouteLineTrimOffset` exposed in `RouteLineDynamicData` to override the vanishing point offset produced by the `MapboxRouteLineApi`. [#5858](https://github.com/mapbox/mapbox-navigation-android/pull/5858) -- Added capabilities for Drop-In UI to render in landscape mode. [#5823](https://github.com/mapbox/mapbox-navigation-android/pull/5823) -- Added support for sharing multiple instances of `MapboxNavigationObserver`. [#5829](https://github.com/mapbox/mapbox-navigation-android/pull/5829) -- Added support for patches in Tile store. Tile store may download a patch to update an existing tile instead of downloading a new one. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) - -#### Bug fixes and improvements -- Reduced memory consumptions on startup by not decoding tiles in predictive cache and latest version controller. [#5848](https://github.com/mapbox/mapbox-navigation-android/pull/5847) -- Fixed an issue where the vanishing point of the primary route line was not always reset when new routes were drawn following a previous active navigation session. [#5842](https://github.com/mapbox/mapbox-navigation-android/pull/5842) -- Fixed `LocationMatcherResult#location#time`. Now it follows Android conventions, i.e. contains UTC time in milliseconds instead of elapsed time. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) -- Fixed map-matching for some corner cases. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) -- Improved off-route detection in case of a teleport. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) -- Reduced cache misses in tile store. [#5861](https://github.com/mapbox/mapbox-navigation-android/pull/5861) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.6.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.6.0-beta.1)) -- Mapbox Navigation Native `v103.0.1` -- Mapbox Core Common `v22.0.0-beta.1` -- Mapbox Java `v6.5.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-rc.3 - May 24, 2022 -### Changelog -[Changes between v2.5.0-rc.2 and v2.5.0-rc.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-rc.2...v2.5.0-rc.3) - -#### Bug fixes and improvements -- Reduced memory consumptions on startup by not decoding tiles in predictive cache and latest version controller. [#5848](https://github.com/mapbox/mapbox-navigation-android/pull/5847) -- Fixed an issue where the vanishing point of the primary route line was not always reset when new routes were drawn following a previous active navigation session. [#5842](https://github.com/mapbox/mapbox-navigation-android/pull/5842) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v101.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0-beta.6` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.6)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.6.0-alpha.1 - May 19, 2022 -### Changelog -[Changes between v2.5.0-rc.2 and v2.6.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-rc.1...v2.6.0-alpha.1) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v100.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0-beta.6` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.6)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-rc.2 - May 19, 2022 -### Changelog -[Changes between v2.5.0-rc.1 and v2.5.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-rc.1...v2.5.0-rc.2) - -#### Bug fixes and improvements -- Fixed an issue with the vanishing point being rendered ahead of the location indicator (especially on long routes) and other rendering artifact on the route line when the vanishing feature is enabled. [#5816](https://github.com/mapbox/mapbox-navigation-android/pull/5816) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v100.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0-beta.6` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.6)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-rc.1 - May 13, 2022 -### Changelog -[Changes between v2.5.0-beta.3 and v2.5.0-rc.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-beta.3...v2.5.0-rc.1) - -#### Features -- Added `TollCollection#name` field which contains a name of the toll collection point, when available. [#5784](https://github.com/mapbox/mapbox-navigation-android/pull/5784) -- Added `ReplayRouteOptions#frequency` to allow adjusting the simulated location frequency. [#5724](https://github.com/mapbox/mapbox-navigation-android/pull/5724) -- Added `MapboxReplayer#eventRealtimeOffset` to allow adjusting simulated locations timestamps for more accurate replays. [#5748](https://github.com/mapbox/mapbox-navigation-android/pull/5748) -- Added `NavigationOptions.enableSensors` which enables analyzing data from sensors for better location prediction in case of a weak GPS signal [#5800](https://github.com/mapbox/mapbox-navigation-android/pull/5800) -- Updated feature `route refresh`: now also supports refreshing `incidents` along the route found in `RouteLeg#incidents` and `RoadObjectsOnRouteObserver`. [#5749](https://github.com/mapbox/mapbox-navigation-android/pull/5749) -- Added `RestStop#name` values for updates coming from EHorizon. [#5807](https://github.com/mapbox/mapbox-navigation-android/pull/5807) - -#### Bug fixes and improvements -- Improved the accuracy of simulated locations speeds and the coordinate distance. This also fixed issues where the simulated driver would stall or jump near route turns. [#5724](https://github.com/mapbox/mapbox-navigation-android/pull/5724) -- Fixed simulated route feasibility calculations. This will improve the accuracy of replay for curved roads. [#5748](https://github.com/mapbox/mapbox-navigation-android/pull/5748) -- :warning: `VoiceInstructionsObserver` doesn't trigger the last available voice instruction on registration with `MapboxNavigation#registerVoiceInstructionsObserver` anymore. The invocations of `VoiceInstructionsObserver` are critical to drive the correct timing of the instructions to be read out, that's why delivering the outdated value on registration could have led to incorrect guidance instructions. Use `RouteProgress#voiceInstructions` to get the last available voice instruction.[#5746](https://github.com/mapbox/mapbox-navigation-android/issues/5746) -- Fixed occasional absence of the first voice instruction. [#5807](https://github.com/mapbox/mapbox-navigation-android/pull/5807) -- Fixed an issue where prettified Mapbox Directions service responses weren't parsed correctly. [#5807](https://github.com/mapbox/mapbox-navigation-android/pull/5807) -- Fixed feature to customize alternative route line colors based on route property. [#5802](https://github.com/mapbox/mapbox-navigation-android/pull/5802) - -#### Known issues -- Precision of the point at which the route is supposed to change behind the location indicator is negatively impacted for long routes. This can present itself by the route vanishing/changing in front the the location indicator. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v100.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0-beta.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.5)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-beta.3 - May 5, 2022 -### Changelog -[Changes between v2.5.0-beta.2 and v2.5.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-beta.2...v2.5.0-beta.3) - -#### Features -- Exposed `NavigationRoute#origin` that describes the type of router that generated the particular route. [#5766](https://github.com/mapbox/mapbox-navigation-android/pull/5766) -- Added `RestStop#name` field which contains a name of the service/rest area, when available. [#5768](https://github.com/mapbox/mapbox-navigation-android/pull/5768) -- Introduced persistent cache for assets downloaded by `MapboxJunctionApi`, `MapboxSignboardApi` and `MapboxRouteShieldApi` to decrease the bandwidth consumption. [#5750](https://github.com/mapbox/mapbox-navigation-android/pull/5750) - -#### Bug fixes and improvements -- Now it's possible to see the same route in `NavigationRouteAlternativesObserver` but coming from an offboard router if the current route was built onboard which can be used to always prefer an offboard-generated route over an onboard-generated one. This is a good practice because offboard-generated routes take live road conditions into account, have more precise ETAs, and can also be refreshed as the user drives and conditions change. Check `NavigationRouteAlternativesObserver` documentation for example usage. [#5768](https://github.com/mapbox/mapbox-navigation-android/pull/5768) -- Improved behavior of enhanced location teleports on parallel roads, especially forks. [#5768](https://github.com/mapbox/mapbox-navigation-android/pull/5768) -- Changed the internal vanishing route line feature implementation to use the `line-trim-offset` property of `LineLayer` to improve the performance of updates. The optimization is not available when `MapboxRouteLineOptions#styleInactiveRouteLegsIndependently` is enabled. [#5697](https://github.com/mapbox/mapbox-navigation-android/pull/5697) - -#### Known issues -- `RestStop#name` are only available through `RoadObjectsOnRouteObserver` and not through `EHorizonObserver` yet. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0)) -- Mapbox Navigation Native `v98.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.4)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.1 - April 28, 2022 -### Changelog -[Changes between v2.4.0 and v2.4.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.0...v2.4.1) - -#### Bug fixes and improvements - -- Fixed an issue where route refresh was not updating the ETA values found in the `RouteProgress` object. [#5755](https://github.com/mapbox/mapbox-navigation-android/pull/5755) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.3)) -- Mapbox Navigation Native `v94.0.3` -- Mapbox Core Common `v21.2.1` -- Mapbox Java `v6.4.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.1)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-beta.2 - April 28, 2022 -### Changelog -[Changes between v2.5.0-beta.1 and v2.5.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-beta.1...v2.5.0-beta.2) - -#### Bug fixes and improvements - -- Fixed an issue where route refresh was not updating the ETA values found in the `RouteProgress` object. [#5755](https://github.com/mapbox/mapbox-navigation-android/pull/5755) -- :warning: Deprecated `NavigationRoute` creation and mapping functions in favor of equivalents that take `RouterOrigin` as a parameter. If not provided, `RouterOrigin.Custom()` is used. [#5738](https://github.com/mapbox/mapbox-navigation-android/pull/5738) - - method `NavigationRoute#create(DirectionsResponse, RouteOptions)` by `NavigationRoute#create(DirectionsResponse, RouteOptions, RouterOrigin)`; - - method `NavigationRoute#create(String, String)` by `NavigationRoute#create(String, String, RouterOrigin)`; - - extension `List#toNavigationRoutes()` by `List#toNavigationRoutes(RouterOrigin)`; - - extension `DirectionsRoute#toNavigationRoute()` by `DirectionsRoute#toNavigationRoute(RouterOrigin)`. -- Fixed an issue where [replacing the default logger module](https://docs.mapbox.com/android/navigation/guides/get-started/modularization/#logger) was throwing a runtime exception during library loading. [#5738](https://github.com/mapbox/mapbox-navigation-android/pull/5738) -- :warning: Refactored the designs for `MapboxTripProgressView`. [#5744](https://github.com/mapbox/mapbox-navigation-android/pull/5744) -- Fixed the crash of default `RerouteController` when it immediately switches to an existing alternative. [#5753](https://github.com/mapbox/mapbox-navigation-android/pull/5753) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0-rc.1)) -- Mapbox Navigation Native `v97.0.0` -- Mapbox Core Common `v21.3.1` -- Mapbox Java `v6.5.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.3)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-beta.1 - April 22, 2022 -### Changelog -[Changes between v2.5.0-alpha.3 and v2.5.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-alpha.3...v2.5.0-beta.1) - -#### Features -- Added support for excluding maneuvers from the 'pitch to 0' camera updates when `FollowingFrameOptions#pitchNearManeuvers` is enabled. See `FollowingFrameOptions#pitchNearManeuvers#excludedManeuvers`. [#5717](https://github.com/mapbox/mapbox-navigation-android/pull/5717) -- :warning: Navigation Camera will no longer animate to `pitch 0` when approaching following maneuvers: "continue", "merge", "on ramp", "off ramp" and "fork". Original behavior can be restored by setting an empty list to `FollowingFrameOptions#pitchNearManeuvers#excludedManeuvers`. - -#### Bug fixes and improvements -- Parallelized some work in `MapboxNavigation#requestRoutes` to decrease the time in which `NavigationRouterCallback` returns. [#5718](https://github.com/mapbox/mapbox-navigation-android/pull/5718) -- :warning: Removed support for style changes of standalone UI components based on `NavigationView` `attributes`. Introduced runtime styling support instead. [#5730](https://github.com/mapbox/mapbox-navigation-android/pull/5730) -- :warning: Added more runtime styling options to `ManeuverViewOptions` and deprecated individual styling methods [#5733](https://github.com/mapbox/mapbox-navigation-android/pull/5733) - -#### Known issues -- Adding a custom `Logger` instance by [replacing the default logger module](https://docs.mapbox.com/android/navigation/guides/get-started/modularization/#logger) causes a runtime exception during library loading. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0-beta.1)) -- Mapbox Navigation Native `v96.0.0` -- Mapbox Core Common `v21.3.0-rc.2` -- Mapbox Java `v6.5.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.5.0-beta.2)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-alpha.3 - April 15, 2022 -### Changelog -[Changes between v2.5.0-alpha.2 and v2.5.0-alpha.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-alpha.2...v2.5.0-alpha.3) - -#### Features -- Added `MapboxNavigation#setTripNotificationInterceptor` to allow for notification customizations. This makes the notification compatible with the `CarAppExtender`. [#5669](https://github.com/mapbox/mapbox-navigation-android/pull/5669) - -#### Bug fixes and improvements -- Added `NavigationOptions#EHorizonOptions#AlertServiceOptions` which allow to control which road objects are picked up from the eHorizon graph. :warning: Since Restricted Areas can be resource intensive to pick up, they are now disabled by default. [#5693](https://github.com/mapbox/mapbox-navigation-android/pull/5693) -- Fixed an issue where a call to `MapboxNavigation#stopTripSession` would clear the routes reference and led to a `RoutesObserver` notification with empty routes collection. [#5685](https://github.com/mapbox/mapbox-navigation-android/pull/5685) -- Fixed an issue where `AlternativeRouteMetadata` would get cleared after route refresh (whenever routes update reason was `RoutesExtra#ROUTES_UPDATE_REASON_REFRESH`). [#5691](https://github.com/mapbox/mapbox-navigation-android/pull/5691) -- Fixed a race condition where internal route refresh logic could overwrite the result of a call to `MapboxNavigation#setRoutes`. [#5685](https://github.com/mapbox/mapbox-navigation-android/pull/5685) - -#### Known issues -- Adding a custom `Logger` instance by [replacing the default logger module](https://docs.mapbox.com/android/navigation/guides/get-started/modularization/#logger) causes a runtime exception during library loading. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.5.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.5.0-beta.1)) -- Mapbox Navigation Native `v96.0.0` -- Mapbox Core Common `v21.3.0-rc.2` -- Mapbox Java `v6.4.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0 - April 14, 2022 -### Changelog -[Changes between v2.4.0 and v2.3.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.3.0...v2.4.0) - -- :exclamation: Starting with version 2.4 (2.4.0-beta.3), we are implementing a grace period of 30-seconds for all navigation sessions started by Nav SDK. A session will be counted only after this time period has surpassed. This allows you to reduce the cost of using the SDK during development and testing of your applications, as well as in production. Grace period is especially helpful to decrease the cost of short Free Drive session that are just a transition between Active Guidance sessions, or when a session is aborted right after it was started. -- :warning: Deprecated `RouterOrigin.Custom(obj: Any?)`. The SDK doesn't keep `RouteOrigin.Custom#obj` anymore, it always becomes `null` when the `obj` returns in `RoutesObserver`. [#5500](https://github.com/mapbox/mapbox-navigation-android/pull/5500) -- :warning: Restricted Areas are intentionally not being picked up from the eHorizon graph in Free Drive as the operation can be very resource intensive. An option to re-enable this feature will be exposed in future releases. - -#### Features -- Introduced a `NavigationRoute` object and related functions like `NavigationRouterCallback`, `MapboxNavigation#setNavigationRoutes`, etc. `NavigationRoute` is a domain specific wrapper on top of `DirectionsRoute` which provides information (and enforces its presence) about the original `DirectionsResponse` that this route is part of, as well as what `RouteOptions` were used to generate it. - Most of the Navigation SDK APIs that rely only on `DirectionsRoute` are now marked as `Deprecated` since there might be features introduced in the future that would require the `NavigationRoute` instances instead. - There are `NavigationRoute#toDirectionsRoute()` and `DirectionsRoute#toNavigationRoute()` compatibility extensions available, however, the latter is lossy since `DirectionsRoute` cannot carry as much information as `NavigationRoute` and the recommended migration path is to use `NavigationRouterCallback` instead of the old `RouterCallback` to request routes. - This change might require action when integrating if you have hardcoded routes in your test suites that do not have all necessary fields to support `DirectionsRoute` to `NavigationRoute` mapping (mostly `DirectionsRoute#routeIndex`) - in these cases make sure to provide the missing data or regenerate the routes using `MapboxNavigation#requestRoutes`. - [#5411](https://github.com/mapbox/mapbox-navigation-android/pull/5411) -- Added a new `RailwayCrossing` type to `RoadObject`s. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Added point exclusion option for onboard router. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Improved capabilities to replay route alternatives with the `ReplayProgressObserver` by respecting the current distance traveled. This fixes the jump to the beginning of the alternative route upon the switch. [#5586](https://github.com/mapbox/mapbox-navigation-android/pull/5586) -- Added extension functions for overriding the route line traffic expression or color. [#5597](https://github.com/mapbox/mapbox-navigation-android/pull/5597) -- Added `RerouteOptionsAdapter`. It allows to modify `RouteOptions` on reroute for default implementation of `RerouteController` via `MapboxNavigation#setRerouteOptionsAdapter`. [#5573](https://github.com/mapbox/mapbox-navigation-android/pull/5573) -- Added `LocationMatcherResult#isDegradedMapMatching` which allows to understand if current matched location was produced using limited map matching approach(e.g. due to lack of map data). [#5606](https://github.com/mapbox/mapbox-navigation-android/pull/5606) - -#### Bug fixes and improvements -- Added `MapboxNavigationApp.setup` overload, that accepts `NavigationOptionsProvider` instead of prebuilt `NavigationOptions`. [#5490](https://github.com/mapbox/mapbox-navigation-android/pull/5490) -- Fixed `MapboxNavigationApp` issue, that caused unexpected `MapboxNavigation` destroy, when one of the attached lifecycles is destroyed and the other one is stopped. [#5518](https://github.com/mapbox/mapbox-navigation-android/pull/5518) -- Fixed uncaught exception in the `ShieldsCache` class. [#5524](https://github.com/mapbox/mapbox-navigation-android/pull/5524) -- Use native logger backend instead of the Android instance directly. [#5520](https://github.com/mapbox/mapbox-navigation-android/pull/5520) -- Fixed an issue where a route refresh would only refresh annotations for the current leg of a route instead of for all remaining legs of a route. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Fixed an issue where alternative routes would hold a reference to the original route's `RouteOptions` instead of the correct ones that were used to generate the alternative. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Fixed an issue related to highlighting buildings via the MapboxBuildingsApi by adding the building-extrusion layer as one of the layers queried. [#5433](https://github.com/mapbox/mapbox-navigation-android/pull/5433) -- Adopted Common SDK log messages parsing logic so it's consistent across Mapbox SDKs. As an example, this is how the logs would look like `D/Mapbox: [nav-sdk] [ConnectivityHandler] NetworkStatus=ReachableViaWiFi`. [#5604](https://github.com/mapbox/mapbox-navigation-android/pull/5604) -- Added a workaround for [`ConnectivityManager`'s occasional security exception on Android 11 and older](https://issuetracker.google.com/issues/175055271). [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) -- Fixed an issue where off-route wouldn't be reported if we were navigating in a fallback mode (without routing tiles on device). [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) -- `RouteProgressState#INITIALIZED` might now be reported for each leg start, not only for the route start. [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) -- Fixed `HistoryEventMapper#mapNavigationRoute` for when `SetRouteHistoryRecord` has empty `routeRequest`. [#5614](https://github.com/mapbox/mapbox-navigation-android/pull/5614) -- Fixed an issue where route refresh failure led to a parsing error and runtime crash instead of failure callback. [#5617](https://github.com/mapbox/mapbox-navigation-android/pull/5617) -- Fixed `ReplayRouteInterpolator` speed adjustment on turns. A driver doesn't slow down on minor curvatures on a motorway. [5618](https://github.com/mapbox/mapbox-navigation-android/pull/5618) -- Fixed an issue where line `RoadObject`s matched with `RoadObjectMatcher` which consisted of only one edge and multiple lines where calculated incorrectly. [#5629](https://github.com/mapbox/mapbox-navigation-android/pull/5629) -- Moved alternative route line processing to a worker thread, relieving a little bit of load from the main thread during each recalculation. [#5634](https://github.com/mapbox/mapbox-navigation-android/pull/5634) -- Added `AsyncAudioFocusDelegate` to `MapboxVoiceInstructionsPlayer` to allow clients to interact with the audio focus in an asynchronous way. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Added `AudioFocusOwner` so that the owner can be specified when requesting the audio focus `AsyncAudioFocusDelegate#requestFocus`. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Added `ttsStreamType` to `VoiceInstructionsPlayerOptions` so that the stream type for playing TTS can be specified, allowing to fix an issue with `KEY_PARAM_STREAM` not being updated and used properly. Defaults to `AudioManager.STREAM_MUSIC`. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Fixed an issue found in `v2.4.0-beta.3` and later where compressed tiles were incorrectly decoded from the cache. This could have led to degraded map matching or unavailable resources. [#5707](https://github.com/mapbox/mapbox-navigation-android/pull/5707) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.2)) -- Mapbox Navigation Native `v94.0.3` -- Mapbox Core Common `v21.2.1` -- Mapbox Java `v6.4.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-alpha.2 - April 7, 2022 -### Changelog -[Changes between v2.5.0-alpha.1 and v2.5.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.5.0-alpha.1...v2.5.0-alpha.2) - -#### Features -- Exposed `MapboxNavigation#getAlternativeMetadataFor` function which returns metadata associated with alternative routes that are tracked in the current navigation session. This metadata can be used with `MapboxRouteLineApi#setNavigationRoutes` to hide portions of the alternative routes until their deviation point with the primary route. This is especially helpful in preventing alternative routes from resurfacing under the puck if the vanishing route line feature is enabled. [#5653](https://github.com/mapbox/mapbox-navigation-android/pull/5653) -- Exposed `NavigationRoute#id` and `RouteProgress#routeAlternativeId` which together can be used to immediately find an alternative route that a user might've turned into and generated an off-route event. [#5653](https://github.com/mapbox/mapbox-navigation-android/pull/5653) - -#### Bug fixes and improvements -- Improved reroute experience for a default controller. `MapboxRerouteController` now immediately switches to an alternative route when a user turns to it, without making an unnecessary route request. [#5645](https://github.com/mapbox/mapbox-navigation-android/pull/5645) -- Added `AsyncAudioFocusDelegate` to `MapboxVoiceInstructionsPlayer` to allow clients to interact with the audio focus in an asynchronous way. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Added `AudioFocusOwner` so that the owner can be specified when requesting the audio focus `AsyncAudioFocusDelegate#requestFocus`. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Added `ttsStreamType` to `VoiceInstructionsPlayerOptions` so that the stream type for playing TTS can be specified, allowing to fix an issue with `KEY_PARAM_STREAM` not being updated and used properly. Defaults to `AudioManager.STREAM_MUSIC`. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Made all reachable polygon entries and exits tracked instead of the closest one for E-horizon `RoadObject`s. [#5653](https://github.com/mapbox/mapbox-navigation-android/pull/5653) -- Fixed an issue where enhanced location couldn't snap to correct road edge for a long time after leaving a tunnel. [#5653](https://github.com/mapbox/mapbox-navigation-android/pull/5653) -- Fixed `MapboxSpeedLimitView` sizing when rendering `UpdateSpeedLimitError` value [#5666](https://github.com/mapbox/mapbox-navigation-android/pull/5666) - -#### Other changes -- Up until this point, `RoutesObserver` fired nearly immediately with new route references after `MapboxNavigation@setNavigationRoutes` was called. Now, the Nav SDK first fully processes the routes (for example, to compute the `AlternativeRouteMetadata`) which results in a small delay between routes being set and actually returned by the `RoutesObserver`. - -#### Known issues -- Occasionally, the first `RouteProgress` update after setting new route might fail to be delivered due to the scheduling of route processing jobs. -- When alternative routes that take advantage of the `AlternativeRouteMetadata` are reset because new become available, or changed manually by interacting with the map, there could be a brief flash of the full alternative route geometry which quickly recovers to a valid state. -- Calling `MapboxNavigation#stopTripSession` clears the routes reference and leads to a `RoutesObserver` notification with empty routes collection. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.0)) -- Mapbox Navigation Native `v95.0.0` -- Mapbox Core Common `v21.2.0` -- Mapbox Java `v6.4.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.4)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0-rc.2 - April 7, 2022 - -#### Bug fixes and improvements -- Added `AsyncAudioFocusDelegate` to `MapboxVoiceInstructionsPlayer` to allow clients to interact with the audio focus in an asynchronous way. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Added `AudioFocusOwner` so that the owner can be specified when requesting the audio focus `AsyncAudioFocusDelegate#requestFocus`. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) -- Added `ttsStreamType` to `VoiceInstructionsPlayerOptions` so that the stream type for playing TTS can be specified, allowing to fix an issue with `KEY_PARAM_STREAM` not being updated and used properly. Defaults to `AudioManager.STREAM_MUSIC`. [#5652](https://github.com/mapbox/mapbox-navigation-android/pull/5652) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.0)) -- Mapbox Navigation Native `v94.0.0` -- Mapbox Core Common `v21.2.0` -- Mapbox Java `v6.4.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.4)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.5.0-alpha.1 - April 1, 2022 -### Changelog -[Changes between v2.4.0-rc.3 and v2.5.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.0-rc.3...v2.5.0-alpha.1) - -#### Bug fixes and improvements -- :warning: Realigned all `NavigationCamera` transitions to not fallback to `Idle` if a transition is canceled to keep the behavior consistent and predictable (state transitions used to be cancelable while frame transitions weren't). If you need the `NavigationCamera` to reset to `Idle` on external interactions or cancellations, use `NavigationBasicGesturesHandler` or `NavigationScaleGestureHandler` [#5607](https://github.com/mapbox/mapbox-navigation-android/pull/5607) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.0)) -- Mapbox Navigation Native `v94.0.0` -- Mapbox Core Common `v21.2.0` -- Mapbox Java `v6.4.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.4)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0-rc.1 - March 31, 2022 - -#### Bug fixes and improvements -- Fixed `HistoryEventMapper#mapNavigationRoute` for when `SetRouteHistoryRecord` has empty `routeRequest`. [#5614](https://github.com/mapbox/mapbox-navigation-android/pull/5614) -- Fixed an issue where route refresh failure led to a parsing error and runtime crash instead of failure callback. [#5617](https://github.com/mapbox/mapbox-navigation-android/pull/5617) -- Fixed `ReplayRouteInterpolator` speed adjustment on turns. A driver doesn't slow down on minor curvatures on a motorway. [5618](https://github.com/mapbox/mapbox-navigation-android/pull/5618) -- Fixed an issue where `RouteProgress` might not have been delivered in active guidance when `MapboxNavigation#setRoutes` calls were dispatched in quick succession (session was locked in an invalid state). [#5629](https://github.com/mapbox/mapbox-navigation-android/pull/5629) -- Improved the time between the router getting access to a raw Directions API response and Nav SDK delivering a `NavigationRoute` instance in `NavigationRouterCallback`. [#5629](https://github.com/mapbox/mapbox-navigation-android/pull/5629) -- Fixed an issue where line `RoadObject`s matched with `RoadObjectMatcher` which consisted of only one edge and multiple lines where calculated incorrectly. [#5629](https://github.com/mapbox/mapbox-navigation-android/pull/5629) -- Moved alternative route line processing to a worker thread, relieving a little bit of load from the main thread during each recalculation. [#5634](https://github.com/mapbox/mapbox-navigation-android/pull/5634) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.0)) -- Mapbox Navigation Native `v94.0.0` -- Mapbox Core Common `v21.2.0` -- Mapbox Java `v6.4.0-beta.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.4)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0-beta.3 - March 25, 2022 -### Changelog -[Changes between v2.4.0-beta.2 and v2.4.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.0-beta.2...v2.4.0-beta.3) - -- :exclamation: Starting with version 2.4 (2.4.0-beta.3), we are implementing a grace period of 30-seconds for all navigation sessions started by Nav SDK. A session will be counted only after this time period has surpassed. This allows you to reduce the cost of using the SDK during development and testing of your applications, as well as in production. Grace period is especially helpful to decrease the cost of short Free Drive session that are just a transition between Active Guidance sessions, or when a session is aborted right after it was started. - -#### Features -- Added `RerouteOptionsAdapter`. It allows to modify `RouteOptions` on reroute for default implementation of `RerouteController` via `MapboxNavigation#setRerouteOptionsAdapter`. [#5573](https://github.com/mapbox/mapbox-navigation-android/pull/5573) -- Added `LocationMatcherResult#isDegradedMapMatching` which allows to understand if current matched location was produced using limited map matching approach(e.g. due to lack of map data). [#5606](https://github.com/mapbox/mapbox-navigation-android/pull/5606) - -#### Bug fixes and improvements -- Adopted Common SDK log messages parsing logic so it's consistent across Mapbox SDKs. As an example, this is how the logs would look like `D/Mapbox: [nav-sdk] [ConnectivityHandler] NetworkStatus=ReachableViaWiFi`. [#5604](https://github.com/mapbox/mapbox-navigation-android/pull/5604) -- :warning: `NavigationRoute`'s constructor has been hidden in favor of `NavigationRoute#create` static factories. [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) -- Added a workaround for [`ConnectivityManager`'s occasional security exception on Android 11 and older](https://issuetracker.google.com/issues/175055271). [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) -- Fixed an issue where off-route wouldn't be reported if we were navigating in a fallback mode (without routing tiles on device). [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) -- `RouteProgressState#INITIALIZED` might now be reported for each leg start, not only for the route start. [#5587](https://github.com/mapbox/mapbox-navigation-android/pull/5587) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.0-rc.1)) -- Mapbox Navigation Native `v93.0.0` -- Mapbox Core Common `v21.2.0-rc.1` -- Mapbox Java `v6.4.0-beta.3` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.3)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0-beta.2 - March 18, 2022 -### Changelog -[Changes between v2.4.0-beta.1 and v2.4.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.0-beta.1...v2.4.0-beta.2) - -#### Features -- Added a new `RailwayCrossing` type to `RoadObject`s. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Added point exclusion option for onboard router. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Improved capabilities to replay route alternatives with the `ReplayProgressObserver` by respecting the current distance traveled. This fixes the jump to the beginning of the alternative route upon the switch. [#5586](https://github.com/mapbox/mapbox-navigation-android/pull/5586) -- Added extension functions for overriding the route line traffic expression or color. [#5597](https://github.com/mapbox/mapbox-navigation-android/pull/5597) - -#### Bug fixes and improvements -- Fixed an issue where a route refresh would only refresh annotations for the current leg of a route instead of for all remaining legs of a route. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Fixed an issue where alternative routes would hold a reference to the original route's `RouteOptions` instead of the correct ones that were used to generate the alternative. [#5552](https://github.com/mapbox/mapbox-navigation-android/pull/5552) -- Fixed an issue related to highlighting buildings via the MapboxBuildingsApi by adding the building-extrusion layer as one of the layers queried. [#5433](https://github.com/mapbox/mapbox-navigation-android/pull/5433) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.4.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.4.0-beta.1)) -- Mapbox Navigation Native `v90.0.1` -- Mapbox Core Common `21.2.0-beta.1` -- Mapbox Java `6.4.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.2)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0-beta.1 - March 11, 2022 -### Changelog -[Changes between v2.4.0-alpha.2 and v2.4.0-beta.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.0-alpha.2...v2.4.0-beta.1) - -- :warning: Deprecated `RouterOrigin.Custom(obj: Any?)`. The SDK doesn't keep `RouteOrigin.Custom#obj` anymore, it always becomes `null` when the `obj` returns in `RoutesObserver`. [#5500](https://github.com/mapbox/mapbox-navigation-android/pull/5500) - -#### Features -- Exposed option in `MapboxRouteLineOptions` to change the default icon pitch alignment for waypoint icons. [#5531](https://github.com/mapbox/mapbox-navigation-android/pull/5531) - -#### Bug fixes and improvements -- Changed internal road class calculations used by the `MapboxRouteLineApi` to fail gracefully and log instead of crashing when invalid route `geometry_index` is provided in the route object.. [#5542](https://github.com/mapbox/mapbox-navigation-android/pull/5542) - -## Mapbox Navigation SDK 2.4.0-alpha.2 - March 4, 2022 -### Changelog -[Changes between v2.4.0-alpha.1 and v2.4.0-alpha.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.4.0-alpha.1...v2.4.0-alpha.2) - -#### Bug fixes and improvements -- Fixed `MapboxNavigationApp` issue, that caused unexpected `MapboxNavigation` destroy, when one of the attached lifecycles is destroyed and the other one is stopped. [#5518](https://github.com/mapbox/mapbox-navigation-android/pull/5518) -- Fixed uncaught exception in the `ShieldsCache` class. [#5524](https://github.com/mapbox/mapbox-navigation-android/pull/5524) -- Use native logger backend instead of the Android instance directly. [#5520](https://github.com/mapbox/mapbox-navigation-android/pull/5520) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0)) -- Mapbox Navigation Native `v88.0.0` -- Mapbox Core Common `v21.1.1` -- Mapbox Java `v6.4.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.1)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0 - March 2, 2022 -### Changelog -[Changes between v2.2.2 and v2.3.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.2.2...v2.3.0) - -#### Features -- Added new `StatusView` component for displaying SDK status messages. [#5403](https://github.com/mapbox/mapbox-navigation-android/pull/5403) - -#### Bug fixes and improvements -- Added geo deeplink parsing utility `GeoDeeplinkParser`. [#5103](https://github.com/mapbox/mapbox-navigation-android/pull/5103) -- Added options to the `MapboxRouteLineOptions` class to control the icon anchor and icon offset for the route line related waypoint icons including the origin and destination points. [#5409](https://github.com/mapbox/mapbox-navigation-android/pull/5409) -- Fixed an issue where `RouteAlternativesObserver` and `RouteAlternativesRequestCallback` failed to deliver any alternatives due to an unrecognized `"closure"` annotation parameter in the native controller. [#5421](https://github.com/mapbox/mapbox-navigation-android/pull/5421) -- Fixed an issue where a reference to the registered `RouteAlternativesObserver` was not released after unsubscribing or destroying `MapboxNavigation`. [#5421](https://github.com/mapbox/mapbox-navigation-android/pull/5421) -- Improved `RouteAlternativesObserver` to ensure that alternative routes request is fired on each new leg start. [#5421](https://github.com/mapbox/mapbox-navigation-android/pull/5421) -- Added `avoidManeuverSeconds` param to `RouteAlternativesOptions`. [#5394](https://github.com/mapbox/mapbox-navigation-android/pull/5394) -- Fixed an issue found in `v2.3.0-alpha.1` where deprecated fields in `Road` type were always returning `null`s instead of the correct values. [#5396](https://github.com/mapbox/mapbox-navigation-android/pull/5396) -- Fixed an issue where `MapboxPrimaryManeuver` defaults to using exit signs based on VIENNA convention instead of MUTCD. [#5413](https://github.com/mapbox/mapbox-navigation-android/pull/5413) -- Fixed an issue where `MapboxRoadNameView` would continue to show previous road name in case the current `Road` has no data to show. [#5417](https://github.com/mapbox/mapbox-navigation-android/pull/5417) -- Refactored `Status` class to POJO and decreased its constructor visibility. Introduced `StatusFactory` class for public use. [#5432](https://github.com/mapbox/mapbox-navigation-android/pull/5432) -- Fixed an issue where setting a custom `MapboxRouteLineOptions#vanishingRouteLineUpdateIntervalNano` that happened to be longer than the typical rate of `RouteProgress` updates delivered via `mapboxRouteLineApi#updateWithRouteProgress` would result in the traveled portion of the route not vanishing at all. [#5435](https://github.com/mapbox/mapbox-navigation-android/pull/5435) -- Fixed an issue where `MapboxManeuverView` or `MapboxRoadNameView` displayed wrong shields. [#5426](https://github.com/mapbox/mapbox-navigation-android/pull/5426) -- Updated the turn icons used in Mapbox Android Nav SDK. [#5430](https://github.com/mapbox/mapbox-navigation-android/pull/5430) -- Added `MapboxNavigationApp.isSetup` to ensure views do not reset `MapboxNavigation`. Added `MapboxNavigationApp.getObserver` to be able to access registered observers. [#5358](https://github.com/mapbox/mapbox-navigation-android/pull/5358) -- Refactored maneuver implementation to return a new `Maneuver` instance whenever the data in an existing `Maneuver` object needs to be modified. [#5453](https://github.com/mapbox/mapbox-navigation-android/pull/5453) -- Updated `MapboxManeuverView` / `MapboxRoadNameView` to prefer Mapbox designed shields over legacy ones. [#5445](https://github.com/mapbox/mapbox-navigation-android/pull/5445) -- Fixed `Nav Telemetry` to not run if `Telemetry events` is disabled. [#5455](https://github.com/mapbox/mapbox-navigation-android/pull/5455) -- Updated `MapboxNavigation#provideFeedbackMetadataWrapper` to throw `IllegalStateException` if `Telemetry events` is disabled. [#5455](https://github.com/mapbox/mapbox-navigation-android/pull/5455) -- Fixed an issue where some resource requests dispatched by Nav SDK (namely junction images and shields) were not wired through the same HTTP client instance that can be interacted with using `HttpServiceFactory.getInstance()`. Note: `MapboxSpeechApi` requests are still wired through an independent HTTP client. [#5459](https://github.com/mapbox/mapbox-navigation-android/pull/5459) -- Updated maneuver icons for notifications. [#5449](https://github.com/mapbox/mapbox-navigation-android/pull/5449) -- Fixed an issue where `off-route` was always false if there are no routing tiles available. [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Added a default timeout for `Online` route requests (60 seconds). [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Fixed an issue where an alternative route was equal a current route. [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Added delay before re-attempting to request alternatives in case the first attempt resulted in the deviation point behind the current position. [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Fixed using `POST` for long requests [#5480](https://github.com/mapbox/mapbox-navigation-android/pull/5480) -- (**Correction** - this workaround only actually became available in `v2.4.0-beta.3`) Added a workaround for [`ConnectivityManager`'s occasional security exception on Android 11 and older](https://issuetracker.google.com/issues/175055271). [#5492](https://github.com/mapbox/mapbox-navigation-android/pull/5492) -- Fixed `MapboxNavigationApp` issue, that caused unexpected `MapboxNavigation` destroy, when one of the attached lifecycles is destroyed and the other one is stopped. [#5518](https://github.com/mapbox/mapbox-navigation-android/pull/5518) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0)) -- Mapbox Navigation Native `v88.0.0` -- Mapbox Core Common `v21.1.1` -- Mapbox Java `v6.3.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.3.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.4.0-alpha.1 - February 24, 2022 -### Changelog -[Changes between v2.3.0-rc.3 and v2.4.0-alpha.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.3.0-rc.3...v2.4.0-alpha.1) - -#### Features -- Introduced a `NavigationRoute` object and related functions like `NavigationRouterCallback`, `MapboxNavigation#setNavigationRoutes`, etc. `NavigationRoute` is a domain specific wrapper on top of `DirectionsRoute` which provides information (and enforces its presence) about the original `DirectionsResponse` that this route is part of, as well as what `RouteOptions` were used to generate it. - Most of the Navigation SDK APIs that rely only on `DirectionsRoute` are now marked as `Deprecated` since there might be features introduced in the future that would require the `NavigationRoute` instances instead. - There are `NavigationRoute#toDirectionsRoute()` and `DirectionsRoute#toNavigationRoute()` compatibility extensions available, however, the latter is lossy since `DirectionsRoute` cannot carry as much information as `NavigationRoute` and the recommended migration path is to use `NavigationRouterCallback` instead of the old `RouterCallback` to request routes. - This change might require action when integrating if you have hardcoded routes in your test suites that do not have all necessary fields to support `DirectionsRoute` to `NavigationRoute` mapping (mostly `DirectionsRoute#routeIndex`) - in these cases make sure to provide the missing data or regenerate the routes using `MapboxNavigation#requestRoutes`. - [#5411](https://github.com/mapbox/mapbox-navigation-android/pull/5411) - -#### Bug fixes and improvements -- Added `MapboxNavigationApp.setup` overload, that accepts `NavigationOptionsProvider` instead of prebuilt `NavigationOptions`. [#5490](https://github.com/mapbox/mapbox-navigation-android/pull/5490) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0)) -- Mapbox Navigation Native `v88.0.0` -- Mapbox Core Common `v21.1.1` -- Mapbox Java `v6.4.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.4.0-beta.1)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0-rc.3 - February 24, 2022 -This release is a re-tag of the `v2.3.0-rc.2` to correct the commit which should represent the state of the codebase. There are no functional differences between these releases. -### Changelog -[Changes between v2.3.0-rc.2 and v2.3.0-rc.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.3.0-rc.2...v2.3.0-rc.3) - -#### Bug fixes and improvements -- (**Correction** - this workaround only actually became available in `v2.4.0-beta.3`) Added a workaround for [`ConnectivityManager`'s occasional security exception on Android 11 and older](https://issuetracker.google.com/issues/175055271). [#5492](https://github.com/mapbox/mapbox-navigation-android/pull/5492) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0)) -- Mapbox Navigation Native `v88.0.0` -- Mapbox Core Common `v21.1.1` -- Mapbox Java `v6.3.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.3.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0-rc.2 - February 23, 2022 -### Changelog -[Changes between v2.3.0-rc.1 and v2.3.0-rc.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.3.0-rc.1...v2.3.0-rc.2) - -#### Bug fixes and improvements -- (**Correction** - this workaround only actually became available in `v2.4.0-beta.3`) Added a workaround for [`ConnectivityManager`'s occasional security exception on Android 11 and older](https://issuetracker.google.com/issues/175055271). [#5492](https://github.com/mapbox/mapbox-navigation-android/pull/5492) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0)) -- Mapbox Navigation Native `v88.0.0` -- Mapbox Core Common `v21.1.1` -- Mapbox Java `v6.3.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.3.0)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0-rc.1 - February 17, 2022 - -#### Bug fixes and improvements -- Fixed using `POST` for long requests [#5480](https://github.com/mapbox/mapbox-navigation-android/pull/5480) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0)) -- Mapbox Navigation Native `v88.0.0` -- Mapbox Core Common `v21.1.0` -- Mapbox Java `v6.3.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.3.0-beta.1)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0-beta.3 - February 11, 2022 -### Changelog -[Changes between v2.3.0-beta.2 and v2.3.0-beta.3](https://github.com/mapbox/mapbox-navigation-android/compare/v2.3.0-beta.2...v2.3.0-beta.3) - -#### Bug fixes and improvements -- Added `MapboxNavigationApp.isSetup` to ensure views do not reset `MapboxNavigation`. Added `MapboxNavigationApp.getObserver` to be able to access registered observers. [#5358](https://github.com/mapbox/mapbox-navigation-android/pull/5358) -- Refactored maneuver implementation to return a new `Maneuver` instance whenever the data in an existing `Maneuver` object needs to be modified. [#5453](https://github.com/mapbox/mapbox-navigation-android/pull/5453) -- Updated `MapboxManeuverView` / `MapboxRoadNameView` to prefer Mapbox designed shields over legacy ones. [#5445](https://github.com/mapbox/mapbox-navigation-android/pull/5445) -- Fixed `Nav Telemetry` to not run if `Telemetry events` is disabled. [#5455](https://github.com/mapbox/mapbox-navigation-android/pull/5455) -- Updated `MapboxNavigation#provideFeedbackMetadataWrapper` to throw `IllegalStateException` if `Telemetry events` is disabled. [#5455](https://github.com/mapbox/mapbox-navigation-android/pull/5455) -- Fixed an issue where some resource requests dispatched by Nav SDK (namely junction images and shields) were not wired through the same HTTP client instance that can be interacted with using `HttpServiceFactory.getInstance()`. Note: `MapboxSpeechApi` requests are still wired through an independent HTTP client. [#5459](https://github.com/mapbox/mapbox-navigation-android/pull/5459) -- Updated maneuver icons for notifications. [#5449](https://github.com/mapbox/mapbox-navigation-android/pull/5449) -- Fixed an issue where `off-route` was always false if there are no routing tiles available. [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Added a default timeout for `Online` route requests (60 seconds). [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Fixed an issue where an alternative route was equal a current route. [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) -- Added delay before re-attempting to request alternatives in case the first attempt resulted in the deviation point behind the current position. [#5457](https://github.com/mapbox/mapbox-navigation-android/pull/5457) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0-rc.1)) -- Mapbox Navigation Native `v87.0.5` -- Mapbox Core Common `v21.1.0-rc.1` -- Mapbox Java `v6.3.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.3.0-beta.1)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0-beta.2 - February 2, 2022 -### Changelog -[Changes between v2.3.0-beta.1 and v2.3.0-beta.2](https://github.com/mapbox/mapbox-navigation-android/compare/v2.3.0-beta.1...v2.3.0-beta.2) - -#### Bug fixes and improvements -- Refactored `Status` class to POJO and decreased its constructor visibility. Introduced `StatusFactory` class for public use. [#5432](https://github.com/mapbox/mapbox-navigation-android/pull/5432) -- Fixed an issue where setting a custom `MapboxRouteLineOptions#vanishingRouteLineUpdateIntervalNano` that happened to be longer than the typical rate of `RouteProgress` updates delivered via `mapboxRouteLineApi#updateWithRouteProgress` would result in the traveled portion of the route not vanishing at all. [#5435](https://github.com/mapbox/mapbox-navigation-android/pull/5435) -- Fixed an issue where `MapboxManeuverView` or `MapboxRoadNameView` displayed wrong shields. [#5426](https://github.com/mapbox/mapbox-navigation-android/pull/5426) -- Updated the turn icons used in Mapbox Android Nav SDK. [#5430](https://github.com/mapbox/mapbox-navigation-android/pull/5430) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0-rc.1)) -- Mapbox Navigation Native `v87.0.2` -- Mapbox Core Common `v21.1.0-rc.1` -- Mapbox Java `v6.3.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.3.0-beta.1)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.3.0-beta.1 - January 28, 2022 -#### Features -- Added new `StatusView` component for displaying SDK status messages. [#5403](https://github.com/mapbox/mapbox-navigation-android/pull/5403) - -#### Bug fixes and improvements -- Added options to the `MapboxRouteLineOptions` class to control the icon anchor and icon offset for the route line related waypoint icons including the origin and destination points. [#5409](https://github.com/mapbox/mapbox-navigation-android/pull/5409) -- Fixed an issue where `RouteAlternativesObserver` and `RouteAlternativesRequestCallback` failed to deliver any alternatives due to an unrecognized `"closure"` annotation parameter in the native controller. [#5421](https://github.com/mapbox/mapbox-navigation-android/pull/5421) -- Fixed an issue where a reference to the registered `RouteAlternativesObserver` was not released after unsubscribing or destroying `MapboxNavigation`. [#5421](https://github.com/mapbox/mapbox-navigation-android/pull/5421) -- Improved `RouteAlternativesObserver` to ensure that alternative routes request is fired on each new leg start. [#5421](https://github.com/mapbox/mapbox-navigation-android/pull/5421) -- Added `avoidManeuverSeconds` param to `RouteAlternativesOptions`. [#5394](https://github.com/mapbox/mapbox-navigation-android/pull/5394) -- Fixed an issue found in `v2.3.0-alpha.1` where deprecated fields in `Road` type were always returning `null`s instead of the correct values. [#5396](https://github.com/mapbox/mapbox-navigation-android/pull/5396) -- Fixed an issue where `MapboxPrimaryManeuver` defaults to using exit signs based on VIENNA convention instead of MUTCD. [#5413](https://github.com/mapbox/mapbox-navigation-android/pull/5413) -- Fixed an issue where `MapboxRoadNameView` would continue to show previous road name in case the current `Road` has no data to show. [#5417](https://github.com/mapbox/mapbox-navigation-android/pull/5417) - -## Mapbox Navigation SDK 2.2.1 - January 24, 2022 -### Changelog -[Changes between v2.2.0 and v2.2.1](https://github.com/mapbox/mapbox-navigation-android/compare/v2.2.0...v2.2.1): - -#### Bug fixes and improvements -- Fixed an issue where the _Onboard_ Router (used in offline scenarios) couldn't dispatch routes with tiles versions after and including `2021_12_25-03_00_00`. - -## Mapbox Navigation SDK 2.2.0 - January 20, 2022 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Known issues -- :exclamation: The _Onboard_ Router (used in offline scenarios) can't dispatch routes with tiles versions after and including `2021_12_25-03_00_00`. If a tiles version is left unspecified, Navigation SDK will download the latest version. Therefore, in order to work around this, the tiles version needs to be manually specified to any version before `2021_12_25-03_00_00` (e.g. `2021_02_14-03_00_00`). This can be done specifying the tiles version in the routing tiles options `RoutingTilesOptions#tilesVersion` and adding those options to the navigation options `NavigationOptions#routingTilesOptions`. - -### Changelog -[Changes between v2.1.2 and v2.2.0](https://github.com/mapbox/mapbox-navigation-android/compare/v2.1.2...v2.2.0): - -#### Features -- Added support for Mapbox designed route shields. [#5145](https://github.com/mapbox/mapbox-navigation-android/pull/5145) - - To access the newly introduced `MapboxRouteShieldApi` independently of the `MapboxManeuverApi`, add the dependency to your project: - ``` - implementation "com.mapbox.navigation:ui-shields:{nav_sdk_version}" - ``` -- Added methods in `MapboxRouteLineView` to change the visibility of the route traffic layers. [#5283](https://github.com/mapbox/mapbox-navigation-android/pull/5283) -#### Bug fixes and improvements -- Exposed `ManeuverExitOptions`, `ManeuverPrimaryOptions`, `ManeuverSecondaryOptions`, `ManeuverSubOptions`, `MapboxExitProperties` to define the style for `MapboxPrimaryManeuver`, `MapboxSecondaryManeuver`, `MapboxSubManeuver` and associated `MapboxExitText` for each of these maneuvers. [#5357](https://github.com/mapbox/mapbox-navigation-android/pull/5357) -- Refactored the exit text logic to handle the drawable size based on the size of text associated in `MapboxExitText`. [#5357](https://github.com/mapbox/mapbox-navigation-android/pull/5357) -- Deprecated `MapboxRoadNameLabelView` and introduced `MapboxRoadNameView` to render mapbox designed shields in the current road name label. [#5310](https://github.com/mapbox/mapbox-navigation-android/pull/5310) -- Fixed an issue where calculation of dangerous maneuver avoidance (`RerouteOptions#avoidManeuverSeconds`) during a reroute was resulting in much smaller radius than expected. [#5307](https://github.com/mapbox/mapbox-navigation-android/pull/5307) -- Fixed a crash when `ReplayLocationEngine`'s location callback removes itself during getting a location update. [#5305](https://github.com/mapbox/mapbox-navigation-android/pull/5305) -- Fixed `MapboxTripProgressView` landscape layout to handle `tripProgressViewBackgroundColor` attribute. [#5318](https://github.com/mapbox/mapbox-navigation-android/pull/5318) -- Fixed an issue where the `onPause` is not called when the app is backgrounded and the implementation is using `MapboxNavigationApp.attachAllActivities`. [#5329](https://github.com/mapbox/mapbox-navigation-android/pull/5329) -- Fixed a crash when non-`driving-traffic` profile uses extension `RouteOptions.Builder#applyDefaultNavigationOptions`. [#5322](https://github.com/mapbox/mapbox-navigation-android/pull/5322) -- Refactored extension `RouteOptions.Builder#applyDefaultNavigationOptions`, might be set profile param explicitly. [#5322](https://github.com/mapbox/mapbox-navigation-android/pull/5322) -- Exposed a new API `MapboxManeuverView.updateLaneGuidanceIconStyle` that would allow changing the style of `MapboxLaneGuidanceAdapter` at runtime. [#5334](https://github.com/mapbox/mapbox-navigation-android/pull/5334) -- Fixed a crash when `MapboxNavigationViewportDataSourceDebugger.enabled` is repeatedly set to true. [#5347](https://github.com/mapbox/mapbox-navigation-android/pull/5347) -- Implemented vanishing route line feature from 1.x for exposing an option to adjust/limit the frequency of the vanishing route line updates. The MapboxRouteLineOptions.vanishingRouteLineUpdateIntervalNano can reduce the frequency of vanishing route line updates when the value of the option increases. [#5344](https://github.com/mapbox/mapbox-navigation-android/pull/5344) -- Fixed: crashes and waypoints accumulation during rerouting. [#5261](https://github.com/mapbox/mapbox-navigation-android/pull/5261) -- Added `MapboxDistanceUtil` which moves some of the implementation from `MapboxDistanceFormatter` so that the calculation of the distance rounding and the accompanying text is separated from the SpannableString construction done in `MapboxDistanceFormatter`. [#5182](https://github.com/mapbox/mapbox-navigation-android/pull/5182) -- Switched `targetSdkVersion` to `31`. [#5259](https://github.com/mapbox/mapbox-navigation-android/pull/5259) -- Fixed empty profile in feedback events. [#5256](https://github.com/mapbox/mapbox-navigation-android/pull/5256) -- Added support for orientation changes for granular `LifecycleOwner`s to the `MapboxNavigationApp`. [#5234](https://github.com/mapbox/mapbox-navigation-android/pull/5234) -- Refactored `RouteProgress.voiceInstructions` property to always keep the last value and never become `null`. [#5126](https://github.com/mapbox/mapbox-navigation-android/pull/5126) -- Added `MapboxNavigationApp` and `MapboxNavigationObserver` to handle `MapboxNavigation` lifecycles. [#5112](https://github.com/mapbox/mapbox-navigation-android/pull/5112) -- Added a new object `NavigationStyles` that exposes links to default navigation day and night styles. [#5153](https://github.com/mapbox/mapbox-navigation-android/pull/5153) -- Fixed notification appearance on Android 12.[#5159](https://github.com/mapbox/mapbox-navigation-android/pull/5159) -- Add checkIsLanguageAvailable flag to VoiceInstructionsPlayerOptions. [#5166](https://github.com/mapbox/mapbox-navigation-android/pull/5166) -- Fixed an issue where the origin of new alternative routes was always reported as `Onboard`. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Added support for `include` route request parameter for onboard router. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Added support for `exclude_cash_only_tolls` route request parameter for onboard router. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Fixed issue where off-route might not have been detected on complex overpass roads. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Fixed an issue where toll and motorway route exclusions were not respected for onboard router. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Fixed an issue where `IncidentInfo#id` might've been incorrect when the incident was part of the route response.[#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Added support for `ShieldSprites`, `ShieldSprite` and `ShieldSpriteAttribute` for mapbox designed route shields.[#5184](https://github.com/mapbox/mapbox-navigation-android/pull/5184) -- Exposed a callback for `MapboxNavigation#requestAlternativeRoutes` to track progress of the on-demand alternative routes request.[#5189](https://github.com/mapbox/mapbox-navigation-android/pull/5189) -- Fixed an issue where route request failure (due to incorrect parameters) led to a parsing error and runtime crash instead of failure callback. [#5139](https://github.com/mapbox/mapbox-navigation-android/pull/5139) -- Fixed an issue where reroute controller attempted to add request parameters unsuitable for the selected profile. [#5140](https://github.com/mapbox/mapbox-navigation-android/pull/5140) -- Added `RerouteOptions` to define reroute params for default `RereouteController`. [#5056](https://github.com/mapbox/mapbox-navigation-android/pull/5056) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK v10.2.0 ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.2.0)) -- Mapbox Navigation Native v83.0.0 -- Mapbox Core Common v21.0.1 -- Mapbox Java v6.2.0 ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0)) -- Mapbox Android Core v5.0.1 -- Mapbox Android Telemetry v8.1.1 - -## Mapbox Navigation SDK 2.1.2 - January 18, 2022 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed decoding of OpenLR point along line. [5369](https://github.com/mapbox/mapbox-navigation-android/pull/5369) -- Fixed multi language support in onboard router. [5369](https://github.com/mapbox/mapbox-navigation-android/pull/5369) -- Fixed native memory leak. [5369](https://github.com/mapbox/mapbox-navigation-android/pull/5369) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.2)) -- Mapbox Navigation Native `v79.0.4` -- Mapbox Core Common `v20.0.3` -- Mapbox Java `v6.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.1.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.3.0-alpha.1 - January 14, 2021 - -### Known issues -- The `RouteAlternativesObserver` and `RouteAlternativesRequestCallback` fail to deliver any alternatives due to an unrecognized parameter in the native controller. - -### Changelog -#### Bug fixes and improvements -- Add geo deeplink parsing utility `GeoDeeplinkParser`. [#5103](https://github.com/mapbox/mapbox-navigation-android/pull/5103) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.3.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.3.0-beta.1)) -- Mapbox Navigation Native `v86.0.2` -- Mapbox Core Common `v21.1.0-beta.1` -- Mapbox Java `v6.2.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0-beta.2)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.2.0-rc.1 - January 13, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed an issue where calculation of dangerous maneuver avoidance (`RerouteOptions#avoidManeuverSeconds`) during a reroute was resulting in much smaller radius than expected. [#5307](https://github.com/mapbox/mapbox-navigation-android/pull/5307) -- Fixed a crash when `ReplayLocationEngine`'s location callback removes itself during getting a location update. [#5305](https://github.com/mapbox/mapbox-navigation-android/pull/5305) -- Fixed `MapboxTripProgressView` landscape layout to handle `tripProgressViewBackgroundColor` attribute. [#5318](https://github.com/mapbox/mapbox-navigation-android/pull/5318) -- Fixed an issue where the `onPause` is not called when the app is backgrounded and the implementation is using `MapboxNavigationApp.attachAllActivities`. [#5329](https://github.com/mapbox/mapbox-navigation-android/pull/5329) -- Fixed a crash when non-`driving-traffic` profile uses extension `RouteOptions.Builder#applyDefaultNavigationOptions`. [#5322](https://github.com/mapbox/mapbox-navigation-android/pull/5322) -- Refactored extension `RouteOptions.Builder#applyDefaultNavigationOptions`, might be set profile param explicitly. [#5322](https://github.com/mapbox/mapbox-navigation-android/pull/5322) -- Exposed a new API `MapboxManeuverView.updateLaneGuidanceIconStyle` that would allow changing the style of `MapboxLaneGuidanceAdapter` at runtime. [#5334](https://github.com/mapbox/mapbox-navigation-android/pull/5334) -- Fixed a crash when `MapboxNavigationViewportDataSourceDebugger.enabled` is repeatedly set to true. [#5347](https://github.com/mapbox/mapbox-navigation-android/pull/5347) -- Implemented vanishing route line feature from 1.x for exposing an option to adjust/limit the frequency of the vanishing route line updates. The MapboxRouteLineOptions.vanishingRouteLineUpdateIntervalNano can reduce the frequency of vanishing route line updates when the value of the option increases. [#5344](https://github.com/mapbox/mapbox-navigation-android/pull/5344) -- Fixed `RoadShield` by reverting the breaking changes and use the new shield callback. [#5302](https://github.com/mapbox/mapbox-navigation-android/pull/5302) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.2.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.2.0)) -- Mapbox Navigation Native `v83.0.0` -- Mapbox Core Common `v21.0.1` -- Mapbox Java `v6.2.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0-beta.2)) -- Mapbox Android Core `v5.0.1` -- Mapbox Android Telemetry `v8.1.1` - -## Mapbox Navigation SDK 2.0.5 - January 7, 2022 -This is a patch release on top of `v2.0.x` which does not include changes introduced in `v2.1.x` and later. - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed a small but limitless memory growth when processing location updates. [#5337](https://github.com/mapbox/mapbox-navigation-android/pull/5337) -- Fixed decoding of OpenLR point along line. [#5337](https://github.com/mapbox/mapbox-navigation-android/pull/5337) -- Fixed an issue of falling back to the same version of routing tiles that we are currently on. [#5337](https://github.com/mapbox/mapbox-navigation-android/pull/5337) -- Fixed OOM Exception because of non-limited internal cached of alternative routes. [#5323](https://github.com/mapbox/mapbox-navigation-android/pull/5323) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.2)) -- Mapbox Navigation Native `v69.0.4` -- Mapbox Core Common `v20.0.3` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.2.0-beta.1 - December 17, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added support for Mapbox designed route shields. [#5145](https://github.com/mapbox/mapbox-navigation-android/pull/5145) - - To access the newly introduced `MapboxRouteShieldApi` independently of the `MapboxManeuverApi`, add the dependency to your project: - ``` - implementation "com.mapbox.navigation:ui-shields:{nav_sdk_version}" - ``` -- Added methods in `MapboxRouteLineView` to change the visibility of the route traffic layers. [#5283](https://github.com/mapbox/mapbox-navigation-android/pull/5283) -#### Bug fixes and improvements -- Fixed: crashes and waypoints accumulation during rerouting. [#5261](https://github.com/mapbox/mapbox-navigation-android/pull/5261) -- Added `MapboxDistanceUtil` which moves some of the implementation from `MapboxDistanceFormatter` so that the calculation of the distance rounding and the accompanying text is separated from the SpannableString construction done in `MapboxDistanceFormatter`. [#5182](https://github.com/mapbox/mapbox-navigation-android/pull/5182) -- Bumped `targetSdkVersion` to `31`. [#5259](https://github.com/mapbox/mapbox-navigation-android/pull/5259) -- Fixed empty profile in feedback events. [#5256](https://github.com/mapbox/mapbox-navigation-android/pull/5256) -- Added support for orientation changes for granular `LifecycleOwner`s to the `MapboxNavigationApp`. [#5234](https://github.com/mapbox/mapbox-navigation-android/pull/5234) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.2.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.2.0)) -- Mapbox Navigation Native `v82.0.1` -- Mapbox Core Common `v21.0.1` -- Mapbox Java `v6.2.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0-beta.2)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.1 - December 13, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed billing issue when upgrading Mapbox Maps SDK from v9 to v10. [#5263](https://github.com/mapbox/mapbox-navigation-android/pull/5263) -- Fixed notification appearance on Android 12. [#5159](https://github.com/mapbox/mapbox-navigation-android/pull/5159) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.2)) -- Mapbox Navigation Native `v79.0.3` -- Mapbox Core Common `v20.0.3` -- Mapbox Java `v6.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.1.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.4 - December 13, 2021 -This is a patch release on top of `v2.0.x` which does not include changes introduced in `v2.1.x` and later. - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed billing issue when upgrading Mapbox Maps SDK from v9 to v10. [#5262](https://github.com/mapbox/mapbox-navigation-android/pull/5262) -- Fixed notification appearance on Android 12. [#5159](https://github.com/mapbox/mapbox-navigation-android/pull/5159) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.2)) -- Mapbox Navigation Native `v69.0.3` -- Mapbox Core Common `v20.0.3` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.2.0-alpha.3 - December 10, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Refactored `RouteProgress.voiceInstructions` property to always keep the last value and never become `null`. [#5126](https://github.com/mapbox/mapbox-navigation-android/pull/5126) -- Added `MapboxNavigationApp` and `MapboxNavigationObserver` to handle `MapboxNavigation` lifecycles. [#5112](https://github.com/mapbox/mapbox-navigation-android/pull/5112) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.2.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.2.0-beta.1)) -- Mapbox Navigation Native `v82.0.0` -- Mapbox Core Common `v21.0.0-rc.2` -- Mapbox Java `v6.2.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0-beta.2)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.2.0-alpha.1 - December 3, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added a new object `NavigationStyles` that exposes links to default navigation day and night styles. [#5153](https://github.com/mapbox/mapbox-navigation-android/pull/5153) -- Fixed notification appearance on Android 12.[#5159](https://github.com/mapbox/mapbox-navigation-android/pull/5159) -- Add checkIsLanguageAvailable flag to VoiceInstructionsPlayerOptions. [#5166](https://github.com/mapbox/mapbox-navigation-android/pull/5166) -- Fixed an issue where the origin of new alternative routes was always reported as `Onboard`. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Added support for `include` route request parameter for onboard router. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Added support for `exclude_cash_only_tolls` route request parameter for onboard router. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Fixed issue where off-route might not have been detected on complex overpass roads. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Fixed an issue where toll and motorway route exclusions were not respected for onboard router. [#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Fixed an issue where `IncidentInfo#id` might've been incorrect when the incident was part of the route response.[#5167](https://github.com/mapbox/mapbox-navigation-android/pull/5167) -- Added support for `ShieldSprites`, `ShieldSprite` and `ShieldSpriteAttribute` for mapbox designed route shields.[#5184](https://github.com/mapbox/mapbox-navigation-android/pull/5184) -- Exposed a callback for `MapboxNavigation#requestAlternativeRoutes` to track progress of the on-demand alternative routes request.[#5189](https://github.com/mapbox/mapbox-navigation-android/pull/5189) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.2.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.2.0-beta.1)) -- Mapbox Navigation Native `v81.0.0` -- Mapbox Core Common `v21.0.0-rc.1` -- Mapbox Java `v6.2.0-beta.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0-beta.2)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0 - December 2, 2021 -Mapbox Navigation SDK v2.1.0 was released prematurely with an unresolved billing issue. We deleted this versions from the Maven repository and we’re preparing the v2.1.1 release with additional fixes. - -We strongly recommend not to release your application with v2.1.0. More information will be available in [this announcement](https://github.com/mapbox/mapbox-navigation-android/discussions/5213). - -## Mapbox Navigation SDK 2.0.3 - December 2, 2021 -Mapbox Navigation SDK v2.0.3 was released prematurely with an unresolved billing issue. We deleted this versions from the Maven repository and we’re preparing the v2.0.4 release with additional fixes. - -We strongly recommend not to release your application with v2.0.3. More information will be available in [this announcement](https://github.com/mapbox/mapbox-navigation-android/discussions/5213). - -## Mapbox Navigation SDK 1.6.2 - November 22, 2021 -This is a patch release on top of `v1.x` which does not include changes introduced in `v2.x` and later. - -### Changelog -#### Bug fixes and improvements -- Added `PendingIntent` Android 12 flags support and fixed other Android 12 incompatibilities by upgrading transitive dependencies. [#5142](https://github.com/mapbox/mapbox-navigation-android/pull/5142) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v9.7.1` ([release notes](https://github.com/mapbox/mapbox-gl-native-android/releases/tag/android-v9.7.1)) -- Mapbox Navigation Native `v32.0.0` -- Mapbox Core Common `v9.2.0` -- Mapbox Java `v5.9.0-alpha.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.1)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.2.0-alpha.1 - November 19, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed an issue where route request failure (due to incorrect parameters) led to a parsing error and runtime crash instead of failure callback. [#5139](https://github.com/mapbox/mapbox-navigation-android/pull/5139) -- Fixed an issue where reroute controller attempted to add request parameters unsuitable for the selected profile. [#5140](https://github.com/mapbox/mapbox-navigation-android/pull/5140) -- Added `RerouteOptions` to define reroute params for default `RereouteController`. [#5056](https://github.com/mapbox/mapbox-navigation-android/pull/5056) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.1.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v80.0.2` -- Mapbox Core Common `v20.1.0` -- Mapbox Java `v6.2.0-beta.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.2.0-beta.1)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.2 - November 18, 2021 -This is a patch release on top of `v2.0.x` which does not include changes introduced in `v2.1.x` and later. - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added `PedingIntent` Android 12 flags support. [#5121](https://github.com/mapbox/mapbox-navigation-android/pull/5121) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v69.0.3` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0-rc.2 - November 18, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Trigger RouteAlternativesObserver on main thread. [#5120](https://github.com/mapbox/mapbox-navigation-android/pull/5120) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v79.0.3` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.1.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0-rc.1 - November 12, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added `PedingIntent` Android 12 flags support. [#5105](https://github.com/mapbox/mapbox-navigation-android/pull/5105) -- Fixed an issue where `congestion numeric` traffic annotations where not refreshed correctly. [#5078](https://github.com/mapbox/mapbox-navigation-android/pull/5078) -- Implemented predictive cache with `TilesetDescriptor` so that volatile sources are not loaded unexpectedly. [#5068](https://github.com/mapbox/mapbox-navigation-android/pull/5068) -- Fixed an issue with TTS config on pre-Oreo devices. [#5082](https://github.com/mapbox/mapbox-navigation-android/pull/5082) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v79.0.2` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.1.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.1.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.1 - November 10, 2021 -This is a patch release on top of `v2.0.0` which does not include changes introduced in `v2.1.0-beta.1` and later. The `v2.1.0-beta.2` remains the latest and most up-to-date release. - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Refactored code to update traffic data based on congestion numeric for route refresh API calls. [#5091](https://github.com/mapbox/mapbox-navigation-android/pull/5091/files) -- Implemented predictive cache with `TilesetDescriptor` so that volatile sources are not loaded unexpectedly. Warning: `PredictiveCacheController.createStyleMapControllers` method needs to be used in order to cache only non-volatile sources. [#5089](https://github.com/mapbox/mapbox-navigation-android/pull/5089) -- Fixed a downstream issue of offline routing being slow. [#5093](https://github.com/mapbox/mapbox-navigation-android/pull/5093) -- Fixed toll and motorway exclude params functionality for onboard router. [#5093](https://github.com/mapbox/mapbox-navigation-android/pull/5093) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v69.0.3` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0-beta.2 - November 4, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added missing mutability methods to results returned by the route line API. [#5062](https://github.com/mapbox/mapbox-navigation-android/pull/5062) -- Fixed index out of bounds exception. [#5060](https://github.com/mapbox/mapbox-navigation-android/pull/5060) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v79.0.0` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.1)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0-beta.1 - October 28, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- :warning: The Mapbox Electronic Horizon feature of the Mapbox Navigation SDK is in public beta and is subject to changes, including its pricing. Use of the feature is subject to the beta product restrictions in the Mapbox Terms of Service. Mapbox reserves the right to eliminate any free tier or free evaluation offers at any time and require customers to place an order to purchase the Mapbox Electronic Horizon feature, regardless of the level of use of the feature. [#4985](https://github.com/mapbox/mapbox-navigation-android/pull/4985) -- Removed deprecated method from `RouteOptionsUpdater`. [#4970](https://github.com/mapbox/mapbox-navigation-android/pull/4970) -- Added a new `Road` object that can be obtained thorough `LocationMatcherResult`. [#4972](https://github.com/mapbox/mapbox-navigation-android/pull/4972) -- Added `MapboxRoadNameLabelApi` and `MapboxRoadNameLabelView` to support road name label feature. [#4974](https://github.com/mapbox/mapbox-navigation-android/pull/4974) -- Fixed an issue where the route line's elements (the primary route, alternatives, or the destination symbol) might intermittently not render or not update. [#4983](https://github.com/mapbox/mapbox-navigation-android/pull/4983) -- Added continuous route alternatives. [#4892](https://github.com/mapbox/mapbox-navigation-android/pull/4892) -- Moved `MapboxRouteLineApiExtensions` to a stable `com.mapbox.navigation.ui.maps.route.line` package. [#5001](https://github.com/mapbox/mapbox-navigation-android/pull/5001) -- Fixed spread legacy `reason` when subscribing on routes updated via `RoutesObserver`. [#5006](https://github.com/mapbox/mapbox-navigation-android/pull/5006) -- Removed unused `NavigationOption#isFromNavigationUi` option. [#5019](https://github.com/mapbox/mapbox-navigation-android/pull/5019) -- Updated standalone components, so that they are no longer tied to `MapboxNavigation` lifecycle. Warning: when such a component is no longer in use, its `cancel` or equivalent function should be called in order to avoid leaks. [#5031](https://github.com/mapbox/mapbox-navigation-android/pull/5031) -- Fixed clear `VoiceInstructionsTextPlayer` `currentPlay` when `shutdown`. [#5032](https://github.com/mapbox/mapbox-navigation-android/pull/5032) -- Changed the `iconKeepUpright` parameter for the layer hosting the waypoints is set to `true` to address issue with some custom icons that may be intended to appear like 3D pins. [#5047](https://github.com/mapbox/mapbox-navigation-android/pull/5047) - -#### Known issues -- `RouteAlternativesObserver#onRouteAlternatives` always reports `RouterOrigin` as `Onboard` even if the results are coming from the offboard router. This is can be tracked in [#5127](https://github.com/mapbox/mapbox-navigation-android/issues/5127). -- Taking an alternative route (by turning into it instead of selecting manually) triggers a reroute. This is can be tracked in [#5039](ttps://github.com/mapbox/mapbox-navigation-android/issues/5039). - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v79.0.0` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0 - October 21, 2021 - -Today, we are releasing Navigation SDK (Core & UI components) v2.0 🎉 🚗 🚀 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2, see [Navigation SDK documentation](https://docs.mapbox.com/android/beta/navigation/guides/) and [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Removed unnecessary Sensor APIs. [#5020](https://github.com/mapbox/mapbox-navigation-android/pull/5020) -- Removed unused `NavigationOptions#isFromNavigationUi` option. [#5019](https://github.com/mapbox/mapbox-navigation-android/pull/5019) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v69.0.2` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.8 - October 19, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Moved `MapboxRouteLineApiExtensions` to a stable `com.mapbox.navigation.ui.maps.route.line` package. [#5001](https://github.com/mapbox/mapbox-navigation-android/pull/5001) -- Fixed spread legacy `reason` when subscribing on routes updated via `RoutesObserver`. [#5006](https://github.com/mapbox/mapbox-navigation-android/pull/5006) -- Fixed and issue where after reroute an additional waypoint was added to the new route (equal to the starting point of the original route). [#4999](https://github.com/mapbox/mapbox-navigation-android/pull/4999) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v69.0.2` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.7 - October 15, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- :warning: The Mapbox Electronic Horizon feature of the Mapbox Navigation SDK is in public beta and is subject to changes, including its pricing. Use of the feature is subject to the beta product restrictions in the Mapbox Terms of Service. Mapbox reserves the right to eliminate any free tier or free evaluation offers at any time and require customers to place an order to purchase the Mapbox Electronic Horizon feature, regardless of the level of use of the feature. [#4985](https://github.com/mapbox/mapbox-navigation-android/pull/4985) -- Fixed an issue where the route line's elements (the primary route, alternatives, or the destination symbol) might intermittently not render or not update. [#4983](https://github.com/mapbox/mapbox-navigation-android/pull/4983) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v69.0.1` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.6 - October 14, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Removed deprecated method from `RouteOptionsUpdater::update`. [#4970](https://github.com/mapbox/mapbox-navigation-android/pull/4970) -- Added a new `Road` object that can be obtained thorough `LocationMatcherResult`. [#4972](https://github.com/mapbox/mapbox-navigation-android/pull/4972) -- Changed `RouteOptionsUpdater::update` signature to accept `LocationMatcherResult`. [#4973](https://github.com/mapbox/mapbox-navigation-android/pull/4973) -- Added API and View to support road name label feature. [#4974](https://github.com/mapbox/mapbox-navigation-android/pull/4974) - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v69.0.1` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.5 - October 8, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed an issue, which led to `MapboxReplayer` using wrong coroutine scope. Warning: when `MapboxPlayer` is no longer in use, its `finish` functions should be called in order to avoid leaks. [#4929](https://github.com/mapbox/mapbox-navigation-android/pull/4929) -- Removed hardcoded color references from lane drawables. [#4933](https://github.com/mapbox/mapbox-navigation-android/pull/4933) -- Added callback to MapboxNavigation::navigateNextRouteLeg method. [#4938](https://github.com/mapbox/mapbox-navigation-android/pull/4938) -- Added callback to MapboxNavigation::updateSensorEvent method. [#4938](https://github.com/mapbox/mapbox-navigation-android/pull/4938) -- ⚠️ Hidden unnecesarily exposed RouteLayerConstants and added a new RouteLayerConstants#BOTTOM_LEVEL_ROUTE_LINE_LAYER_ID next to RouteLayerConstants#TOP_LEVEL_ROUTE_LINE_LAYER_ID to help position other map layers in reference to the route line layers stack. [#4941](https://github.com/mapbox/mapbox-navigation-android/pull/4941) -- ⚠️ Changed RouteSetValue to not assume only 2 alternative route lines. The data/expression sources for alternatives are now in a collection form. The API currently only support up to 2 alternative routes but this will be expanded in the future. [#4941](https://github.com/mapbox/mapbox-navigation-android/pull/4941) -- Added utilities to capture and encode screenshots, which are now required when providing feedback. [#4951](https://github.com/mapbox/mapbox-navigation-android/pull/4951) -- Changed `RoutesObserver`: `RoutesUpdatedResult` contains `routes` and `reason`, that provides reason why routes are updated. [#4952](https://github.com/mapbox/mapbox-navigation-android/pull/4952) -- Fixed stop session button no longer working when in Replay mode. [#4954](https://github.com/mapbox/mapbox-navigation-android/pull/4954) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.9` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.9)) -- Mapbox Navigation Native `v68.0.0` -- Mapbox Core Common `v19.0.0` -- Mapbox Java `v6.0.0-alpha.7` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.7)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0-alpha.2 - October 7, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Changed `RoutesObserver`: `RoutesUpdatedResult` contains `routes` and `reason`, that provides reason why routes are updated. [#4862](https://github.com/mapbox/mapbox-navigation-android/pull/4862) -- Added callback to MapboxNavigation::navigateNextRouteLeg method. [#4881](https://github.com/mapbox/mapbox-navigation-android/pull/4881) -- Added callback to MapboxNavigation::updateSensorEvent method. [#4881](https://github.com/mapbox/mapbox-navigation-android/pull/4881) -- Removed logging message that under some conditions could cause an ANR due to the construction of the logging message. [#4900](https://github.com/mapbox/mapbox-navigation-android/pull/4900) -- Added a cancel method to the MapboxRouteLineApi and MapboxRouteLineView classes for cancelling the background tasks. [#4911](https://github.com/mapbox/mapbox-navigation-android/pull/4911) -- :warning: Hidden unnecesarily exposed `RouteLayerConstants` and added a new `RouteLayerConstants#BOTTOM_LEVEL_ROUTE_LINE_LAYER_ID` next to `RouteLayerConstants#TOP_LEVEL_ROUTE_LINE_LAYER_ID` to help position other map layers in reference to the route line layers stack. [#4913](https://github.com/mapbox/mapbox-navigation-android/pull/4913) -- :warning: Changed `RouteSetValue` to not assume only 2 alternative route lines. The data/expression sources for alternatives are now in a collection form. The API currently only support up to 2 alternative routes but this will be expanded in the future. [#4913](https://github.com/mapbox/mapbox-navigation-android/pull/4913) -- Fixed an issue, which led to `MapboxReplayer` using wrong coroutine scope. Warning: when `MapboxPlayer` is no longer in use, its `finish` functions should be called in order to avoid leaks. [#4921](https://github.com/mapbox/mapbox-navigation-android/pull/4921) -- Fixed hard code color references from color drawables. [#4928](https://github.com/mapbox/mapbox-navigation-android/pull/4928) -- Added method in MapboxRouteLineApi to set the road classes, replacing the road classes in the RouteLineResources. [#4939](https://github.com/mapbox/mapbox-navigation-android/pull/4939) -- Added utilities to capture and encode screenshots, which are now required when providing feedback. [#4942](https://github.com/mapbox/mapbox-navigation-android/pull/4942) -- Fixed stop session button no longer working when in Replay mode. [#4953](https://github.com/mapbox/mapbox-navigation-android/pull/4953) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0)) -- Mapbox Navigation Native `v78.0.0` -- Mapbox Core Common `v20.0.0` -- Mapbox Java `v6.0.0-alpha.9` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.9)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.4 - September 30, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added a cancel method to the `MapboxRouteLineApi` and `MapboxRouteLineView` classes for cancelling the background tasks. [#4911](https://github.com/mapbox/mapbox-navigation-android/pull/4911) -- Removed logging message that under some conditions could cause an ANR due to the construction of the logging message. [#4900](https://github.com/mapbox/mapbox-navigation-android/pull/4900) -- Fixed an issue where pausing a free drive session did not extend the session's validity correctly. [#4912](https://github.com/mapbox/mapbox-navigation-android/pull/4912) -- Fixed an issue where both `navmaus` and `nav2sesmau` SKUs could be counted when using Nav SDK v2. [#4912](https://github.com/mapbox/mapbox-navigation-android/pull/4912) -- Fixed compatibility issues with 32-bit devices that could've resulted in incorrect location updates. [#4919](https://github.com/mapbox/mapbox-navigation-android/pull/4919) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.9` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.9)) -- Mapbox Navigation Native `v68.0.0` -- Mapbox Core Common `v19.0.0` -- Mapbox Java `v6.0.0-alpha.7` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.7)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.1.0-alpha.1 - September 24, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Exposed `MapboxNavigation#getZLevel` that can be used with `RouteOptions#layers` to influence the layer of the road from where the route starts. [#4800](https://github.com/mapbox/mapbox-navigation-android/pull/4800) [#4849](https://github.com/mapbox/mapbox-navigation-android/pull/4849) -- Exposed a reusable route geometry cache via `DecodeUtils`. [#4784](https://github.com/mapbox/mapbox-navigation-android/pull/4784) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.8` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.8)) -- Mapbox Navigation Native `v66.0.3` -- Mapbox Core Common `v18.0.0` -- Mapbox Java `v6.0.0-alpha.7` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.7)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.3 - September 24, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog - -#### Bug fixes and improvements -- :warning: Exposed include-hov/hot parameters in `RouteOptions`. [#4894](https://github.com/mapbox/mapbox-navigation-android/pull/4894) -- :warning: Added `exclude` list option. [#4894](https://github.com/mapbox/mapbox-navigation-android/pull/4894) -- :warning: Removed unnecessary `RouteExclusions` `exclude` extension. [#4894](https://github.com/mapbox/mapbox-navigation-android/pull/4894) -- Increased location tolerance for vanishing route line updates. This resolves rare occasions where the vanishing route line portion would briefly stop updating. [#4888](https://github.com/mapbox/mapbox-navigation-android/pull/4888) -- Added `MapboxNavigation#provideFeedbackMetadataWrapper`: provides metadata to post a deffered feedback [#4889](https://github.com/mapbox/mapbox-navigation-android/pull/4889) -- Added `FeedbackMetadata`: holds data that might be used to post a deferred user's feedback. [#4889](https://github.com/mapbox/mapbox-navigation-android/pull/4889) -- Added `FeedbackMetadataWrapper`: wraps `FeedbackMetadata` and collect additional information to inflate one. [#4889](https://github.com/mapbox/mapbox-navigation-android/pull/4889) -- Added to overloaded `MapboxNavigation#postUserFeedback` with param `feedbackMetadata: FeedbackMetadata?` [#4889](https://github.com/mapbox/mapbox-navigation-android/pull/4889) -- :warning: Renamed `MapMatcherResult` to `LocationMatcherResult` [#4886](https://github.com/mapbox/mapbox-navigation-android/pull/4886) -- :warning: Merged `LocationObserver` and `MapMatcherResultObserver` interfaces into single `LocationObserver` interface [#4886](https://github.com/mapbox/mapbox-navigation-android/pull/4886) -- :warning: Refactored turn lane api and logic to handle more lane combinations. [#4885](https://github.com/mapbox/mapbox-navigation-android/pull/4885) -- Bug fix for calculating traffic on route line multi-leg routes. [#4883](https://github.com/mapbox/mapbox-navigation-android/pull/4883) -- Added `MapboxNavigation.startReplayTripSession` which allows you to use MapboxReplayer after `MapboxNavigation` has been created. [#4843](https://github.com/mapbox/mapbox-navigation-android/pull/4843) -- Added `MapboxTurnIconsApi` for retrieving turn icon drawables [#4864](https://github.com/mapbox/mapbox-navigation-android/pull/4864) -- Bug fix for traffic expressions using soft gradients. [#4866](https://github.com/mapbox/mapbox-navigation-android/pull/4866) -- Fixed an issue where restricted road sections layer was not re-added to the map when drawing data if it was previously manually removed. [#4861](https://github.com/mapbox/mapbox-navigation-android/pull/4861) -- Made route line, route arrow, and building highlighting layers persistent which means that they will survive style changes automatically, without needing to be manually redrawn. This also removes any sort of flickering of the route line when a map style changes. [#4861](https://github.com/mapbox/mapbox-navigation-android/pull/4861) -- :warning: Removed `RouteOptionsUpdater` interface, renamed `MapboxRouteOptionsUpdater` to `RouteOptionsUpdater` [#4852](https://github.com/mapbox/mapbox-navigation-android/pull/4852) -- Fixed an issue where banner instructions were missing after restarting trip session with the same route [#4851](https://github.com/mapbox/mapbox-navigation-android/pull/4851) -- Fixed the issue with music volume not restored after stopping voice instructions playback [#4899](https://github.com/mapbox/mapbox-navigation-android/pull/4899) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.8` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.8)) -- Mapbox Navigation Native `v66.0.3` -- Mapbox Core Common `v18.0.0` -- Mapbox Java `v6.0.0-alpha.7` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.7)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.2.1 - September 21, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog - -#### Bug fixes and improvements -- Fixed `IndexOutOfBoundsException` in `MapboxRouteLineUtils` [4860](https://github.com/mapbox/mapbox-navigation-android/pull/4860) -- Fixed native out of range crash [4869](https://github.com/mapbox/mapbox-navigation-android/pull/4869) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.8` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.8)) -- Mapbox Navigation Native `v66.0.3` -- Mapbox Core Common `v18.0.0` -- Mapbox Java `v6.0.0-alpha.6` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.6)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.2 - September 16, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added `FeedbackHelper` with utilities for working with feedback types and subtypes. [4813](https://github.com/mapbox/mapbox-navigation-android/pull/4813) - -#### Bug fixes and improvements -- Fixed an issue where the route was never refreshed because of an internal timer not starting when a new route was set. [#4831](https://github.com/mapbox/mapbox-navigation-android/pull/4831) -- When downloading critical tiles, the Map tiles are preferred over Routing tiles to ensure that the map is visible as soon as possible. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- Fixed an issue where `offRoute` and `BannerInstructions` states were not immediately reset after setting a new route. [#4810](https://github.com/mapbox/mapbox-navigation-android/pull/4810) -- :warning: Renamed `FeedbackEvent.Description` annotation to `FeedbackEvent.SubType`. [4813](https://github.com/mapbox/mapbox-navigation-android/pull/4813) -- Updated `Lane` UI component to handle more use cases with lane combinations. [4815](https://github.com/mapbox/mapbox-navigation-android/pull/4815) [#4820](https://github.com/mapbox/mapbox-navigation-android/pull/4820) -- :warning: Deprecated all matching methods that accept a single object in the `RoadObjectMatcher` in favor of methods that accept a list of matchable objects. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- Fixed an issue when location could be map-matched to a wrong, nearby road near intersections. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- Fixed an issue when occasionally there would be an off-route event emitted when leaving a tunnel. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- Fixed an issue where location and progress updates could be skipped when resetting the session with `MapboxNavigation#resetTripSession`. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- Fixed an issue with the wrong speed limit being returned around an off-route event. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- Fixed an issue where EHorizon would sometimes report road objects that were already passed. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) -- :warning: Fixed an issue where separate legs of a route were not counted as separate trips. [#4821](https://github.com/mapbox/mapbox-navigation-android/pull/4821) - -#### Other changes -- :warning: Removed `MapboxNavigation#retrieveSsmlAnnouncementInstruction`. It did not work correctly and if you plan to introduce a voice cache manually, look for `LegStep#voiceInstructions` in the `RouteLeg` of a `DirectionsRoute`. [#4826](https://github.com/mapbox/mapbox-navigation-android/pull/4826) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.8` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.8)) -- Mapbox Navigation Native `v66.0.1` -- Mapbox Core Common `v18.0.0` -- Mapbox Java `v6.0.0-alpha.6` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.6)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-rc.1 - September 09, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -- :exclamation: Introduced new pricing options. Integrating this or a later version of the Navigation SDK will impact the way you are billed. Read more in our [Pricing Documentation](https://docs.mapbox.com/android/beta/navigation/guides/pricing/). [#4666](https://github.com/mapbox/mapbox-navigation-android/pull/4666) -- :warning: `MapboxNavigation` now enforces having only one instance alive in a process, a new instance cannot be created if there's another one that did not have `#onDestroy` called. Use `MapboxNavigationProvider` for assistance with instance management. [#4666](https://github.com/mapbox/mapbox-navigation-android/pull/4666) - -#### Features -- :warning: The implementation for representing restricted roads with a dashed line has been updated to support better scaling at various zoom levels. The customization options for this feature have been updated as well in `MapboxRouteLineOptions`. [#4773](https://github.com/mapbox/mapbox-navigation-android/pull/4773) -- :warning: There's now a `RouteLayerConstants.TOP_LEVEL_ROUTE_LINE_LAYER_ID` string ID which can be used to position other map layers on top of all route line layers produced by the `MapboxRouteLineView`. [#4773](https://github.com/mapbox/mapbox-navigation-android/pull/4773) - -#### Bug fixes and improvements -- Fixed an issue where navigation notification could show partial data with wrong visuals. [#4792](https://github.com/mapbox/mapbox-navigation-android/pull/4792) -- Updated feedback events for _Free Drive_ and _Active Guidance_. [#4794](https://github.com/mapbox/mapbox-navigation-android/pull/4794) -- Fixed an occasional crash that occurred when trying to parse `BannerInstructions` by referencing `BannerView` from native implementation rather than doing it from the current step using index from nav native. [#4795](https://github.com/mapbox/mapbox-navigation-android/pull/4795) -- Fixed a crash in `MapboxSpeechFileProvider` when OS clears the cache directory while an app is running. [#4790](https://github.com/mapbox/mapbox-navigation-android/pull/4790) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.7` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.7)) -- Mapbox Navigation Native `v65.0.2` -- Mapbox Core Common `v17.1.0` -- Mapbox Java `v6.0.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.25 - September 03, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added an option to display a gradient between the colors representing traffic congestion on the route line. See `MapboxRouteLineOptions#displaySoftGradientForTraffic`. [#4752](https://github.com/mapbox/mapbox-navigation-android/pull/4752) -- Added an option to select the initial leg when setting a route with `MapboxNavigation#setRoutes`. [#4739](https://github.com/mapbox/mapbox-navigation-android/pull/4739) -- Added `MapboxNavigation#requestAlternativeRoutes` that allows requesting alternative routes on-demand. [#4774](https://github.com/mapbox/mapbox-navigation-android/pull/4774) -- :warning: Added support for `ANNOTATION_CONGESTION_NUMERIC` to style the congestion on a route line. This also renamed some of the `RouteLineColorResources` methods, for example, `routeModerateColor` has been updated to `routeModerateCongestionColor`. [#4778](https://github.com/mapbox/mapbox-navigation-android/pull/4778) - -#### Bug fixes and improvements -- :warning: Replaced `AnimatorListener` argument of `NavigationCamera#request[state]` functions with `TransitionEndListener`, which is now invoked even if the camera is already in or transitioning to the requested state. [#4771](https://github.com/mapbox/mapbox-navigation-android/pull/4771) -- Refactored the internal logic in `MapboxBuildingsApi` to read the location point from route's `waypoint_target`s. If not available it falls back to the points in the coordinates list. [#4767](https://github.com/mapbox/mapbox-navigation-android/pull/4767) -- :warning: `RouteOptions.Builder.applyDefaultNavigationOptions` extension now uses `ANNOTATION_CONGESTION_NUMERIC` by default, instead of `ANNOTATION_CONGESTION`. -- Fixed an issue where all E-Horizon tunnel names had prepended "1" string. [#4785](https://github.com/mapbox/mapbox-navigation-android/pull/4785) -- Fixed an issue where traffic line, or the whole route line, could sometimes disappear and required a significant camera zoom level change to show up again. [#4789](https://github.com/mapbox/mapbox-navigation-android/pull/4789) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.7` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.7)) -- Mapbox Navigation Native `v65.0.1` -- Mapbox Core Common `v17.1.0` -- Mapbox Java `v6.0.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.24 - August 27, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Exposed a `withForegroundService` parameter for `MapboxNavigation#startTripSession` that allows for running a session without a foreground service. [#4730](https://github.com/mapbox/mapbox-navigation-android/pull/4730) -- Added possibility to push feedback in FreeDrive mode. [#4693](https://github.com/mapbox/mapbox-navigation-android/pull/4693) - -#### Bug fixes and improvements -- Added logging of updated legs for successful route refresh. [#4734](https://github.com/mapbox/mapbox-navigation-android/pull/4734) -- Fixed an issue where `RouteProgress#distanceTraveled` was reported incorrectly for multi-leg routes. [#4749](https://github.com/mapbox/mapbox-navigation-android/pull/4749) -- Fixed stuck TTS queue when deprecated onError is called. [#4746](https://github.com/mapbox/mapbox-navigation-android/pull/4746) -- Fixed an occasional crash when setting a new route while on a non-initial leg of the previous route. [#4755](https://github.com/mapbox/mapbox-navigation-android/pull/4755) -- Fixed an internal memory leak so RAM consumption should be greatly reduced. [#4759](https://github.com/mapbox/mapbox-navigation-android/pull/4759) -- Added logging of metadata for successful directions response. [#4761](https://github.com/mapbox/mapbox-navigation-android/pull/4761) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: -- Mapbox Maps SDK `v10.0.0-rc.7` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.7)) -- Mapbox Navigation Native `v64.0.0` -- Mapbox Core Common `v17.1.0` -- Mapbox Java `v6.0.0-alpha.4` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.4)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.9.5 - Aug 24, 2021 -This is a patch release on top of `v2.0.0-beta.9.x` which does not include changes introduced in `v2.0.0-beta.10` and later. The `v2.0.0-beta.23` remains the latest and most up-to-date release. - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Reduced memory footprint (both incremental and the peak). [#4740](https://github.com/mapbox/mapbox-navigation-android/pull/4740) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) -- Mapbox Navigation Native `v48.0.8` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.23 - August 20, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added option to set custom text for `Recenter`, `Sound`, and `RouteOverview` buttons. [#4703](https://github.com/mapbox/mapbox-navigation-android/pull/4703) -- Introduced `MapboxBuildingsApi` and `MapboxBuildingView` that would be responsible to query a building on a map given a point and render it using the view. [#4704](https://github.com/mapbox/mapbox-navigation-android/pull/4704) -- Added optional `EventsAppMetadata` field to `NavigationOptions`. [#4712](https://github.com/mapbox/mapbox-navigation-android/pull/4712) -- Exposed `NavigationSessionState` and `NavigationSessionStateObserver`. [#4712](https://github.com/mapbox/mapbox-navigation-android/pull/4712) -- Exposed lane icon drawables with `MapboxLaneIconsApi`. [#4729](https://github.com/mapbox/mapbox-navigation-android/pull/4729) -- Added `SubgraphLocation` for `RoadObject`. [#4731](https://github.com/mapbox/mapbox-navigation-android/pull/4731) -- Added `roadSurface` property to `EHorizonEdgeMetadata`. [#4733](https://github.com/mapbox/mapbox-navigation-android/pull/4733) - -#### Bug fixes and improvements -- Fixed a bug when after a route is set `RouteAlternativesController` started to request alternative routes with no observers. [#4706](https://github.com/mapbox/mapbox-navigation-android/pull/4706) -- Fixed an issue with an occasional `ArrayindexOutOfBoundsException` being thrown when setting a new route. [#4714](https://github.com/mapbox/mapbox-navigation-android/pull/4714) -- Fixed a bug when NavSDK crashed on unknown `RoadObjectLocation`. [#4731](https://github.com/mapbox/mapbox-navigation-android/pull/4731) -- Removed `MapboxBuildingHighlightApi` and `MapboxBuildingArrivalApi`. [#4704](https://github.com/mapbox/mapbox-navigation-android/pull/4704) -- Removed `Snapshotter` feature and it's related public facing apis, views and examples. [#4711](https://github.com/mapbox/mapbox-navigation-android/pull/4711) -- Removed `AppMetadata` from `MapboxNavigation.postUserFeedback`. [#4712](https://github.com/mapbox/mapbox-navigation-android/pull/4712) - -## Mapbox Navigation SDK 2.0.0-beta.22 - August 12, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added feedback event for incorrect speed limit [#4694](https://github.com/mapbox/mapbox-navigation-android/pull/4694) -- Added option to set custom background and text color for `Recenter`, `Sound`, and `RouteOverview` buttons. [#4697](https://github.com/mapbox/mapbox-navigation-android/pull/4697) -- Added `Gate` object that represents information about a particular exit or entrance. [#4692](https://github.com/mapbox/mapbox-navigation-android/pull/4692) - -#### Bug fixes and improvements -- Refactored the `MapboxTripNotification` to use same set of turn icons as `ManeuverView` does. [#4683](https://github.com/mapbox/mapbox-navigation-android/pull/4683) -- :warning: Removed paint code generated files. [#4683](https://github.com/mapbox/mapbox-navigation-android/pull/4683) -- Changed the roundabout drawables for maneuvers and notifications. [#4700](https://github.com/mapbox/mapbox-navigation-android/pull/4700) -- Changed `RoadObjectDistanceInfo.distanceToStart` to nullable. [#4692](https://github.com/mapbox/mapbox-navigation-android/pull/4692) -- Updated `PolygonDistanceInfo` and `SubGraphDistanceInfo` to include `entrances` and `exits`. [#4692](https://github.com/mapbox/mapbox-navigation-android/pull/4692) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.6` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.6)) -- Mapbox Navigation Native `v62.0.0` -- Mapbox Core Common `v16.2.0` -- Mapbox Java `v6.0.0-alpha.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.2)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.21 - July 28, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added `BuildingHighlightObserver` for exposing map data used to highlight a building. Add example showing extrude all building along with a highlighted one. [#4420](https://github.com/mapbox/mapbox-navigation-android/pull/4420) -- :warning: Removed `accessToken` from `RouteOptions`, the token provided via `NaivgationOptions` is now always used for route requests. This also simplifies serialization and deserialization of route objects. Refs [`mapbox-java` `v6.0.0-alpha2`](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.2). [#4670](https://github.com/mapbox/mapbox-navigation-android/pull/4670) -- Added geometry to `Maneuver` object. [#4653](https://github.com/mapbox/mapbox-navigation-android/pull/4653) - - Exposed `Factory` to allow developers to create `Maneuver` object. - - Added `Point` as another argument to `Maneuver` -- Removed access token from `MapboxHistoryReader`. [#4667](https://github.com/mapbox/mapbox-navigation-android/pull/4667), [#4670](https://github.com/mapbox/mapbox-navigation-android/pull/4670) - - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.4)) -- Mapbox Navigation Native `v59.0.0` -- Mapbox Core Common `v16.1.0` -- Mapbox Java `v6.0.0-alpha.2` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.2)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.20 - July 22, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added option to `MapboxRouteLineOptions` to visually differentiate inactive route legs for multi-leg routes. A callback was added to `MapboxRouteLineApi::updateWithRouteProgress`. The result of the callback should be rendered by the `MapboxRouteLineView` class. [#4489](https://github.com/mapbox/mapbox-navigation-android/pull/4489) - -#### Bug fixes and improvements -- :warning: Removed `RouteRefreshOptions#enabled`. To enable the route refresh feature (that updates congestion and other annotations on the currently active route) you need to enable it via `RouteOptions#enableRefresh` when making a route request. [#4655](https://github.com/mapbox/mapbox-navigation-android/pull/4655) -- Refactored `MapboxSpeechApi`s to make them non-cancelling. [#4646](https://github.com/mapbox/mapbox-navigation-android/pull/4646) -- Fixed an issue where `Tunnel#length` information was missing for some of the tunnels. [#4656](https://github.com/mapbox/mapbox-navigation-android/pull/4656) -- Use `HistoryReader` for navigation replay. :warning: `mapbox-java` `v6.0.0-alpha.1` brought new features but also some breaking changes to `DirectionsRoute` and `MapboxDirections` objects that impact replay. Read more about the changes in the [release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.1). [#4601](https://github.com/mapbox/mapbox-navigation-android/pull/4601) - - Delete `ReplayHistoryDTO` in favor of `MapboxHistoryReader`. - - Add `eventTimestamp` to all `HistoryEvent` classes. - - Delete `CustomEventMapper` in favor of `ReplayHistoryEventMapper`. - - Create new `ReplayHistoryMapper` which is extendable and customizable. -- :warning: Upgraded `mapbox-java` to `v6.0.0-alpha.1` which brings new features but also some breaking changes to `DirectionsRoute` and `MapboxDirections` objects. Read more about the changes in the [release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.1). [#4526](https://github.com/mapbox/mapbox-navigation-android/pull/4526) -- Added `RouterOrigin` which indicates where a route was fetched from. [#4639](https://github.com/mapbox/mapbox-navigation-android/pull/4639) - - Added `RouterOrigin` param to: - - `RouterCallback#onRoutesReady` method; - - `RouterCallback#onCanceled` method; - - `RouterFailure` class; - - `RerouteState.RouteFetched` class; - - `RouteAlternativesObserver#onRouteAlternatives` method. -- Updated assets and resources translations. [#4647](https://github.com/mapbox/mapbox-navigation-android/pull/4647) -- The initialization of the route line related layers is always a synchronous call. [#4631](https://github.com/mapbox/mapbox-navigation-android/pull/4631) -- Bug fix for invalid `FeatureCollection` objects derived from routes that have less than two coordinates. [#4638](https://github.com/mapbox/mapbox-navigation-android/pull/4638) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.4` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.4)) -- Mapbox Navigation Native `v59.0.0` -- Mapbox Core Common `v16.1.0` -- Mapbox Java `v6.0.0-alpha.1` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.0.0-alpha.1)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.19 - July 15, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Exposed `ManeuverOptions#filterDuplicateManeuvers` which allows to filter out `Maneuver`s that point to the same actual turn from the presented lists. This parameter defaults to `true`. [#4583](https://github.com/mapbox/mapbox-navigation-android/pull/4583) - -#### Bug fixes and improvements -- Fixed an issue where the `MapboxNavigationViewportDataSource` could produce an unexpected update when the same route was provided more than once, for example, during a route refresh update. [#4586](https://github.com/mapbox/mapbox-navigation-android/pull/4586) -- :warning: Changed `MapboxDistanceFormatter`'s package from `com.mapbox.navigation.core.internal.formatter` to `com.mapbox.navigation.core.formatter`, making it stable. [#4608](https://github.com/mapbox/mapbox-navigation-android/pull/4608) -- :warning: Changed `MapboxManeuverApi#getManeuvers(route, callback, routeLeg)` to `MapboxManeuverApi#getManeuvers(route, callback, routeLegIndex)` to provide better support for various scenarios. This also fixed a bug where `MapboxManeuverApi` was not producing any more updates after the original route's annotations were refreshed. [#4607](https://github.com/mapbox/mapbox-navigation-android/pull/4607) -- :warning: Removed `ManevuerCallback` since it was called back synchronously anyway. `MapboxManeuverApi#getManeuvers` returns the results directly now. [#4609](https://github.com/mapbox/mapbox-navigation-android/pull/4609) -- Minor performance improvements in the drawing of the route line. Laying out traffic on top of the route is now decoupled from drawing the route itself, which decreases the time in which the core of the route line is first visible. [#4292](https://github.com/mapbox/mapbox-navigation-android/pull/4292) -- Fixed a `ConcurrentModificationException` that could occasionally be thrown when `PredictiveCacheController` was used and the connectivity changed between online/offline. [#4605](https://github.com/mapbox/mapbox-navigation-android/pull/4605) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.3)) -- Mapbox Navigation Native `v57.0.0` -- Mapbox Core Common `v14.2.0` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.9.4 - Jul 14, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Added ability to restore from "backwards snapping" issue: set `noRouteLength` to 150m. [#4610](https://github.com/mapbox/mapbox-navigation-android/pull/4610) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) -- Mapbox Navigation Native `v48.0.7` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.18 - July 9, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Deleted `MapboxHistoryRecorder.saveHistory` in favor of `MapboxHistoryRecorder.stopRecording`. [#4587](https://github.com/mapbox/mapbox-navigation-android/pull/4587) -- Added `MapboxHistoryRecorder.startRecording` and `MapboxHistoryRecorder.pushHistory`. [#4587](https://github.com/mapbox/mapbox-navigation-android/pull/4587) -- :warning: Removed auto enabled history recording from `HistoryRecorderOptions`. [#4587](https://github.com/mapbox/mapbox-navigation-android/pull/4587) -- :warning: Removed `RouteRequestCallback` and `Router.Callback` in favor of a single `RouterCallback` with improved failure reason accessibility. [#4577](https://github.com/mapbox/mapbox-navigation-android/pull/4577) - -#### Bug fixes and improvements -- Fixed stack overflow error that could happen when `NavigationCamera` state transitions were canceled while running on some Android API levels (definitely 21-24 and maybe more). [#4575](https://github.com/mapbox/mapbox-navigation-android/pull/4575) -- Fixed an issue where navigation might crash with OutOfMemory error. [#4587](https://github.com/mapbox/mapbox-navigation-android/pull/4587) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.3` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.3)) -- Mapbox Navigation Native `v56.0.0` -- Mapbox Core Common `v14.2.0` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.17 - July 2, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added missing `IncidentInfo` properties: `countryCodeAlpha2`, `countryCodeAlpha3`, `lanesBlocked`, `longDescription`, `lanesClearDesc`, `numLanesBlocked`. [#4569](https://github.com/mapbox/mapbox-navigation-android/pull/4569) -- :warning: Refactored `MapboxManeuverApi` to return a list of maneuvers asynchronously without the road shields and either for a raw route reference or for route progress. See `MapboxManeuverApi#getManeuvers` and `MapboxManeuverView#renderManeuvers` for details. [#4482](https://github.com/mapbox/mapbox-navigation-android/pull/4482) -- Refactored road shield downloader to make it more efficient. [#4482](https://github.com/mapbox/mapbox-navigation-android/pull/4482) -- Added options to the `RouteArrowOptions` class for customizing the scaling expressions used for maneuver arrows. [#4551](https://github.com/mapbox/mapbox-navigation-android/pull/4551) -- Added new `HistoryEvent`: `HistoryEventPushHistoryRecord` allows read events set with **type**-**properties** structure. [#4567](https://github.com/mapbox/mapbox-navigation-android/pull/4567) -- :warning: Added new APIs to request and render road shields asynchronously, see `MapboxManeuverApi#getRoadShields` and `MapboxManeuverView#renderManeuverShields` for details. Shields are not automatically downloaded anymore to allow for more granular and faster initial updates. [#4482](https://github.com/mapbox/mapbox-navigation-android/pull/4482) -- Exposed `RouteStepProgress#instructionIndex` that indicates which instruction out of the list of instructions for a step is the currently active one. [#4482](https://github.com/mapbox/mapbox-navigation-android/pull/4482) -- :warning: Refactored `PredictiveCacheController` to handle multiple map instances, add the ability to filter sources to cache. [#4539](https://github.com/mapbox/mapbox-navigation-android/pull/4539) - - `fun setMapInstance(map: MapboxMap)` is replaced with `fun addMapInstance(map: MapboxMap, sourceIdsToCache: List)` to allow for more granular caching configuration and support multiple map instances at the same time. - - `fun removeMapInstance()` is replaced with `fun removeMapInstance(map: MapboxMap)`. - - `predictiveCacheLocationOptions: PredictiveCacheLocationOptions` is moved from `NavigationOptions` to `PredictiveCacheController`. - - Note: the map instance has to be configured with the same `TileStore` instance that was provided to `RoutingTilesOptions.tileStore` to best support predictive caching and offline features. - -#### Bug fixes and improvements -- Fixed a bug where in some cases status updates were not generated after switching between offline and online states. [#4558](https://github.com/mapbox/mapbox-navigation-android/pull/4558) -- Fixed an issue where `RouteOptions` weren't appended to onboard router results which could've caused incorrect reroutes that missed silent waypoints or other waypoint modifiers. [#4563](https://github.com/mapbox/mapbox-navigation-android/pull/4563) -- Refactored dependency of `libnavui-resources` by changing from api to implementation. [#4568](https://github.com/mapbox/mapbox-navigation-android/pull/4568) -- :warning: `RouteProgress#bannerInstructions` does not become `null` and keeps its reference for as long as a step is active. Listen to `BannerInstructionsObserver` if you need a specific timing event when the banner first appears. [#4482](https://github.com/mapbox/mapbox-navigation-android/pull/4482) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.2)) -- Mapbox Navigation Native `v55.0.0` -- Mapbox Core Common `v14.0.1` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.1.0` - -## Mapbox Navigation SDK 2.0.0-beta.16 - June 24, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Navigation SDK now respects the `OfflineSwitch` and will not make resource requests if the `setMapboxStackConnected` is set to `false`, it will use cached resources and immediately fallback to local generation of routes, even if connectivity is available. [#4529](https://github.com/mapbox/mapbox-navigation-android/pull/4529) -- `RoadObjectMatcher` API changed. Added `cancelAll()` func, added `onMatchingCancelled(id: String)` callback to a `RoadObjectMatcherListener`, `cancel(roadObjectIds: List)` handles a list of ids, not a single one. [#4542](https://github.com/mapbox/mapbox-navigation-android/pull/4542) -- Migrated to callback-based native getStatus approach. [#4419](https://github.com/mapbox/mapbox-navigation-android/pull/4419) -- Removed `routeGeometryWithBuffer` from `RouteProgress`. [#4419](https://github.com/mapbox/mapbox-navigation-android/pull/4419) -- :warning: Internal `setUnconditionalPollingPatience` and `setUnconditionalPollingInterval` have been moved to `InternalUtils` `object` and have to be called _before_ `MapboxNavigation` is instantiated to actually take effect. [#4419](https://github.com/mapbox/mapbox-navigation-android/pull/4419) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.2` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.2)) -- Mapbox Navigation Native `v54.0.0` -- Mapbox Core Common `v14.0.1` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.0.0` - -## Mapbox Navigation SDK 2.0.0-beta.9.3 - Jun 23, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fixed onboard router issue not supporting multiple exclude parameters. [#4534](https://github.com/mapbox/mapbox-navigation-android/pull/4534) -- When traversing routes that wrap around behind the vehicle (e.g.: cloverleafs and circular on-ramps) the zoom level is now held constant. [#4468](https://github.com/mapbox/mapbox-navigation-android/pull/4468) -- Restored an option to display restricted sections of a route on the route line. The option is included in the `MapboxRouteLineOptions` as `displayRestrictedRoadSections()`. The option is false by default indicating the restricted section will not be visible on the route line. [#4501](https://github.com/mapbox/mapbox-navigation-android/pull/4501) -- Navigation SDK now respects the `NetworkConnectivity` settings and will not make resource request if the `setMapboxStackConnected` is set to `false`, it will use cached resources and immediately fallback to local generation of routes, even if connectivity is available. [#4529](https://github.com/mapbox/mapbox-navigation-android/pull/4529) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) -- Mapbox Navigation Native `v48.0.6` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.15 - June 18, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -* Fixed a bug in `RouteOptionsUpdater` where `snappingClosures` were not taken into account when making a reroute request. [4503](https://github.com/mapbox/mapbox-navigation-android/pull/4503) -* Fixed missing `Gantry` objects in `ElectronicHorizon`. [#4518](https://github.com/mapbox/mapbox-navigation-android/pull/4518) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-rc.1` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-rc.1)) -- Mapbox Navigation Native `v53.0.1` -- Mapbox Core Common `v14.0.1` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v5.0.0` -- Mapbox Android Telemetry `v8.0.0` - -## Mapbox Navigation SDK 2.0.0-beta.14 - June 11, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -* :warning: Removed `ArrivalOptions` in favor of triggering when the `RouteProgress.currentState` is equal to `RouteProgressState.COMPLETE`. You can use `RouteProgress` to implement custom arrival behavior based on time or distance. [4459](https://github.com/mapbox/mapbox-navigation-android/pull/4459) -* :warning: Removed `MapboxNavigation#toggleHistory` in favor of `HistoryRecorderOptions` (found in the `NavigationOptions`), `MapboxHistoryRecorder`, `MapboxHistoryReader` for saving and reading native history files. [4488](https://github.com/mapbox/mapbox-navigation-android/pull/4488) -* When traversing routes that wrap around behind the vehicle (e.g.: cloverleafs and circular on-ramps) the zoom level is now held constant by the `MapboxNavigationViewportDataSource`. [4468](https://github.com/mapbox/mapbox-navigation-android/pull/4468) - -#### Known issues -When using this release, the merged Manifest comes with an unnecessary `WRITE_SETTINGS` permission declaration. You can ignore that permission and not request it or add this to your Manifest file as a workaround: -``` - -``` -This permission declaration will be removed in future releases. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.20` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.20)) -- Mapbox Navigation Native `v51.0.0` -- Mapbox Core Common `v12.0.0` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v4.0.2` -- Mapbox Android Telemetry `v7.0.3` - -## Mapbox Navigation SDK 2.0.0-beta.13 - June 4, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -* Removed `getRouteGeometryWithBuffer` API from `RouteProgress`. [#4478](https://github.com/mapbox/mapbox-navigation-android/pull/4478) -* Removed the `updatePrimaryRoute` method from the `MapboxRouteLineApi` class. Instead, `MapboxRouteLineApi::setRoutes` should be used. The first `DirectionsRoute` in the collection will be considered the primary route. [#4467](https://github.com/mapbox/mapbox-navigation-android/pull/4467) -* Added NavigationVersionSwitchObserver which enables listening to navigation tiles version switch. [#4451](https://github.com/mapbox/mapbox-navigation-android/pull/4451) -* Added missing `@JvmOverloads` to `MapboxNavigation#postUserFeedback` API. [#4472](https://github.com/mapbox/mapbox-navigation-android/pull/4472) -* Fixed an issue where routing tiles were not downloading correctly if the `TileStore` instance was not provided and `mapbox_access_token` string resource was not present. This was resulting in a lack of free drive events and location enhancement failures. [#4464](https://github.com/mapbox/mapbox-navigation-android/pull/4464) -* Removed `com.mapbox.navigation.ui.base.model.Expected` in favor of `com.mapobox.bindgen.Expected`. [#4463](https://github.com/mapbox/mapbox-navigation-android/pull/4463) - -#### Known issues -:warning: `MapboxNavigation` history recording APIs `retrieveHistory`, `toggleHistory` and `addHistoryEvent` are no-op in this release. [#4478](https://github.com/mapbox/mapbox-navigation-android/pull/4478) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.20` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.20)) -- Mapbox Navigation Native `v51.0.0` -- Mapbox Core Common `v12.0.0` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v4.0.2` -- Mapbox Android Telemetry `v7.0.3` - -## Mapbox Navigation SDK 2.0.0-beta.9.2 - May 28, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -* When setting routes with the `MapboxRouteLineApi`, if the primary route hasn't changed the traffic will be recalculated while the state of the vanishing route line will remain unchanged. [#4444](https://github.com/mapbox/mapbox-navigation-android/pull/4444) -* Fixed an issue where the route refresh request wasn't respecting `RouteOptions#baseUrl`. [#4427](https://github.com/mapbox/mapbox-navigation-android/pull/4427) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) -- Mapbox Navigation Native `v48.0.5` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.12 - May 27, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -* When setting routes with the `MapboxRouteLineApi`, if the primary route hasn't changed the traffic will be recalculated while the state of the vanishing route line will remain unchanged. [#4444](https://github.com/mapbox/mapbox-navigation-android/pull/4444) -* Fixed an issue where the route refresh request wasn't respecting `RouteOptions#baseUrl`. [#4427](https://github.com/mapbox/mapbox-navigation-android/pull/4427) -* Fixed logic to show roundabout for left-side driving. The icons are now correctly flipped. [#4445](https://github.com/mapbox/mapbox-navigation-android/pull/4445) - -#### Known issues -When using this release, the merged Manifest comes with an unnecessary `WRITE_SETTINGS` permission declaration. You can ignore that permission and not request it or add this to your Manifest file as a workaround: -``` - -``` -This permission declaration will be removed in future releases. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.20` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.20)) -- Mapbox Navigation Native `v50.0.0` -- Mapbox Core Common `v12.0.0` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v4.0.2` -- Mapbox Android Telemetry `v7.0.3` - -## Mapbox Navigation SDK 2.0.0-beta.11 - May 21, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* Added `TileStore` to the `RoutingTilesOptions` [#4408](https://github.com/mapbox/mapbox-navigation-android/pull/4408) -* Added ability to periodically observe route alternatives. [#4375](https://github.com/mapbox/mapbox-navigation-android/pull/4375) -* Deleted `FasterRouteObserver` in favor of `RouteAlternativesObserver` and `RouteAlternativesOptions`. [#4375](https://github.com/mapbox/mapbox-navigation-android/pull/4375) -* Exposed `com.mapbox.bindgen.Expected#fold`, `com.mapbox.bindgen.Expected#map`, and other mapping functions. [#4417](https://github.com/mapbox/mapbox-navigation-android/pull/4417) -* Removed `Expected ExpectedFactory#createValue()` and replaced it with `Expected ExpectedFactory#createNone()` which means that value can never be `null` and improves consumption from Kotlin. [#4417](https://github.com/mapbox/mapbox-navigation-android/pull/4417) -* Removed `RouteProgressState.ROUTE_INVALID`. `RouteProgress` will never be delivered with an invalid update, besides `RouteProgressState.OFF_ROUTE`. [#4391](https://github.com/mapbox/mapbox-navigation-android/pull/4391) - -#### Bug fixes and improvements -* Hardened arrival events to trigger only when `RouteProgressState` is `ROUTE_COMPLETE` or `LOCATION_TRACKING` to avoid cases where we are uncertain/stale/rerouting but still reporting arrival. [#4392](https://github.com/mapbox/mapbox-navigation-android/pull/4392) -* Converted SAM interfaces into Functional (SAM) interfaces [#4406](https://github.com/mapbox/mapbox-navigation-android/pull/4406) -* Swapped the `com.mapbox.bindgen.Expected` generic params from `` to `` to match platform conventions. [#4417](https://github.com/mapbox/mapbox-navigation-android/pull/4417) -* Fixed either show sub banner or lane guidance. [#4413](https://github.com/mapbox/mapbox-navigation-android/pull/4413) -* Fixed the race condition in `RouteRefreshController` where `setRoute` will not cancel old refresh requests. [#4421](https://github.com/mapbox/mapbox-navigation-android/pull/4421) -* Fixed rotation angle to 0 on `MapboxManeuverTurnIcon` for regular turns. [#4423](https://github.com/mapbox/mapbox-navigation-android/pull/4423) -* Changed terminology used for route arrow border for correctness and consistency. [#4428](https://github.com/mapbox/mapbox-navigation-android/pull/4428) -* Removed the `ROUTE_` prefix from `RouteProgressState` values and updated the documentation. [#4391](https://github.com/mapbox/mapbox-navigation-android/pull/4391) -* Moved the `RouteProgressState.LOCATION_STALE` to `RouteProgress.stale`. [#4391](https://github.com/mapbox/mapbox-navigation-android/pull/4391) - -#### Known issues -When using this release, the merged Manifest comes with an unnecessary `WRITE_SETTINGS` permission declaration. You can ignore that permission and not request it or add this to your Manifest file as a workaround: -``` - -``` -This permission declaration will be removed in future releases. - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.20` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.20)) -- Mapbox Navigation Native `v50.0.0` -- Mapbox Core Common `v12.0.0` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v4.0.2` -- Mapbox Android Telemetry `v7.0.2` - -## Mapbox Navigation SDK 2.0.0-beta.10 - May 12, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* Added `RoadObjectMatcher`. ([#4364](https://github.com/mapbox/mapbox-navigation-android/pull/4364)) -* Added ability to change the text appearance for primary, secondary and total step distance of upcoming maneuver instructions. ([#4378](https://github.com/mapbox/mapbox-navigation-android/pull/4378)) -* Added params to `VoiceInstructionsPlayerOptions`. ([#4373](https://github.com/mapbox/mapbox-navigation-android/pull/4373)) -* Added a parser that parses svg to bitmap for signboards. ([#4335](https://github.com/mapbox/mapbox-navigation-android/pull/4335)) -* Introduced `MapboxExternalFileResolver` that helps you to resolve fonts for signboards. You can now inject your own resolver as well if you don't wish to use the default. ([#4335](https://github.com/mapbox/mapbox-navigation-android/pull/4335)) - -#### Bug fixes and improvements -- Refactored `TilesetDescriptorFactory`. ([#4364](https://github.com/mapbox/mapbox-navigation-android/pull/4364)) -- Updated `EHorizon` API and refactored `RoadObject`: - - Moved all `EHorizon` and `RoadObject` **`data classes`** to `base` module. ([#4364](https://github.com/mapbox/mapbox-navigation-android/pull/4364)) - - Made all the constructors `internal`. ([#4364](https://github.com/mapbox/mapbox-navigation-android/pull/4364)) - - Exposed `RoadObjectInstaceFactory` and `EHorizonInstanceFactory` that lives under an `internal` package in the `base` module, which is only there for the `core` module to access it. ([#4364](https://github.com/mapbox/mapbox-navigation-android/pull/4364)) -* :warning: Requesting a route via `MapboxNavigation#requestRoutes` does not automatically append any defaults. Defaults are now available under these extensions: - - `RouteOptions.Builder.applyDefaultNavigationOptions()` that applies the options that are required for the route request to execute or otherwise recommended for the Navigation SDK and all of its features to provide the best car navigation experience. - - `RouteOptions.Builder.applyLanguageAndVoiceUnitOptions(context: Context)` that applies the options that adapt the returned instructions' language and voice unit based on the device's `Locale`. -The extensions are very much recommended to be called when building the `RouteOptions` object and then tweaked for a specific use case. ([#4320](https://github.com/mapbox/mapbox-navigation-android/pull/4320)) -* Changed `VoiceInstructionsPlayerAttributes` to `sealed class`. ([#4373](https://github.com/mapbox/mapbox-navigation-android/pull/4373)) -* Bug fix for calculating mutli-leg routes with traffic congestion changes or restrictions at the first point of a route leg. ([#4383](https://github.com/mapbox/mapbox-navigation-android/pull/4383)) -* `MapboxSignboardAPI` now returns `Bitmap` instead of `ByteArray`. ([#4335](https://github.com/mapbox/mapbox-navigation-android/pull/4335)) -* `MapboxJunctionAPI` now returns `Bitmap` instead of `ByteArray`. ([#4335](https://github.com/mapbox/mapbox-navigation-android/pull/4335)) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) -- Mapbox Navigation Native `v49.0.1` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.9.1 - May 12, 2021 - - For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - - ### Changelog - #### Bug fixes and improvements - * Bug fix for calculating mutli-leg routes with traffic congestion changes or restrictions at the first point of a route leg. [#4383](https://github.com/mapbox/mapbox-navigation-android/pull/4383) - - ### Mapbox dependencies - This release depends on, and has been tested with, the following Mapbox dependencies: - - - Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) - - Mapbox Navigation Native `v48.0.5` - - Mapbox Core Common `v11.0.2` - - Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) - - Mapbox Android Core `v3.1.1` - - Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.9 - May 7, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -- Added uncertain location puck drawable. [#4358](https://github.com/mapbox/mapbox-navigation-android/pull/4358) -- Made `PlayerAttributes` an abstract class. [#4365](https://github.com/mapbox/mapbox-navigation-android/pull/4365) - -#### Bug fixes and improvements -- Changed restricted roads to be represented as part of the traffic line and will vanish along with the rest of the line when the vanishing route line feature is enabled. [#4360](https://github.com/mapbox/mapbox-navigation-android/pull/4360) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.19` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.19)) -- Mapbox Navigation Native `v48.0.5` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.8 - April 30, 2021 - - For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - - ### Changelog - #### Features - * Refactored `AudioFocusDelegate` to a public interface and is now optional to `MapboxVoiceInstructionsPlayer`. `MediaPlayer` stream type can now be customized and results of audio focus can now be handled. [#4278](https://github.com/mapbox/mapbox-navigation-android/pull/4278) - * Made route refresh interval configurable. [#4321](https://github.com/mapbox/mapbox-navigation-android/pull/4321) - * Exposed `NavigationCameraTransitionOptions` via `NavigationCamera` state requests. Those options provide high-level constraints for all of the transitions that `NavigationCamera` executes and can be used to, for example, adjust the duration of the transitions. [#4332](https://github.com/mapbox/mapbox-navigation-android/pull/4332) - #### Bug fixes and improvements - * Removed `@JvmOverloads` from all Mapbox Views. [#4323](https://github.com/mapbox/mapbox-navigation-android/pull/4323) - * Changed where the `MapboxNavigationViewportDataSourceDebugger`'s debug layer is positioned on the map. By default, the layer will be placed on top of the stack unless a reference ID is provided. This prevents a crash that was occurring if the previously hardcoded layer ID wasn't present in the style. [#4334](https://github.com/mapbox/mapbox-navigation-android/pull/4334) - * Fixed replay's simulated driver issue where it will nearly stop on the freeway, by normalizing bearing for speed profile calculations. [#4338](https://github.com/mapbox/mapbox-navigation-android/pull/4338) - * Fixed an issue where the user location was incorrectly positioned in the center of the screen in the following state when the pitch was zero, `maximizeViewableRouteGeometryWhenPitchZero` was set, and no other points were available for framing. Now the user location is correctly tied to the bottom edge of the padding if that's the only geometry to frame. The flag was also renamed to `maximizeViewableGeometryWhenPitchZero`. [#4343](https://github.com/mapbox/mapbox-navigation-android/pull/4343) - - ### Mapbox dependencies - This release depends on, and has been tested with, the following Mapbox dependencies: - - - Mapbox Maps SDK `v10.0.0-beta.18` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.18)) - - Mapbox Navigation Native `v48.0.5` - - Mapbox Core Common `v11.0.2` - - Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) - - Mapbox Android Core `v3.1.1` - - Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.7 - April 23, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* Expose TilesetDescriptorFactory [#4283](https://github.com/mapbox/mapbox-navigation-android/pull/4283) -* Add building highlight on arrival [#4078](https://github.com/mapbox/mapbox-navigation-android/pull/4078) -* Add EHorizon isOneWay property [#4295](https://github.com/mapbox/mapbox-navigation-android/pull/4295) -#### Bug fixes and improvements -* Bug fix for route line related concurrent modification of collection. [#4298](https://github.com/mapbox/mapbox-navigation-android/pull/4298) -* Made route reference checks more robust in the `MapboxNavigationViewportDataSource` and improved logs to avoid situations where a route reference is mismatched and could produce incorrect frames or crash. [#4302](https://github.com/mapbox/mapbox-navigation-android/pull/4302) -* Map `ResourceOptions` contains tile store instance (TileStore API). Tile store usage is enabled by default, `ResourceOptions.tileStoreEnabled` flag is introduced to disable it. This changed the integration with the `PredictiveCacheControler` which contains update integration docs. [#4310](https://github.com/mapbox/mapbox-navigation-android/pull/4310) -* Removed Timber across SDK [#4300](https://github.com/mapbox/mapbox-navigation-android/pull/4300) -* Fixed an issue with the `NavigationCamera` occasionally spinning around when a transition to a state (typically `overview`) finished. [#4293](https://github.com/mapbox/mapbox-navigation-android/pull/4293) -* Fixed an issue with the `NavigationCamera` transitions occasionally finishing at an incorrect visual target. This could occur when a gesture interaction with the map preceded the transition. See [mapbox-maps-android/issues/277](https://github.com/mapbox/mapbox-maps-android/issues/277) for details and workarounds. [#4296](https://github.com/mapbox/mapbox-navigation-android/pull/4296) -* Introduced `MapboxNavigationViewportDataSourceOptions.overviewFrameOptions.geometrySimplification` which by default simplifies the route geometry used for overview framing by a factor of 25 to improve performance of frame generation, especially for longer routes. [#4286](https://github.com/mapbox/mapbox-navigation-android/pull/4286) - -### Mapbox dependencies -This release depends on, and has been tested with, the following Mapbox dependencies: - -- Mapbox Maps SDK `v10.0.0-beta.18` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/android-v10.0.0-beta.18)) -- Mapbox Navigation Native `v48.0.4` -- Mapbox Core Common `v11.0.2` -- Mapbox Java `5.9.0-alpha.5` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v5.9.0-alpha.5)) -- Mapbox Android Core `v3.1.1` -- Mapbox Android Telemetry `v6.2.2` - -## Mapbox Navigation SDK 2.0.0-beta.6 - April 16, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* Added a callback to the `ArrivalObserver` specifically for waypoint experiences. [#4238](https://github.com/mapbox/mapbox-navigation-android/pull/4238) - -#### Bug fixes and improvements -* Refactored the route line API to improve performance. [#4271](https://github.com/mapbox/mapbox-navigation-android/pull/4271) -* Significantly changed the way how the `MapboxNavigationViewportDataSource` generates the camera frames that are later animated by the `NavigationCamera`. You can read more about details in the `MapboxNavigationViewportDataSource` class documentation. [#4072](https://github.com/mapbox/mapbox-navigation-android/pull/4072) -Highlights: - - When in the `FOLLOWING` state, the first point of the framed geometry will be placed at the bottom edge of the provided padding, centered horizontally. This typically refers to the user's location provided to the viewport data source, if available. - - **If you use the `MapboxNavigationViewportDataSource`, you should explicitly define `CameraOptions.padding` in all other camera transitions that your app is executing.** - - New features: - - calculating zoom level based on intersection density - - automatic pitching to 0 near maneuvers - - maximizing the view of the maneuver's geometry in pitch 0 - - bearing smoothing based on the direction to the upcoming maneuver - - `MapboxNavigationViewportDataSourceDebugger` for visualizing frames and geometries -* Fixed a bug for restricted road sections not getting cleared when calling API. [#4254](https://github.com/mapbox/mapbox-navigation-android/pull/4254) -* Set `TilesConfig` `inMemoryTileCache` size to 1GB (1024 x 1024 x 1024). [#4272](https://github.com/mapbox/mapbox-navigation-android/pull/4272) -* Fixed crash when routing new waypoints. [#4263](https://github.com/mapbox/mapbox-navigation-android/pull/4263) -* Added check if `RouteOptions` has valid UUID to refresh route. [#4260](https://github.com/mapbox/mapbox-navigation-android/pull/4260) -* Updated `ArrivalObserver` making the `onWaypointArrival` and `onFinalDestinationArrival` callbacks consistent, and can be specified through the `ArrivalController` as `ArrivalOptions`. [#4250](https://github.com/mapbox/mapbox-navigation-android/pull/4250) - -## Mapbox Navigation SDK 1.6.1 - April 14, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -- :warning: Changed `DynamicCamera`'s default tilt and zoom constraints to improve performance and readability of the map when in active navigation. [#4262](https://github.com/mapbox/mapbox-navigation-android/pull/4262) - -## Mapbox Navigation SDK 1.6.0 - April 14, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -- Added additional route overview method to NavigationMapboxMap to display section of route not yet traveled rather than the full route. [#4247](https://github.com/mapbox/mapbox-navigation-android/pull/4247) - -#### Bug fixes and improvements -- Show maneuver icon and text in the notification tray after changing b/w day and night mode. [#4256](https://github.com/mapbox/mapbox-navigation-android/pull/4256) -- Bug fix for restoring route line on map when bringing application into foreground just after a reroute. [#4236](https://github.com/mapbox/mapbox-navigation-android/pull/4236) - -## Mapbox Navigation SDK 2.0.0-beta.5 - April 9, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* :warning: Changed `MapboxNavigation#requestRoutes` to **not** automatically set the result as the primary route for the navigation experience. When calling `MapboxNavigation#requestRoutes` make sure to also call `MapboxNavigation#setRoutes` with a result. This change allows for dispatching and managing multiple route requests concurrently, including cancelling with `MapboxNavigation#cancelRouteRequest`. [#4184](https://github.com/mapbox/mapbox-navigation-android/pull/4184) -* Exposed `MapboxSoundButton`. [#4117](https://github.com/mapbox/mapbox-navigation-android/pull/4117) -* Exposed `MapboxRecenterButton`. [#4226](https://github.com/mapbox/mapbox-navigation-android/pull/4226) -* Added support for signboard styling based on the stylesheet. See `MapboxSignboardOptions`. [#4217](https://github.com/mapbox/mapbox-navigation-android/pull/4217) -* Added length, startGeometryIndex, endGeometryIndex to `entrance`/`exit` road objects when the source is the Directions API. [#4235](https://github.com/mapbox/mapbox-navigation-android/pull/4235) -* :warning: Expanded `RouteArrowApi` functionality to include ability to add (and remove) multiple arrows to a map which also changes the method signatures. [#3980](https://github.com/mapbox/mapbox-navigation-android/pull/3980) -* Added support for the composite sources in the `PredictiveCacheController`. [#4241](https://github.com/mapbox/mapbox-navigation-android/pull/4241) - -#### Bug fixes and improvements -* Significantly improved the rendering time of the route line and the time to select an alternative. [#4244](https://github.com/mapbox/mapbox-navigation-android/pull/4244) [#4222](https://github.com/mapbox/mapbox-navigation-android/pull/4222) [#4209](https://github.com/mapbox/mapbox-navigation-android/pull/4209) -* :warning: Made `UnitType` in `MapboxDistanceFormatter` type-safe. [#4224](https://github.com/mapbox/mapbox-navigation-android/pull/4224) - -## Mapbox Navigation SDK 2.0.0-beta.4 - April 1, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* Added option to display road closures on the route traffic line. [#4215](https://github.com/mapbox/mapbox-navigation-android/pull/4215) -* Added option in `RouteLineResources` to enable the display of restricted road sections of the route line. The restriction related color option is in `RouteLineColorResources`. [#4148](https://github.com/mapbox/mapbox-navigation-android/pull/4148) -* Added multiple exclusion criteria and notification of exclusion violations. [#4195](https://github.com/mapbox/mapbox-navigation-android/pull/4195) - -#### Bug fixes and improvements -* Improved documentation for the suggested `MapboxRouteLineOptions.Builder#withRouteLineBelowLayerId` value. [#4202](https://github.com/mapbox/mapbox-navigation-android/pull/4202) -* Fixed bearings calculation on reroute. [#4169](https://github.com/mapbox/mapbox-navigation-android/pull/4169) -* Added `suspend` and callback versions of some methods in the `MapboxRouteLineApi` class. [#4106](https://github.com/mapbox/mapbox-navigation-android/pull/4106) -* Split `TunnelEntrance` and `RestrictedArea` alerts, made `RoadObjects` info values non-null. [#4162](https://github.com/mapbox/mapbox-navigation-android/pull/4162) - -#### Known issues -**When integrating this release, you might run into a crash on startup caused by cached data incompatibility. To resolve the issue, clear the application cache.** - -## Mapbox Navigation SDK 1.5.1 - March 31, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -- Fixed speed limit. [#4143](https://github.com/mapbox/mapbox-navigation-android/pull/4143) -- Added default text placeholder to `TripNotification` view. [#4156](https://github.com/mapbox/mapbox-navigation-android/pull/4156) -- Fixed `TripNotification` view to always show `Stop Session` label. [#4173](https://github.com/mapbox/mapbox-navigation-android/pull/4173) -- Fixed bearings calculation on reroute. [#4199](https://github.com/mapbox/mapbox-navigation-android/pull/4199) - -## Mapbox Navigation SDK 2.0.0-beta.3 - March 26, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Features -* Implemented Guidance Views. See `MapboxJunctionApi` and `MapboxJunctionView` for details. [#4157](https://github.com/mapbox/mapbox-navigation-android/pull/4157) -* Added `SnappingClosures` param to route request builder. [#4161](https://github.com/mapbox/mapbox-navigation-android/pull/4161) - -#### Bug fixes and improvements -* Added text placeholder for TripNotification View. [#4160](https://github.com/mapbox/mapbox-navigation-android/pull/4160) -* Fixed bug with missing annotations in reroute/faster route. [#4171](https://github.com/mapbox/mapbox-navigation-android/pull/4171) -* Changed the timing of the Navigation Camera's transition to the `Following` state to improve the zoom-in relation to the centering animation. [#4175](https://github.com/mapbox/mapbox-navigation-android/pull/4175) - -#### Other changes -* Added an example to show custom styling. [#4178](https://github.com/mapbox/mapbox-navigation-android/pull/4178) - -#### Known issues -**When integrating this release, you might run into a crash on startup caused by cached data incompatibility. To resolve the issue, clear the application cache.** - -## Mapbox Navigation SDK 2.0.0-beta.2 - March 19, 2021 - -For details on how v2 differs from v1 and guidance on migrating from v1 of the Mapbox Navigation SDK for Android to the v2 public preview, see [2.0 Navigation SDK Migration Guide](https://github.com/mapbox/mapbox-navigation-android/wiki/2.0-Navigation-SDK-Migration-Guide). - -### Changelog -#### Bug fixes and improvements -- Fix the issue that origin icon and destination icons are same. [#4115](https://github.com/mapbox/mapbox-navigation-android/pull/4115) -- Fixes maneuver list cut in landscape mode. [#4124](https://github.com/mapbox/mapbox-navigation-android/pull/4124) -- Refactor signboard and alter api. [#4125](https://github.com/mapbox/mapbox-navigation-android/pull/4125) -- Fixes using the incorrect color the traveled route line casing. [#4128](https://github.com/mapbox/mapbox-navigation-android/pull/4128) -- Added scaling options for the alternative route lines in the RouteLineResources class. [#4129](https://github.com/mapbox/mapbox-navigation-android/pull/4129) -- Refactor snapshotter. [#4132](https://github.com/mapbox/mapbox-navigation-android/pull/4132) -- Exposed option to override alternative route color based on route identifier. [#4137](https://github.com/mapbox/mapbox-navigation-android/pull/4137) -- Refactored Voice module to use `MapboxNavigationConsumer` generic callback. [#4138](https://github.com/mapbox/mapbox-navigation-android/pull/4138) -- Refactored moved nav-native -> SDK type mapping and `roadobject` models to core module. [#4141](https://github.com/mapbox/mapbox-navigation-android/pull/4141) -- Introduce route overview button. [#4142](https://github.com/mapbox/mapbox-navigation-android/pull/4142) -- Fix logical error in speed limit view. [#4143](https://github.com/mapbox/mapbox-navigation-android/pull/4143) -- Fixed banner instruction and route progress mismatch when in multi-leg scenarios. [#4154](https://github.com/mapbox/mapbox-navigation-android/pull/4154) - -## Mapbox Navigation SDK 1.5.0 - March 13, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -- Improved logic to select turn lanes. [#4006](https://github.com/mapbox/mapbox-navigation-android/pull/4006) -- Changed `SpeechPlayerProvider`: constructor deprecated, builder added, `focusGain` param added. [#4052](https://github.com/mapbox/mapbox-navigation-android/pull/4052) -- Fixed Route refresh: refresh alternative route when selected. [#4056](https://github.com/mapbox/mapbox-navigation-android/pull/4056) - -## Mapbox Navigation SDK 1.5.0-alpha.2 - February 19, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -- Fixed `RouteProgress#route` which didn't have its congestion annotations updated after a route refresh. [#4031](https://github.com/mapbox/mapbox-navigation-android/pull/4031) -- Fixed `RouteProgerss#route` which always returned a primary route even if an alternative was selected. [#4031](https://github.com/mapbox/mapbox-navigation-android/pull/4031) - -## Mapbox Navigation SDK 1.5.0-alpha.1 - February 12, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Added auto-choosing the latest tiles version. [3931](https://github.com/mapbox/mapbox-navigation-android/pull/3931) -* Added Nav-Native SDK version to `TileEndpointConfiguration`. [3918](https://github.com/mapbox/mapbox-navigation-android/pull/3918) - -#### Bug fixes and improvements -* Fixed the Route Refresh feature which was failing on each request due to parser incompatibilities. [3986](https://github.com/mapbox/mapbox-navigation-android/pull/3986) -* Changed the default routing tiles version to `2021_01_24-03_00_00`. [3933](https://github.com/mapbox/mapbox-navigation-android/pull/3933) -* Updated default routing tiles version to `2021_01_30-03_00_00`. [3929](https://github.com/mapbox/mapbox-navigation-android/pull/3929) -* Added check for arrow head icon height and width to prevent reported crash. [3922](https://github.com/mapbox/mapbox-navigation-android/pull/3922) -* Fixed stop trip session issue. [3919](https://github.com/mapbox/mapbox-navigation-android/pull/3919) - -## Mapbox Navigation SDK 1.4.0 - January 20, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -* Removed the `ACCESS_BACKGROUND_LOCATION` permission requirement. [3913](https://github.com/mapbox/mapbox-navigation-android/pull/3913) - -## Mapbox Navigation SDK 1.4.0-rc.1 - January 13, 2021 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -* Fixed MapboxRouteOptionsUpdater: IndexOutOfBoundsException with 'bearings' combining. [#3899](https://github.com/mapbox/mapbox-navigation-android/pull/3899) -* Fixed FeedbackFlow to skip Detailed Screen when detailed items aren't presented. [#3882](https://github.com/mapbox/mapbox-navigation-android/pull/3882) -* Removed misleading min size annotation for addRoutes method and updated the documentation. [#3877](https://github.com/mapbox/mapbox-navigation-android/pull/3877) - -## Mapbox Navigation SDK 1.3.0 - December 17, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Added `onFeedbackFlowFinished` method to `FeedbackFlowListener`. [3850](https://github.com/mapbox/mapbox-navigation-android/pull/3850) -* Exposed an option for the user to provide an arrival experience feedback when the navigation session is finished. See `NavigationFeedbackOptions` for `NavigationView` integration and `FeedbackArrivalFragment` for standalone. [3758](https://github.com/mapbox/mapbox-navigation-android/pull/3758) -* Exposed APIs to support caching user feedback events. [3724](https://github.com/mapbox/mapbox-navigation-android/pull/3724) - -#### Bug fixes and improvements -* Fixed Exception `Resource not found` when using `FeedbackDetailsFragment`. [3842](https://github.com/mapbox/mapbox-navigation-android/pull/3842) -* Updated the detailed feedback flow to request additional information in a form after arrival instead of immediately when feedback is reported. See `NavigationFeedbackOptions` for `NavigationView` integration and `FeedbackDetailsFragment` for standalone. [3758](https://github.com/mapbox/mapbox-navigation-android/pull/3758) - -## Mapbox Navigation SDK 1.4.0-beta.1 - December 17, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes and improvements -* Fixed maneuver view so that shows a generic roundabout icon if there's no angle data. [#3867](https://github.com/mapbox/mapbox-navigation-android/pull/3867) -* Fixed rerouting and requesting faster routes when silent waypoints are present. The waypoints are now persisted and not dropped. [#3581](https://github.com/mapbox/mapbox-navigation-android/pull/3581) - -## Mapbox Navigation SDK 1.3.0-alpha.5 - December 9, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Exposed GeoJsonOptions#withTolerance param for route line sources. [3819](https://github.com/mapbox/mapbox-navigation-android/pull/3819) -* Added speedLimit to MapMatcher. [3839](https://github.com/mapbox/mapbox-navigation-android/pull/3839) -* Added `onFeedbackFlowFinished` method to `FeedbackFlowListener`. [3850](https://github.com/mapbox/mapbox-navigation-android/pull/3850) - -#### Bug fixes and improvements -* Updated assets and resources translations. [3856](https://github.com/mapbox/mapbox-navigation-android/pull/3856) -* Updated default routing tiles version to `2020_12_05-03_00_00`. [3857](https://github.com/mapbox/mapbox-navigation-android/pull/3857) - -## Mapbox Navigation SDK 1.3.0-alpha.4 - December 2, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Added an option in NavigationOptions for enable/disable route refresh. [3709](https://github.com/mapbox/mapbox-navigation-android/pull/3709) - -#### Bug fixes and improvements -* Fixed Exception `Resource not found` when using `FeedbackDetailsFragment`. [3842](https://github.com/mapbox/mapbox-navigation-android/pull/3842) - -## Mapbox Navigation SDK 1.3.0-alpha.3 - November 27, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Updated the detailed feedback flow to request additional information in a form after arrival instead of immediately when feedback is reported. See `NavigationFeedbackOptions` for `NavigationView` integration and `FeedbackDetailsFragment` for standalone. [#3758](https://github.com/mapbox/mapbox-navigation-android/pull/3758) -* Exposed an option for the user to provide an arrival experience feedback when the navigation session is finished. See `NavigationFeedbackOptions` for `NavigationView` integration and `FeedbackArrivalFragment` for standalone. [#3758](https://github.com/mapbox/mapbox-navigation-android/pull/3758) -* Exposed APIs to support caching user feedback events. [#3724](https://github.com/mapbox/mapbox-navigation-android/pull/3724) -* Exposed current intersection index value in the `RouteProgress`. [#3810](https://github.com/mapbox/mapbox-navigation-android/pull/3810) - -#### Bug fixes and improvements -* Updated default routing tiles version to `2020_11_21-03_00_00`. [#3812](https://github.com/mapbox/mapbox-navigation-android/pull/3812) -* Increased map-matching to route geometry precision threshold need to keep updating vanishing point to 3m. [#3803](https://github.com/mapbox/mapbox-navigation-android/pull/3803) - -## Mapbox Navigation SDK 1.2.1 - November 26, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Added options that allow for custom raw location polling rates via `NavigationOptions`. [#3800](https://github.com/mapbox/mapbox-navigation-android/pull/3800) [#3804](https://github.com/mapbox/mapbox-navigation-android/pull/3804) - -#### Bug fixes and improvements -* Route line calculations moved off of the main thread in order to improve performance and resolve ANR issue for long routes. [#3789](https://github.com/mapbox/mapbox-navigation-android/pull/3789) -* Added `equals` and `hashCode` support for `LocationEngineRequest` in Mapbox Events library so it's possible to compare `NavigationOptions` classes. [#3820](https://github.com/mapbox/mapbox-navigation-android/pull/3820) - -## Mapbox Navigation SDK 1.3.0-alpha.2 - November 18, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Added options that allow for custom polling rates. [#3800](https://github.com/mapbox/mapbox-navigation-android/pull/3800) - -#### Bug fixes and improvements -* A more performant and accurate method of finding an alternative route when the map is clicked. [#3723](https://github.com/mapbox/mapbox-navigation-android/pull/3723) -* Route line calculations moved off of the main thread in order to improve performance and resolve ANR issue for long routes. [#3789](https://github.com/mapbox/mapbox-navigation-android/pull/3789) -* Pass `null` to FreeDriveEvent if `location` is not available [#3791](https://github.com/mapbox/mapbox-navigation-android/pull/3791) - -#### Other changes -* Explicitly mark the required min Android SDK version of 21. The Nav SDK v1 series always supported only devices running Lollipop or higher (due to transitive dependencies). [#3781](https://github.com/mapbox/mapbox-navigation-android/pull/3781) - -## Mapbox Navigation SDK 1.2.0 - November 18, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes - -* Send _Free Drive_ events even if there're no `location` values. [#3796](https://github.com/mapbox/mapbox-navigation-android/pull/3796) - -## Mapbox Navigation SDK 1.3.0-alpha.1 - November 12, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes - -* Avoid dropping events when destroying MapboxNavigation. [#3770](https://github.com/mapbox/mapbox-navigation-android/pull/3770) -* Fixed Null Pointer Exception when formatting date in Telemetry. [#3770](https://github.com/mapbox/mapbox-navigation-android/pull/3770) - -## Mapbox Navigation SDK 1.2.0-rc.2 - November 12, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes - -* Avoid dropping events when destroying MapboxNavigation. [#3770](https://github.com/mapbox/mapbox-navigation-android/pull/3770) -* Fixed Null Pointer Exception when formatting date in Telemetry. [#3770](https://github.com/mapbox/mapbox-navigation-android/pull/3770) - -## Mapbox Navigation SDK 1.2.0-rc.1 - November 11, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Improvements -* Added support for routing tiles v2. [#3761](https://github.com/mapbox/mapbox-navigation-android/pull/3761) -* Uploaded Free Drive telemetry events to the server. [#3751](https://github.com/mapbox/mapbox-navigation-android/pull/3751) -* Removed electronic horizon experimental note. [#3748](https://github.com/mapbox/mapbox-navigation-android/pull/3748) -* Tracked appropriate telemetry events for waypoints. [#3747](https://github.com/mapbox/mapbox-navigation-android/pull/3747) -* Introduced `NavigationMapboxMap.Builder` and exposed vanishing point update interval setting. [#3745](https://github.com/mapbox/mapbox-navigation-android/pull/3745) - -#### Bug fixes - -* Fixed an issue where the location was sometimes map-matched to a road heading in the opposite direction if the raw location's accuracy was very poor. [#3761](https://github.com/mapbox/mapbox-navigation-android/pull/3761) -* Included the last segment of `RouteAlertGeometry` represented in the `LineString` generated by `RouteAlertUtils`. [#3744](https://github.com/mapbox/mapbox-navigation-android/pull/3744) - -## Mapbox Navigation SDK 1.2.0-beta.1 - November 5, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Features -* Exposed `MapMatcherResultObserver` that provides additional information about the status of the enhanced location update and the confidence of decisions that the map matcher made to generate this position. [#3730](https://github.com/mapbox/mapbox-navigation-android/pull/3730) -* Added `resetTripSession` to `MapboxNavigation` useful to transport the navigator to a new location. [#3701](https://github.com/mapbox/mapbox-navigation-android/pull/3701) - -#### Improvements -* Updated `EHorizon` `mpp` functions so they can return multiple Most Probable Paths if they have the same probability. [#3740](https://github.com/mapbox/mapbox-navigation-android/pull/3740) -* For specified road classes, any section where the traffic is `'unknown'` can be represented using the `'low'` traffic congestion color rather than the `'unknown'` traffic color. [#3672](https://github.com/mapbox/mapbox-navigation-android/pull/3672) -* Taking advantage of new the `MapMatcherResultObserver` do an immediate transition in `NavigationMapboxMap` when map matcher reports teleport. [#3731](https://github.com/mapbox/mapbox-navigation-android/pull/3731) -* Improved vanishing point's state when completing the leg of a route or going off-route. [#3727](https://github.com/mapbox/mapbox-navigation-android/pull/3727) - -#### Bug fixes - -* Fixed an issue where `NavigationView` crashes when trying to build the `DistanceFormatter` object. [#3725](https://github.com/mapbox/mapbox-navigation-android/pull/3725) - -## Mapbox Navigation SDK 1.2.0-alpha.5 - October 29, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes -* Avoid an occasional crash when setting a route due a failed attempt to generate a route geometry with a buffer. [#3710](https://github.com/mapbox/mapbox-navigation-android/pull/3710) -* Fixed an issue where an outdated information was appended to a telemetry reroute event. [#3716](https://github.com/mapbox/mapbox-navigation-android/pull/3716) - -## Mapbox Navigation SDK 1.1.2 - October 29, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes -* Avoid an occasional crash when setting a route due a failed attempt to generate a route geometry with a buffer. [#3710](https://github.com/mapbox/mapbox-navigation-android/pull/3710) - -## Mapbox Navigation SDK 1.0.1 - October 29, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Bug fixes -* Avoid an occasional crash when setting a route due a failed attempt to generate a route geometry with a buffer. [#3710](https://github.com/mapbox/mapbox-navigation-android/pull/3710) - -## Mapbox Navigation SDK 1.2.0-alpha.4 - October 28, 2020 -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog -#### Improvements -* Removed some synchronized disk access events from upstream library. [#3675](https://github.com/mapbox/mapbox-navigation-android/pull/3675) -* Improved exceptions handling when toggling native history collection. [#3705](https://github.com/mapbox/mapbox-navigation-android/pull/3705) - -#### Bug fixes -* Fixed additional edge cases that occured when trying to infer the route line's z-ordering on the map if not explicitly specified. [#3687](https://github.com/mapbox/mapbox-navigation-android/pull/3687) [#3702](https://github.com/mapbox/mapbox-navigation-android/pull/3702) -* Fixed an issue that would make `off-route` and `invalid-route` inconsistent when there were no available road edges to map-match to. The state will now report `off-route` in those situations. [#3705](https://github.com/mapbox/mapbox-navigation-android/pull/3705) - -#### Other changes -* Fixed `BannerInstructions#willDisplay` which was marked non-nullable and unusable from Kotlin codebases. [#3679](https://github.com/mapbox/mapbox-navigation-android/pull/3679) -* Upgraded Maps SDK dependency to [`v9.6.0-beta.1`](https://github.com/mapbox/mapbox-gl-native-android/releases/tag/android-v9.6.0-beta.1). This includes performing an immediate puck/camera transition to the current location when resuming the map instead of an animated transition. [#3677](https://github.com/mapbox/mapbox-navigation-android/pull/3677) -* Updated default routing tiles version to `2020_10_18-03_00_00`. [#3686](https://github.com/mapbox/mapbox-navigation-android/pull/3686) - -## Mapbox Navigation SDK 1.2.0-alpha.3 - October 21, 2020 - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog - -#### Improvements -* Update the algorithm to calculate the vanishing point of the route to use EPSG:3857 projection instead of turf measurements. This greatly increases the precision, even on extremely long routes. It also improves the performance of the `MapRouteLine`. [#3661](https://github.com/mapbox/mapbox-navigation-android/pull/3661) - -#### Bug fixes -* Assign `currentHorizon`, `currentType` and `currentPosition` from the main thread to avoid synchronization issues [#3653](https://github.com/mapbox/mapbox-navigation-android/pull/3653) -* Keep the selected route as primary after map style has been changed [#3664](https://github.com/mapbox/mapbox-navigation-android/pull/3664) - -#### Other changes -* Remove dependency of UI SDK on the modular notification classes. This fixes an issue where the default `TripNotification` implementation couldn't be replaced with a custom one. [#3665](https://github.com/mapbox/mapbox-navigation-android/pull/3665) - -## Mapbox Navigation SDK 1.1.1 - October 15, 2020 - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog - -#### Other changes -* Bump mapbox-common-native version to 7.1.1 [#3651](https://github.com/mapbox/mapbox-navigation-android/pull/3651) -* Bump mapbox-android-telemetry version to 6.2.1 [#3652](https://github.com/mapbox/mapbox-navigation-android/pull/3652) -* Bump mapbox-core version to 3.1.0 [#3652](https://github.com/mapbox/mapbox-navigation-android/pull/3652) - -## Mapbox Navigation SDK 1.2.0-alpha.1 - October 9, 2020 - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog - -#### Features -* Added incident alerts [#3640](https://github.com/mapbox/mapbox-navigation-android/pull/3640) - -#### Bug fixes -* Fix replay bearing for small maneuvers [#3636](https://github.com/mapbox/mapbox-navigation-android/pull/3636) - -#### Other changes -* Bump mapbox-navigation-native version to 24.0.0 [#1955](https://github.com/mapbox/mapbox-navigation-android/pull/3633) -* Bump mapboxEvents dependency to 6.2.0 and mapboxCore dependency to 3.1.0 [#3621](https://github.com/mapbox/mapbox-navigation-android/pull/3621) -* Bump Maps SDK to 9.6.0-alpha.1 [#3632](https://github.com/mapbox/mapbox-navigation-android/pull/3632) - -## Mapbox Navigation SDK 1.1.0 - October 7, 2020 - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/navigation/overview) for more information. - -### Changelog - -#### Performance improvements -* Improved the time to first banner instructions by updating data from navigator status right after a route is set [#3431](https://github.com/mapbox/mapbox-navigation-android/pull/3431) - -#### Bug fixes -* Fixed route / isOffRoute race condition which resulted in occasional missed offroute events [#3424](https://github.com/mapbox/mapbox-navigation-android/pull/3424) -* Fixed incorrect telemetry location timestamp format which resulted in missing feedback events [#3456](https://github.com/mapbox/mapbox-navigation-android/pull/3456) -* Fixed order of the routes ignored when drawing [#3525](https://github.com/mapbox/mapbox-navigation-android/pull/3525) -* Fixed annotation of `NavigationMapRoute.Builder#build` to be `@NonNull` [#3510](https://github.com/mapbox/mapbox-navigation-android/pull/3510) -* Adjusted RTL layout handling which fixed minor issues, especially in the `InstructionView` [#3426](https://github.com/mapbox/mapbox-navigation-android/pull/3426) -* Resolved a bug where a route casing (route line border) was not visible [#3472](https://github.com/mapbox/mapbox-navigation-android/pull/3472) - -#### Other changes -* Move post user feedback out of companion [#3529](https://github.com/mapbox/mapbox-navigation-android/pull/3529) -* Merged onboard, offboard and hybrid routers together, leaving only one modular router component [#3498](https://github.com/mapbox/mapbox-navigation-android/pull/3498) -* Updated Mapbox Gradle plugins and contributing docs [#3370](https://github.com/mapbox/mapbox-navigation-android/pull/3370) -* Updated return types, class annotations and docs, exposed route options updater [#3429](https://github.com/mapbox/mapbox-navigation-android/pull/3429) -* Bumped Kotlin version to 1.4.0 and Coroutines version to 1.3.9 [#3445](https://github.com/mapbox/mapbox-navigation-android/pull/3445) -* Fix missing destination marker regression when using the Drop-in UI [#3462](https://github.com/mapbox/mapbox-navigation-android/pull/3462) -* Updated Nav UI day and night styles to new stable production v1 versions [#3520](https://github.com/mapbox/mapbox-navigation-android/pull/3520) - -## Mapbox Navigation SDK 1.0.0 - October 2, 2020 -Today, we are releasing Navigation SDK (Core & UI components) v.1.0 for Android 🎉 🚀 - -### Core Components -This upgrade features -- a higher accuracy location engine which functions even in low GPS quality scenarios such as tunnels or overpasses, -- free-drive mode which enables accurate location positioning even without an active route for daily commuting, -- a new modular architecture that allows developers to customize the navigation experience for their use case, -- and MAUs-based billing that provides predictability in costs to developers. - -### UI Components -This release as compared to legacy offers all the features but with much finer control and granularity. It mainly serves as a port of the legacy UI SDK implementation to use the `1.0` version of the Navigation SDK (Core components) and its features. The `1.0` UI Components also removes redundant methods & APIs while exposing new ones instead. It brings in new features, including: - -- Two different ways of providing feedback during a trip session, thereby helping Mapbox provide better route quality, turn-by-turn experiences, traffic congestion, etc. -- Allowing developers to deemphasize portions of the route line behind the puck, thereby reflecting route progress state. -- Providing UI components that visualize a single building footprint or extrusion. Great to use for marking the final destination in an improved arrival experience. - -### Pricing -Applications built with v1.0.0+ are billed based only on [monthly active users](https://docs.mapbox.com/help/glossary/monthly-active-users/), specifically ["Navigation SDKs" MAUs](https://www.mapbox.com/pricing/#navmaus). Navigation SDK MAUs include Directions API, Vector Tiles API, and Raster Tiles API requests with no upfront commitments or annual contracts. A Navigation SDK MAU becomes a billable event only once a user utilizes the Navigation SDK for turn-by-turn directions or for free-drive. - -A single user is billed as one MAU across app upgrades as long as the app is not deleted. Deleting and re-installing an app that uses the Navigation SDK would result in an additional MAU. This happens because the SDK does not store personally identifying information. - -To see the number of Navigation SDKs MAUs included in the free tier and the cost per Navigation SDKs MAU beyond the free tier, see the Navigation SDKs section of our [pricing page](https://www.mapbox.com/pricing/#navmaus). - -### Other docs - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/beta/navigation/overview) for more information. - -Please review the [developer documentation](https://docs.mapbox.com/android/navigation/overview/#installation) to start building with the Mapbox Navigation SDK v1.0 for Android. - -Already use an older version of the Navigation SDK? Check out [the migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) to transition your project from the "legacy" Navigation SDK to the 1.0 version. - -Let us know if you have any questions or run into issues and please open tickets in https://github.com/mapbox/mapbox-navigation-android/issues/new and we will take it from there! We would love your feedback. - -Thank you! - -### Mapbox Navigation SDK 1.0.0-rc.8 - September 9, 2020 - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/beta/navigation/overview) for more information. - -#### Changelog -Changes since Mapbox Navigation SDK `1.0.0-rc.7`: -* Move post user feedback out of companion [#3529](https://github.com/mapbox/mapbox-navigation-android/pull/3529) -* Fix missing destination marker regression when using the Drop-in UI [#3462](https://github.com/mapbox/mapbox-navigation-android/pull/3462) - -#### Known issues -* Vanishing route line (deemphasizing the traveled portion of the route) can be slightly out of sync with the location puck. - -### Mapbox Navigation SDK 1.0.0-rc.7 - September 2, 2020 - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/beta/navigation/overview) for more information. - -#### Changelog -Changes since Mapbox Navigation SDK `1.0.0-rc.6`: -* Fixed order of the routes ignored when drawing [#3525](https://github.com/mapbox/mapbox-navigation-android/pull/3525) -* Updated Nav UI day and night styles to new stable production v1 versions [#3520](https://github.com/mapbox/mapbox-navigation-android/pull/3520) -* Fixed annotation of `NavigationMapRoute.Builder#build` to be `@NonNull` [#3510](https://github.com/mapbox/mapbox-navigation-android/pull/3510) - -#### Known issues -* Vanishing route line (deemphasizing the traveled portion of the route) can be slightly out of sync with the location puck. - -### Mapbox Navigation SDK 1.0.0-rc.6 - August 26, 2020 -This release accelerates the version naming of the Navigation UI SDK to match the Navigation Core SDK artifact, both are named `1.0.0-rc.6`. -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/beta/navigation/overview) for more information. - -#### Changelog -Changes since the Mapbox Navigation UI `1.0.0-rc.1` and Core `1.0.0-rc.5`: -* Adjusted RTL layout handling which fixed minor issues, especially in the `InstructionView` [#3426](https://github.com/mapbox/mapbox-navigation-android/pull/3426) -* Merged onboard, offboard and hybrid routers together, leaving only one modular router component [#3498](https://github.com/mapbox/mapbox-navigation-android/pull/3498) -* Resolved a bug where a route casing (route line border) was not visible [#3472](https://github.com/mapbox/mapbox-navigation-android/pull/3472) - -#### Known issues -* Vanishing route line (deemphasizing the traveled portion of the route) can be slightly out of sync with the location puck. - -### Mapbox Navigation UI SDK 1.0.0-rc.1 & Mapbox Navigation Core SDK 1.0.0-rc.5 - August 19, 2020 -This version introduces a UI component of the SDK compatible with the 1.0.0 pre-release series. - -The `1.0` UI SDK release as compared to legacy offers all the features but with much finer control and granularity. This version mainly serves as a port of the legacy UI SDK implementation to use the `1.0` version of the Navigation Core SDK and its features. The `1.0` UI SDK also removes redundant methods & APIs while exposing new ones instead. The SDK also brings new features, including: - -- Two different ways of providing feedback during a trip session, thereby helping Mapbox provide better route quality, turn-by-turn experiences, traffic congestion, etc. - -- Allowing developers to deemphasize portions of the route line behind the puck, thereby reflecting route progress state. - -- Providing UI components that visualize a single building footprint or extrusion. Great to use for marking the final destination in an improved arrival experience. - -Visit our [1.0.0 migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) and the [documentation pages](http://docs.mapbox.com/android/beta/navigation/overview) for more information. - -#### Changelog -Changes since the `1.0.0-rc.4` release of the Mapbox Navigation Core SDK: -* Updated Mapbox Gradle plugins and contributing docs [#3370](https://github.com/mapbox/mapbox-navigation-android/pull/3370) -* Fixed route / isOffRoute race condition which resulted in occasional missed offroute events [#3424](https://github.com/mapbox/mapbox-navigation-android/pull/3424) -* Improved the time to first banner instructions by updating data from navigator status right after a route is set [#3431](https://github.com/mapbox/mapbox-navigation-android/pull/3431) -* Updated return types, class annotations and docs, exposed route options updater [#3429](https://github.com/mapbox/mapbox-navigation-android/pull/3429) -* Bumped Kotlin version to 1.4.0 and Coroutines version to 1.3.9 [#3445](https://github.com/mapbox/mapbox-navigation-android/pull/3445) -* Fixed incorrect telemetry location timestamp format which resulted in missing feedback events [#3456](https://github.com/mapbox/mapbox-navigation-android/pull/3456) - -#### Known issues -All of the issues are targeted to be resolved before this version becomes stable: -* Casing (a darker border color) of the primary route line is missing. -* Vanishing route line (deemphasizing the traveled portion of the route) can be slightly out of sync with the location puck. - -### Mapbox Navigation Core SDK 1.0.0-rc.x series - -This upgrade features a higher accuracy location engine which functions even in low GPS quality scenarios such as tunnels or overpasses, free-drive mode which enables accurate location positioning even without an active route for daily commuting, a new modular architecture that allows developers to customize the navigation experience for their use case, and MAUs-based billing that provides predictability in costs to developers. - -Please review the [developer documentation](https://docs.mapbox.com/android/beta/navigation/overview/#installation) to start building with the Mapbox Navigation SDK v1.0 for Android. - -Already use an older version of the Navigation SDK? Check out [the migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/1.0-Navigation-SDK-Migration-Guide) to transition your project from the "legacy" core Navigation SDK to the 1.0 version. - -Let us know if you have any questions or run into issues and please open tickets in https://github.com/mapbox/mapbox-navigation-android/issues/new and we will take it from there! We would love your feedback. - -Thank you! - -- Mapbox Navigation Core SDK 1.0.0-rc.4 - August 6, 2020 -- Mapbox Navigation Core SDK 1.0.0-rc.3 - July 27, 2020 -- Mapbox Navigation Core SDK 1.0.0-rc.2 - June 17, 2020 -- Mapbox Navigation Core SDK 1.0.0-rc.1 - June 3, 2020 - -### v0.42.6 - March 16, 2020 - -* Fix missing event telemetry when Proguard is enabled [#2587](https://github.com/mapbox/mapbox-navigation-android/pull/2587) -* fix textAllCaps conflicting with material design [#2585](https://github.com/mapbox/mapbox-navigation-android/pull/2585) -* Add missing RouteOptions to DirectionsBuilder [#2573](https://github.com/mapbox/mapbox-navigation-android/pull/2573) -* Fix libandroid-navigation and libandroid-navigation-ui Javadoc task [#2534](https://github.com/mapbox/mapbox-navigation-android/pull/2534) - -### v0.42.5 - February 11, 2020 - -* Backport #2315 to base-v0.42.1 [#2318](https://github.com/mapbox/mapbox-navigation-android/pull/2318) -* Ensure to use valid MapRouteArrow and MapRouteLine Layer references during style change [#2315](https://github.com/mapbox/mapbox-navigation-android/pull/2315) -* Cherry pick #2307 (master) into base-v0.42.1 [#2308](https://github.com/mapbox/mapbox-navigation-android/pull/2308) -* Bump mapbox-navigation-native version to 7.0.0 in base-v0.42.1 branch [#2294](https://github.com/mapbox/mapbox-navigation-android/pull/2294) -* Cherry pick #2287 (master) into base-v0.42.1 [#2292](https://github.com/mapbox/mapbox-navigation-android/pull/2292) - - -### v0.42.4 - November 25, 2019 - -* Bumped Java SDK dependency to `4.9.0` [#2043](https://github.com/mapbox/mapbox-navigation-android/pull/2043) -* Update translations to latest Transifex [#2273](https://github.com/mapbox/mapbox-navigation-android/pull/2273) [#2277](https://github.com/mapbox/mapbox-navigation-android/pull/2277) -* Persist routes across style changes [#2262](https://github.com/mapbox/mapbox-navigation-android/pull/2262) -* Off-route threshold options [#2276](https://github.com/mapbox/mapbox-navigation-android/pull/2276) - -### v0.42.3 - November 11, 2019 - -* Fix synchronization issue in MapRouteLine / NavigationMapRoute [#2256](https://github.com/mapbox/mapbox-navigation-android/pull/2256) - -### v0.42.2 - November 6, 2019 - -* Disable sideloading functionality in _Dynamic offline_ feature [#2248](https://github.com/mapbox/mapbox-navigation-android/pull/2248) - -### v0.42.1 - October 18, 2019 - -* Roundabout maneuver icon depicts counterclockwise movement when driving on the left [#2228](https://github.com/mapbox/mapbox-navigation-android/pull/2228) - -### v0.42.0 - September 20, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.42.0-Migration-Guide) for the necessary updates required. - -* Change driver feedback UI [#2054](https://github.com/mapbox/mapbox-navigation-android/pull/2054) -* [SEMVER] Fix navigation view memory leak [#2051](https://github.com/mapbox/mapbox-navigation-android/pull/2051) -* [SEMVER] Remove never used apis causing unnecessary memory issues [#2052](https://github.com/mapbox/mapbox-navigation-android/pull/2052) -* [SEMVER] Fix backwards instructions in left-side driving scenarios [#2044](https://github.com/mapbox/mapbox-navigation-android/pull/2044) -* Fix rerouting inside the NavigationUI [#2010](https://github.com/mapbox/mapbox-navigation-android/issues/2010) -* Fix on route selection change listener being called if route is not visible [#2035](https://github.com/mapbox/mapbox-navigation-android/pull/2035) -* [SEMVER] Fix NavigationStepData regression from #1890 [#2015](https://github.com/mapbox/mapbox-navigation-android/pull/2015) -* Bump mapbox-android-sdk version to 8.2.1 [#2013](https://github.com/mapbox/mapbox-navigation-android/pull/2013) -* Bump Mapbox Annotation Plugin version to v8 0.7.0 [#2014](https://github.com/mapbox/mapbox-navigation-android/pull/2014) -* Auto generate license for the SDK [#2002](https://github.com/mapbox/mapbox-navigation-android/pull/2002) -* Update translations to latest Transifex [#2003](https://github.com/mapbox/mapbox-navigation-android/pull/2003) - -### v0.41.0 - July 11, 2019 - -* Fix navigation camera tracking the puck [#1995](https://github.com/mapbox/mapbox-navigation-android/pull/1995) -* Move events from telemetry to nav sdk [#1890](https://github.com/mapbox/mapbox-navigation-android/pull/1890) -* Fix DynamicCamera#CameraPosition.zoom NPE [#1979](https://github.com/mapbox/mapbox-navigation-android/pull/1979) -* Update ComponentNavigationActivity example [#1978](https://github.com/mapbox/mapbox-navigation-android/pull/1978) - -### v0.40.0 - June 12, 2019 - -* Fix notification instruction not updated for arrive maneuver [#1959](https://github.com/mapbox/mapbox-navigation-android/pull/1959) -* Bump mapbox-navigation-native version to 6.2.1 [#1955](https://github.com/mapbox/mapbox-navigation-android/pull/1955) - -### v0.39.0 - May 29, 2019 - -* Add check to avoid ArrayIndexOutOfBoundsExceptions from MapRouteLine#drawWayPoints [#1951](https://github.com/mapbox/mapbox-navigation-android/pull/1951) -* Fix way name truncating too soon [#1947](https://github.com/mapbox/mapbox-navigation-android/pull/1947) -* Fix instruction icon mismatch in between banner and notification [#1946](https://github.com/mapbox/mapbox-navigation-android/pull/1946) - -### v0.38.0 - May 16, 2019 - -* Add option to load offline maps database for NavigationView [#1895](https://github.com/mapbox/mapbox-navigation-android/pull/1895) -* Update Maps SDK to 7.4.0 [#1907](https://github.com/mapbox/mapbox-navigation-android/pull/1907) -* Added walking options [#1934](https://github.com/mapbox/mapbox-navigation-android/pull/1934) -* SoundButton clicklistener wasn't set properly [#1937](https://github.com/mapbox/mapbox-navigation-android/pull/1937) - -### v0.37.0 - May 1, 2019 - -* Added check for legs to route refresh [#1916](https://github.com/mapbox/mapbox-navigation-android/pull/1916) -* Improve PR Template [#1915](https://github.com/mapbox/mapbox-navigation-android/pull/1915) -* Fix NavigationLauncherActivity camera animations [#1913](https://github.com/mapbox/mapbox-navigation-android/pull/1913) -* Fix Navigation Launcher test app Activity incorrect profile regression [#1914](https://github.com/mapbox/mapbox-navigation-android/pull/1914) -* Update Java Services to 4.7.0 [#1906](https://github.com/mapbox/mapbox-navigation-android/pull/1906) -* Add connectivity status check to SpeechPlayer provider [#1901](https://github.com/mapbox/mapbox-navigation-android/pull/1901) -* Fix intermediate way point arrival not triggered [#1908](https://github.com/mapbox/mapbox-navigation-android/pull/1908) -* Check for valid DirectionsRoute in RouteRefresh [#1909](https://github.com/mapbox/mapbox-navigation-android/pull/1909) -* ExampleActivity refactor for simplicity/stability [#1884](https://github.com/mapbox/mapbox-navigation-android/pull/1884) -* Allow default notification color setting via MapboxNavigationOptions [#1899](https://github.com/mapbox/mapbox-navigation-android/pull/1899) - -### v0.36.0 - April 17, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.36.0-Migration-Guide) for the necessary updates required. - -* Prevent RouteLeg list access for current step creation [#1896](https://github.com/mapbox/mapbox-navigation-android/pull/1896) -* Create NavigationViewRouter timeout to unblock routing state [#1888](https://github.com/mapbox/mapbox-navigation-android/pull/1888) -* Bump mapbox-android-sdk version to 7.3.2 [#1894](https://github.com/mapbox/mapbox-navigation-android/pull/1894) -* Add NavigationMapRoute attribute for styling route line cap expression [#1818](https://github.com/mapbox/mapbox-navigation-android/pull/1818) -* Update navigator to 6.1.3 [#1892](https://github.com/mapbox/mapbox-navigation-android/pull/1892) -* [SEMVER] Add NavigationMapboxMap#addCustomMarker for usage of SymbolManager [#1891](https://github.com/mapbox/mapbox-navigation-android/pull/1891) -* Fix notification and banner ETAs not in sync [#1889](https://github.com/mapbox/mapbox-navigation-android/pull/1889) -* Bump mapbox-navigation-native version to 6.1.2 [#1885](https://github.com/mapbox/mapbox-navigation-android/pull/1885) -* Add offline version check to Navigation View Router [#1864](https://github.com/mapbox/mapbox-navigation-android/pull/1864) -* Add offline options to Navigation Launcher [#1862](https://github.com/mapbox/mapbox-navigation-android/pull/1862) -* [SEMVER] Add dynamic offline routing to NavigationView [#1829](https://github.com/mapbox/mapbox-navigation-android/pull/1829) - -### v0.35.0 - April 12, 2019 - -* Github PR template refactor [#1879](https://github.com/mapbox/mapbox-navigation-android/pull/1879) -* Add custom history events for MapboxNavigation [#1881](https://github.com/mapbox/mapbox-navigation-android/pull/1881) -* Updated mapbox java to 4.6.0 [#1877](https://github.com/mapbox/mapbox-navigation-android/pull/1877) -* Bump mapbox-android-sdk version to 7.3.1 [#1880](https://github.com/mapbox/mapbox-navigation-android/pull/1880) -* Bump mapbox-android-telemetry version to 4.3.0 [#1876](https://github.com/mapbox/mapbox-navigation-android/pull/1876) -* Bump mapbox-android-plugin-annotation-v7 version to 0.6.0 [#1867](https://github.com/mapbox/mapbox-navigation-android/pull/1867) -* Add check to only start Route Processor Background Thread once [#1866](https://github.com/mapbox/mapbox-navigation-android/pull/1866) -* Add periodic refresh [#1855](https://github.com/mapbox/mapbox-navigation-android/pull/1855) - -### v0.34.0 - April 2, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.34.0-Migration-Guide) for the necessary updates required. - -* Add remove offline routing tiles by bounding box functionality [#1850](https://github.com/mapbox/mapbox-navigation-android/pull/1850) -* Update LocationComponent to use LocationComponentActivationOptions [#1852](https://github.com/mapbox/mapbox-navigation-android/pull/1852) -* [SEMVER] Add NavigationCamera#update for MapboxMap animations [#1849](https://github.com/mapbox/mapbox-navigation-android/pull/1849) -* Update Maps SDK to 7.3.0 [#1844](https://github.com/mapbox/mapbox-navigation-android/pull/1844) -* Fix proguard [#1816](https://github.com/mapbox/mapbox-navigation-android/pull/1816) -* Setup native crash monitor for test application [#1841](https://github.com/mapbox/mapbox-navigation-android/pull/1841) - -### v0.33.2 - March 22, 2019 - -* Bump mapbox-navigation-native version to 6.0.0 [#1836](https://github.com/mapbox/mapbox-navigation-android/pull/1836) -* Update NavigationCamera resetting state if transition cancelled [#1835](https://github.com/mapbox/mapbox-navigation-android/pull/1835) -* Added metadata to NavigationPerformanceEvent [#1820](https://github.com/mapbox/mapbox-navigation-android/pull/1820) -* Update NavigationView NavigationListener to triggered when initialized [#1807](https://github.com/mapbox/mapbox-navigation-android/pull/1807) - -### v0.33.1 - March 20, 2019 - -* Finish camera reset during MapboxMap cancel events [#1830](https://github.com/mapbox/mapbox-navigation-android/pull/1830) - -### v0.33.0 - March 18, 2019 - -* Add DirectionsRouteType for starting navigation with annotation data [#1819](https://github.com/mapbox/mapbox-navigation-android/pull/1819) -* Added attribute to capture event name in performance trace event [#1800](https://github.com/mapbox/mapbox-navigation-android/pull/1800) -* Add LocationComponent FPS throttle based on map zoom [#1815](https://github.com/mapbox/mapbox-navigation-android/pull/1815) -* Fix null ResponseBody in VoiceInstructionLoader [#1813](https://github.com/mapbox/mapbox-navigation-android/pull/1813) - -### v0.32.0 - March 11, 2019 - -* Adjust NavigationCamera zoom reset behavior [#1802](https://github.com/mapbox/mapbox-navigation-android/pull/1802) -* Update Android Core to 1.2.0 [#1805](https://github.com/mapbox/mapbox-navigation-android/pull/1805) -* Update Maps SDK to 7.2.0 [#1804](https://github.com/mapbox/mapbox-navigation-android/pull/1804) -* Add RawLocationListener for direct updates from LocationEngine [#1803](https://github.com/mapbox/mapbox-navigation-android/pull/1803) -* Fix event simulation flag field wrongly reported [#1799](https://github.com/mapbox/mapbox-navigation-android/pull/1799) -* Fix missing cancel event / not sent [#1796](https://github.com/mapbox/mapbox-navigation-android/pull/1796) -* Add manifest placeholder for enabling / disabling Crashlytics automatically [#1795](https://github.com/mapbox/mapbox-navigation-android/pull/1795) - -### v0.31.0 - March 6, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.31.0-Migration-Guide) for the necessary updates required. - -* [SEMVER] Remove directionsProfile from NavigationUiOptions [#1787](https://github.com/mapbox/mapbox-navigation-android/pull/1787) -* Add initial GPS event [#1777](https://github.com/mapbox/mapbox-navigation-android/pull/1777) -* Add Android P 440 density support to UrlDensityMap [#1785](https://github.com/mapbox/mapbox-navigation-android/pull/1785) -* Add DepartEventFactory for handling route departure events [#1772](https://github.com/mapbox/mapbox-navigation-android/pull/1772) -* Fix destination marker not drawn on Style reload [#1779](https://github.com/mapbox/mapbox-navigation-android/pull/1779) -* Fix plugged wireless battery monitor check [#1782](https://github.com/mapbox/mapbox-navigation-android/pull/1782) -* Fix navigation cancel button [#1776](https://github.com/mapbox/mapbox-navigation-android/pull/1776) -* Fix NavigationRoute bearing order [#1775](https://github.com/mapbox/mapbox-navigation-android/pull/1775) -* Add Github PR template [#1766](https://github.com/mapbox/mapbox-navigation-android/pull/1766) -* Add Crashlytics to test app [#1775](https://github.com/mapbox/mapbox-navigation-android/pull/1775) - -### v0.30.0 - February 18, 2019 - -* Fix battery charge reporter NPE [#1750](https://github.com/mapbox/mapbox-navigation-android/pull/1750) -* Adjust continueStraight to default for NavigationRoute [#1748](https://github.com/mapbox/mapbox-navigation-android/pull/1748) -* Bump NN version to 5.0.0 [#1744](https://github.com/mapbox/mapbox-navigation-android/pull/1744) -* Ignore primary route update tasks with empty collections [#1742](https://github.com/mapbox/mapbox-navigation-android/pull/1742) - -### v0.29.0 - February 13, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.29.0-Migration-Guide) for the necessary updates required. - -* Added RouteRefresh as a wrapper class for MapboxDirectionsRefresh [#1738](https://github.com/mapbox/mapbox-navigation-android/pull/1738) -* Bump mapbox sdk services version to 4.5.0 [#1736](https://github.com/mapbox/mapbox-navigation-android/pull/1736) -* Prevent route feature collections IndexOutOfBoundsException in PrimaryRouteUpdateTask [#1735](https://github.com/mapbox/mapbox-navigation-android/pull/1735) -* Update RouteRetrievalEvent [#1731](https://github.com/mapbox/mapbox-navigation-android/pull/1731) -* Add interceptor and event listener support for NavigationRoute [#1734](https://github.com/mapbox/mapbox-navigation-android/pull/1734) -* Add battery event [#1729](https://github.com/mapbox/mapbox-navigation-android/pull/1729) -* Add silent waypoints support into NavigationRoute [#1733](https://github.com/mapbox/mapbox-navigation-android/pull/1733) -* Update Maps SDK 7.1.2 [#1728](https://github.com/mapbox/mapbox-navigation-android/pull/1728) -* Fix issue with mute persistence between navigation sessions / rotation [#1726](https://github.com/mapbox/mapbox-navigation-android/pull/1726) -* Added RouteRetrievalEvent [#1661](https://github.com/mapbox/mapbox-navigation-android/pull/1661) -* [SEMVER] Allow multiple route simulations with NavigationView [#1724](https://github.com/mapbox/mapbox-navigation-android/pull/1724) -* Update Maps SDK 7.1.1 and Annotation Plugin 0.5.0 [#1722](https://github.com/mapbox/mapbox-navigation-android/pull/1722) -* Return false for OnMapClick listeners [#1717](https://github.com/mapbox/mapbox-navigation-android/pull/1717) - -### v0.28.0 - January 30, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.28.0-Migration-Guide) for the necessary updates required. - -* Delay initialization of FpsDelegate / WayName in NavigationMapboxMap [#1700](https://github.com/mapbox/mapbox-navigation-android/pull/1700) -* Update Maps SDK 7.1.0 [#1712](https://github.com/mapbox/mapbox-navigation-android/pull/1712) -* [SEMVER] Added exit signs to the instruction banner and refactored instruction loader [#1195](https://github.com/mapbox/mapbox-navigation-android/pull/1195) -* [SEMVER] Replace deprecated maker usage in NavigationMapboxMap with SymbolManager [#1707](https://github.com/mapbox/mapbox-navigation-android/pull/1707) -* Add ManeuverView APIs for adjusting primary and secondary color [#1709](https://github.com/mapbox/mapbox-navigation-android/pull/1709) -* Update translations from Transifex [#1704](https://github.com/mapbox/mapbox-navigation-android/pull/1704) -* Provide default LocationComponent style when not found [#1696](https://github.com/mapbox/mapbox-navigation-android/pull/1696) -* Update support lib 28.0.0 to fix issue with ViewModel restoration [#1690](https://github.com/mapbox/mapbox-navigation-android/pull/1690) -* [SEMVER] Update TurnLaneView to use VectorDrawable instead of StyleKit [#1695](https://github.com/mapbox/mapbox-navigation-android/pull/1695) -* Fix activation of default LocationEngine for LocationComponent [#1701](https://github.com/mapbox/mapbox-navigation-android/pull/1701) -* Adjust route overview to account for lifecycle [#1688](https://github.com/mapbox/mapbox-navigation-android/pull/1688) - -### v0.27.0 - January 16, 2019 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.27.0-Migration-Guide) for the necessary updates required. - -* [SEMVER] Consume banner instructions from NN [#1543](https://github.com/mapbox/mapbox-navigation-android/pull/1543) -* Update InstructionLoader API as public / taking BannerText [#1683](https://github.com/mapbox/mapbox-navigation-android/pull/1683) -* Removed multiple instantiations of MapboxOfflineRouter from OfflineRegionDownloadActivity [#1684](https://github.com/mapbox/mapbox-navigation-android/pull/1684) -* Add Streets Source v7 and v8 checks for way name layer [#1679](https://github.com/mapbox/mapbox-navigation-android/pull/1679) -* Add dynamic map FPS adjustment for NavigationMapboxMap [#1669](https://github.com/mapbox/mapbox-navigation-android/pull/1669) -* Add ability to disable auto-increment of RouteLeg index [#1643](https://github.com/mapbox/mapbox-navigation-android/pull/1643) -* Tracking gestures management to true in default NavigationView styles [#1682](https://github.com/mapbox/mapbox-navigation-android/pull/1682) -* Fix AlertView animation leak [#1667](https://github.com/mapbox/mapbox-navigation-android/pull/1667) -* NavigationView do not allow way name to show in overview mode [#1676](https://github.com/mapbox/mapbox-navigation-android/pull/1676) -* [SEMVER] Set ssmlAnouncement when using SpeechAnnouncementListener [#1675](https://github.com/mapbox/mapbox-navigation-android/pull/1675) -* [SEMVER] Update Maps SDK 7.x and events 4.x with new location APIs [#1615](https://github.com/mapbox/mapbox-navigation-android/pull/1615) -* Update dependencies: ConstraintLayout, mockito, leakCanary, robolectric [#1668](https://github.com/mapbox/mapbox-navigation-android/pull/1668) -* Remove unused / package-private RouteStepProgress#nextStep [#1666](https://github.com/mapbox/mapbox-navigation-android/pull/1666) -* Return the actual error coming back from NN when fetching an offline route fails [#1660](https://github.com/mapbox/mapbox-navigation-android/pull/1660) -* Create RouteProgress after leg index check in RouteProcessorRunnable [#1657](https://github.com/mapbox/mapbox-navigation-android/pull/1657) -* Use MapboxMap camera animation for resetting NavigationCamera [#1658](https://github.com/mapbox/mapbox-navigation-android/pull/1658) -* Allow NavigationView to start navigation during existing session [#1655](https://github.com/mapbox/mapbox-navigation-android/pull/1655) -* Happy 2019 🎉🚗 [#1654](https://github.com/mapbox/mapbox-navigation-android/pull/1654) -* Bump Maps and Events dependencies [#1651](https://github.com/mapbox/mapbox-navigation-android/pull/1651) - -### v0.26.0 - December 20, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.26.0-Migration-Guide) for the necessary updates required. - -* NavigationMapRoute 2.0 #1387 -* [SEMVER] Use Android View instead of runtime styling for way name #1621 -* Update Maps SDK 6.8.0 #1642 -* Add waypoint targets support into NavigationRoute #1640 - -### v0.25.0 - December 16, 2018 - -* Update Navigator to 3.4.11 #1635 -* Bump mapbox-navigation-native version to 3.4.10 #1631 -* Changed the elevation of the InstructionView so that it doesn't encounter overlapping issues. #1089 -* Include 'exit roundabout' in Navigation Constants #1628 -* Fix voice instruction cache not getting initialized with injected speech player #1627 -* Fix turn-by-turn UI voice instructions repeated after a config change #1622 -* Check for successful tar response in TarFetchedCallback #1620 -* Generate unique filenames for archives in check binary size script #1619 -* Move SummaryBottomSheet above RecenterBtn in navigation_view_layout.xml #1616 -* Update script-git-version.gradle with try/catch #1617 -* Target API 28 and add FOREGROUND_SERVICE permission #1612 -* Add check to only cache instructions if the language setup is supported by Voice API #1610 -* Attempt to fix the coverage job #1601 - -### v0.24.1 - December 5, 2018 - -* Increment leg index upon way point arrival #1604 -* Update Navigator 3.4.9 #1603 -* Bump mapboxSdkServices version to 4.2.0 #1599 -* Setup CI to publish the sample app to Google Play #1597 -* Add last commit hash to test app settings #1590 - -### v0.24.0 - December 3, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.24.0-Migration-Guide) for the necessary updates required. - -* Add proguard rule for MapboxTelemetry #1593 -* Update Navigator to 3.4.7 #1592 -* Bump mapbox-navigation-native version to 3.4.6 #1586 -* Update Java Services 4.1.1 #1585 -* Bump mapbox-android-sdk and mapbox-android-telemetry versions #1584 -* Only allow choosing an offline version with valid data #1583 -* Add bearing to origin of offline route requests in OfflineRouteFinder #1582 -* Update permissions and preferences for ExampleActivity #1581 -* Enable history recording in example activity #1580 -* Add write external permission storage to app AndroidManifest #1578 - -### v0.24.0-beta.2 - November 29, 2018 - -* Route tile download #1559 -* Update OfflineTileVersions visibility and add to MapboxOfflineRouter #1571 -* Fix the progressUpdateListener for Tile Pack Unpacking #1567 -* Update MapboxOfflineRoute APIs and callback naming #1569 -* Fix milestone / progress listener leaks from NavigationView #1552 -* Fix JSON file names (repo name) in check binary size script #1564 -* Fix malformed binary size JSON #1563 -* Integrate navigation state changes from latest events library version #1562 -* Ignore StyleKit files for codecov #1561 -* Check for DynamicCamera in ExampleViewModel shutdown #1560 -* Fix cache is closed crash #1555 -* Bump mapboxEvents and mapboxNavigator versions #1558 -* Check for valid route with length in MockNavigationActivity #1556 -* Update processor tests and remove unused helper code #1536 -* Add binary size metric and push to loading dock #1554 -* Fix UI tests with DirectionsRoute test fixture #1548 -* Add codecov.yml #1551 -* Nav Native API update #1547 -* Add listener for updates to map way name #1544 -* Ignore PendingIntent to re-open package with null Intent #1546 -* Always add FeatureCollection for way points in NavigationMapRoute #1542 - -### v0.24.0-beta.1 - November 15, 2018 - -* Prevent from requesting voice instructions if the cache has been previously closed and add a check to delete the cache if there are files [#1540](https://github.com/mapbox/mapbox-navigation-android/pull/1540) -* Add offline functionality [#1539](https://github.com/mapbox/mapbox-navigation-android/pull/1539) -* Remove unnecessary proguard rule resolved in Java services 4.1.0 [#1532](https://github.com/mapbox/mapbox-navigation-android/pull/1532) -* [SEMVER] Fix navigation map route array index out of bounds exception and add clean up navigation launcher preferences support [#1530](https://github.com/mapbox/mapbox-navigation-android/pull/1530) -* [SEMVER] Fix voice instructions cache [#1481](https://github.com/mapbox/mapbox-navigation-android/pull/1481) -* Update Navigator to 3.4.0 [#1525](https://github.com/mapbox/mapbox-navigation-android/pull/1525) -* Cancel outstanding Directions API requests onDestroy NavigationViewModel [#1515](https://github.com/mapbox/mapbox-navigation-android/pull/1515) -* [SEMVER] Use most recent raw Location when building snapped Location [#1522](https://github.com/mapbox/mapbox-navigation-android/pull/1522) -* Update translations to latest Transifex [#1513](https://github.com/mapbox/mapbox-navigation-android/pull/1513) -* Update codecov badge to Navigation 😅 [#1510](https://github.com/mapbox/mapbox-navigation-android/pull/1510) -* Update README.md with codecov badge [#1509](https://github.com/mapbox/mapbox-navigation-android/pull/1509) -* Generate and push code coverage to codecov.io in CI [#1506](https://github.com/mapbox/mapbox-navigation-android/pull/1506) - -### v0.23.0 - November 7, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.23.0-Migration-Guide) for the necessary updates required. - -* [SEMVER] Add RouteProgressState to RouteProgress for current Navigator information [#1502](https://github.com/mapbox/mapbox-navigation-android/pull/1502) -* [SEMVER] Remove LocationValidator and force last Location if found [#1498](https://github.com/mapbox/mapbox-navigation-android/pull/1498) -* Update MapRouteProgressChangeListener to be aware of route visibility [#1482](https://github.com/mapbox/mapbox-navigation-android/pull/1482) -* [SEMVER] Remove MapboxNavigationOptions ignored by Navigator [#1500](https://github.com/mapbox/mapbox-navigation-android/pull/1500) -* Check for valid geocoding response in ExamplePresenter [#1499](https://github.com/mapbox/mapbox-navigation-android/pull/1499) -* Better clarify the Mapbox Navigator dependency [#1496](https://github.com/mapbox/mapbox-navigation-android/pull/1496) -* Add example test Activity for Navigation Test Application [#1317](https://github.com/mapbox/mapbox-navigation-android/pull/1317) -* Bump mapbox-navigation-native version to 3.3.1 [#1495](https://github.com/mapbox/mapbox-navigation-android/pull/1495) -* Add Mapbox Navigator TOS to the license [#1494](https://github.com/mapbox/mapbox-navigation-android/pull/1494) -* Bump Maps SDK and Events versions [#1493](https://github.com/mapbox/mapbox-navigation-android/pull/1493) -* Resume simulation for multi leg routes [#1490](https://github.com/mapbox/mapbox-navigation-android/pull/1490) -* Remove dynamic padding way name adjustment for MapWayname [#1473](https://github.com/mapbox/mapbox-navigation-android/pull/1473) -* Remove unnecessary force first location update from route (origin) [#1488](https://github.com/mapbox/mapbox-navigation-android/pull/1488) -* Add CameraPosition option for initializing NavigationView [#1483](https://github.com/mapbox/mapbox-navigation-android/pull/1483) -* Rebuild RemoteViews for MapboxNavigationNotification on each update [#1474](https://github.com/mapbox/mapbox-navigation-android/pull/1474) -* Update time remaining TextView to auto-size for longer durations [#1479](https://github.com/mapbox/mapbox-navigation-android/pull/1479) -* Fix mock location generation in ReplayRouteLocationConverter [#1476](https://github.com/mapbox/mapbox-navigation-android/pull/1476) -* Update Maps SDK to 6.6.2 [#1475](https://github.com/mapbox/mapbox-navigation-android/pull/1475) -* Bump mapbox-navigation-native version to 3.2.1 [#1470](https://github.com/mapbox/mapbox-navigation-android/pull/1470) -* [SEMVER] Allow access to AlertView and the ability to enable or disable [#1466](https://github.com/mapbox/mapbox-navigation-android/pull/1466) -* Update Transifex to latest German translations [#1476](https://github.com/mapbox/mapbox-navigation-android/pull/1476) - -### v0.22.0 - October 24, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. Please consult this [migration guide](https://github.com/mapbox/mapbox-navigation-android/wiki/0.22.0-Migration-Guide) for the necessary updates required. - -* [SEMVER] Replace LocationLayerPlugin with LocationComponent [#1438](https://github.com/mapbox/mapbox-navigation-android/pull/1438) -* Makes gradle.properties license listing consisting with repo [#1456](https://github.com/mapbox/mapbox-navigation-android/pull/1456) -* Rebuild MapboxNavigationNotification for each update [#1455](https://github.com/mapbox/mapbox-navigation-android/pull/1455) -* Update progruard rules to ensure Navigator is kept in release builds [#1454](https://github.com/mapbox/mapbox-navigation-android/pull/1454) -* Adjust InstructionView primary and secondary loading logic [#1451](https://github.com/mapbox/mapbox-navigation-android/pull/1451) -* Correct iconSize expression [#1453](https://github.com/mapbox/mapbox-navigation-android/pull/1453) -* Update InstructionView to consume turn lane data from sub BannerText [#1440](https://github.com/mapbox/mapbox-navigation-android/pull/1440) -* Fix MapWayname ProgressChangeListener leak [#1442](https://github.com/mapbox/mapbox-navigation-android/pull/1442) -* Add base HistoryActivity for testing [#1447](https://github.com/mapbox/mapbox-navigation-android/pull/1447) -* Fix sub BannerText loading shields for first time [#1446](https://github.com/mapbox/mapbox-navigation-android/pull/1446) -* make use of fixed duration for non tracking statuses [#1437](https://github.com/mapbox/mapbox-navigation-android/pull/1437) -* Check for valid index before updating steps in NavigationRouteProcessor [#1435](https://github.com/mapbox/mapbox-navigation-android/pull/1435) -* Update UrlDensityMap for more screen densities [#1436](https://github.com/mapbox/mapbox-navigation-android/pull/1436) -* Update Transifex latest translations [#1433](https://github.com/mapbox/mapbox-navigation-android/pull/1433) -* Update Maps SDK 6.6.1 and Events 3.4.0 [#1434](https://github.com/mapbox/mapbox-navigation-android/pull/1434) -* Stop scrolling before notifying InstructionListAdapter [#1432](https://github.com/mapbox/mapbox-navigation-android/pull/1432) -* Add FusedLocationEngine to Test App [#1373](https://github.com/mapbox/mapbox-navigation-android/pull/1373) -* Check for null maneuver type in ManeuverView [#1429](https://github.com/mapbox/mapbox-navigation-android/pull/1429) -* Revert Shield URL density additions [#1428](https://github.com/mapbox/mapbox-navigation-android/pull/1428) -* Add no value checks for FixLocation in MapboxNavigator [#1426](https://github.com/mapbox/mapbox-navigation-android/pull/1426) -* Show turn lanes when sub BannerText is not present [#1427](https://github.com/mapbox/mapbox-navigation-android/pull/14257) -* Log TimeFormatter error in place of IllegalArgumentException [#1425](https://github.com/mapbox/mapbox-navigation-android/pull/1425) -* Filter queried Features for map way name [#1156](https://github.com/mapbox/mapbox-navigation-android/pull/1156) -* Add tunnels functionality [#1392](https://github.com/mapbox/mapbox-navigation-android/pull/1392) -* Load sub-banner Shield Images [#1418](https://github.com/mapbox/mapbox-navigation-android/pull/1418) -* Fix shields not showing up for some display densities [#1414](https://github.com/mapbox/mapbox-navigation-android/pull/1414) -* Bump Android Gradle plugin version to 3.2.1 [#1415](https://github.com/mapbox/mapbox-navigation-android/pull/1415) -* [SEMVER] Added nav-native ETAs [#1412](https://github.com/mapbox/mapbox-navigation-android/pull/1412) -* Delay start navigation until route received in MockNavigationActivity [#1411](https://github.com/mapbox/mapbox-navigation-android/pull/1411) -* Update Maps v6.6.0 release [#1310](https://github.com/mapbox/mapbox-navigation-android/pull/1310) -* [SEMVER] Consume Sub BannerText in InstructionView [#1408](https://github.com/mapbox/mapbox-navigation-android/pull/1408) -* Fix component navigation activity camera issues [#1407](https://github.com/mapbox/mapbox-navigation-android/pull/1407) - -### v0.21.0 - October 5, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. - -* Add CustomNavigationNotification notification channel [#1388](https://github.com/mapbox/mapbox-navigation-android/pull/1388) -* [SEMVER] Add OnCameraTrackingChangedListener to NavigationMapboxMap [#1386](https://github.com/mapbox/mapbox-navigation-android/pull/1386) -* Bump mapbox-android-plugin-locationlayer version to 0.10.0 [#1382](https://github.com/mapbox/mapbox-navigation-android/pull/1382) -* Camera tracking modes selection with GPS and North as options [#1377](https://github.com/mapbox/mapbox-navigation-android/pull/1377) -* Match min and max pitch values with iOS [#1379](https://github.com/mapbox/mapbox-navigation-android/pull/1379) -* Migrate camera tracking logic to the LocationLayerPlugin [#1372](https://github.com/mapbox/mapbox-navigation-android/pull/1372) -* CP: Use tracking animation multiplier 2x [#1347](https://github.com/mapbox/mapbox-navigation-android/pull/1347) -* Fix multi on click listener NPE in recenter button [#1374](https://github.com/mapbox/mapbox-navigation-android/pull/1374) - -### v0.20.0 - September 30, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. - -* Update Navigator to 3.1.3 [#1364](https://github.com/mapbox/mapbox-navigation-android/pull/1364) -* Delay adding InstructionView default click listeners until subscribed [#1362](https://github.com/mapbox/mapbox-navigation-android/pull/1362) -* Do not remove OffRouteListeners onArrival [#1363](https://github.com/mapbox/mapbox-navigation-android/pull/1363) - -### v0.20.0-beta.1 - September 30, 2018 - -* Refine InstructionView update APIs [#1355](https://github.com/mapbox/mapbox-navigation-android/pull/1355) -* Puck Gymnastics [#1354](https://github.com/mapbox/mapbox-navigation-android/pull/1354) -* Fix MultiOnClickListener NPE [#1353](https://github.com/mapbox/mapbox-navigation-android/pull/1353) -* [SEMVER] Ignore null locations [#1352](https://github.com/mapbox/mapbox-navigation-android/pull/1352) -* Update nav native to 3.0.1 [#1348](https://github.com/mapbox/mapbox-navigation-android/pull/1348) -* Add separate APIs for updating InstructionView [#1340](https://github.com/mapbox/mapbox-navigation-android/pull/1340) -* Create MultiOnClickListener before View is attached [#1345](https://github.com/mapbox/mapbox-navigation-android/pull/1345) -* Add navigator history functionality [#1342](https://github.com/mapbox/mapbox-navigation-android/pull/1342) -* Navigation native [#1336](https://github.com/mapbox/mapbox-navigation-android/pull/1336) -* Ignore navigation view orientation test [#1331](https://github.com/mapbox/mapbox-navigation-android/pull/1331) -* Add NavigationMapboxMap APIs for showing multiple routes on map [#1320](https://github.com/mapbox/mapbox-navigation-android/pull/1320) -* Add NavigationMapboxMap to set LocationLayer RenderMode [#1319](https://github.com/mapbox/mapbox-navigation-android/pull/1319) -* Update Build Tools 28.0.3 [#1313](https://github.com/mapbox/mapbox-navigation-android/pull/1313) -* Add default roundabout angle value for ManeuverView [#1264](https://github.com/mapbox/mapbox-navigation-android/pull/1264) -* 0.19.0 release README bump [#1306](https://github.com/mapbox/mapbox-navigation-android/pull/1306) -* Bump MAS version to 4.0.0 [#1308](https://github.com/mapbox/mapbox-navigation-android/pull/1308) - -### v0.19.0 - September 24, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. - -* Fix route requests that include approaches and fix calculate remaining waypoints and waypoint names logic [#1303](https://github.com/mapbox/mapbox-navigation-android/pull/1303) -* Added ability to hide/add listeners to buttons/alert views [#1251](https://github.com/mapbox/mapbox-navigation-android/pull/1251) -* [SEMVER] Allow custom LocationEngine from NavigationViewOptions [#1257](https://github.com/mapbox/mapbox-navigation-android/pull/1257) -* Add debug logging support back [#1298](https://github.com/mapbox/mapbox-navigation-android/pull/1298) -* Make last location from replay route location engine null (by default) until the first location is received or assigned explicitly [#1296](https://github.com/mapbox/mapbox-navigation-android/pull/1296) -* [SEMVER] Do not update MockLocationEngine route on rotation [#1289](https://github.com/mapbox/mapbox-navigation-android/pull/1289) -* Fix mock navigation activity leak and fix location puck flying from current location to mock [#1294](https://github.com/mapbox/mapbox-navigation-android/pull/1294) -* [SEMVER] Add location dispatcher to replay raw GPS traces [#1039](https://github.com/mapbox/mapbox-navigation-android/pull/1089) -* Remove sonarqube integration [#1290](https://github.com/mapbox/mapbox-navigation-android/pull/1290) -* Update Maps SDK to 6.5.0 and Events to 3.2.0 [#1241](https://github.com/mapbox/mapbox-navigation-android/pull/1241) -* [SEMVER] Add onNavigationStopped callback for NavigationNotification [#1283](https://github.com/mapbox/mapbox-navigation-android/pull/1283) -* [SEMVER] Added custom rounding increments for formatting distance [#1231](https://github.com/mapbox/mapbox-navigation-android/pull/1231) -* [SEMVER] Simplify will voice api [#1281](https://github.com/mapbox/mapbox-navigation-android/pull/1281) -* Update RouteEngine for NavigationView duplicate starts [#1277](https://github.com/mapbox/mapbox-navigation-android/pull/1277) -* Fix recenter problem with Remove onMoveListener in onDestroy [#1263](https://github.com/mapbox/mapbox-navigation-android/pull/1263) -* Update Milestone javadoc to explain ignored trigger behavior [#1269](https://github.com/mapbox/mapbox-navigation-android/pull/1269) -* Fix route requests that include waypoint names [#1260](https://github.com/mapbox/mapbox-navigation-android/pull/1260) -* Do not allow multiple ViewModel subscriptions in NavigationView [#1275](https://github.com/mapbox/mapbox-navigation-android/pull/1275) -* Update Transfiex Translations [#1258](https://github.com/mapbox/mapbox-navigation-android/pull/1258) -* Do not add Fragments to backstack in FragmentNavigationActivity [#1256](https://github.com/mapbox/mapbox-navigation-android/pull/1256) -* bump location layer plugin version to 0.8.1 [#1252](https://github.com/mapbox/mapbox-navigation-android/pull/1252) -* fix route leg progress current leg annotation javadoc broken link [#1250](https://github.com/mapbox/mapbox-navigation-android/pull/1250) -* Save and restore map state on rotation for way name and camera tracking [#1215](https://github.com/mapbox/mapbox-navigation-android/pull/1215) -* Add example with MapboxNavigation driving separate UI components [#1219](https://github.com/mapbox/mapbox-navigation-android/pull/1219) -* Update NavigationView to guard against duplicate initializations [#1247](https://github.com/mapbox/mapbox-navigation-android/pull/1247) -* [SEMVER] Add NavigationViewOption for default or custom SpeechPlayer [#1232](https://github.com/mapbox/mapbox-navigation-android/pull/1232) -* Added Burmese, Finnish, Korean, Norwegian guidance -* Add toggles in NavigationMapboxMap for traffic and incident data [#1226](https://github.com/mapbox/mapbox-navigation-android/pull/1226) -* Update Map styles to V4 with incident coverage [#1234](https://github.com/mapbox/mapbox-navigation-android/pull/1234) -* Add initialization logic for null RouteOptions [#1229](https://github.com/mapbox/mapbox-navigation-android/pull/1229) -* add open pending intent which brings the existing task (activity) to the foreground when clicking the notification [#1221](https://github.com/mapbox/mapbox-navigation-android/pull/1221) - -### v0.18.0 - August 24, 2018 - -* Add toggles in NavigationMapboxMap for traffic and incident data [#1226](https://github.com/mapbox/mapbox-navigation-android/pull/1226) -* Update Map styles to V4 with incident coverage [#1234](https://github.com/mapbox/mapbox-navigation-android/pull/1234) -* Add initialization logic for null RouteOptions [#1229](https://github.com/mapbox/mapbox-navigation-android/pull/1229) -* Reopen the app when when clicking the whole notification [#1221](https://github.com/mapbox/mapbox-navigation-android/pull/1221) -* Update Maps SDK to 6.4.0 and Events to 3.1.5 [#1220](https://github.com/mapbox/mapbox-navigation-android/pull/1220) -* Do not scroll Instruction RecyclerView while animating [#1214](https://github.com/mapbox/mapbox-navigation-android/pull/1214) -* Only reset night mode for EmbeddedNavigationActivity when isFinishing [#1213](https://github.com/mapbox/mapbox-navigation-android/pull/1213) -* Add Boolean in MapboxSpeechPlayer to prevent IllegalStateException [#1212](https://github.com/mapbox/mapbox-navigation-android/pull/1212) - -### v0.17.0 - August 10, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. - -* Bump MAS version to 3.4.1 [#1203](https://github.com/mapbox/mapbox-navigation-android/pull/1203) -* Notify InstructionListAdapter after animation finishes [#1143](https://github.com/mapbox/mapbox-navigation-android/pull/1143) -* Revert MAS version from 3.4.0 to 3.3.0 [#1200](https://github.com/mapbox/mapbox-navigation-android/pull/1200) -* Update Java SDK to 3.4.0 [#1196](https://github.com/mapbox/mapbox-navigation-android/pull/1196) -* [SEMVER] Allow access to NavigationMapboxMap and MapboxNavigation [#1179](https://github.com/mapbox/mapbox-navigation-android/pull/1179) -* Retrieve feedback Strings from Resources [#1194](https://github.com/mapbox/mapbox-navigation-android/pull/1194) -* Update README Snapshot [#1186](https://github.com/mapbox/mapbox-navigation-android/pull/1186) -* Add gradle-versions-plugin to the project [#1187](https://github.com/mapbox/mapbox-navigation-android/pull/1187) -* Add a null check to prevent NPE in NavigationViewModel onDestroy [#1192](https://github.com/mapbox/mapbox-navigation-android/pull/1192) -* [SEMVER] Remove Location filter and check Location#getAccuracy [#1157](https://github.com/mapbox/mapbox-navigation-android/pull/1157) -* Provide example of showing and hiding Fragment with NavigationView [#1113](https://github.com/mapbox/mapbox-navigation-android/pull/1113) -* Added InstanceState to simplify saving the state [#1162](https://github.com/mapbox/mapbox-navigation-android/pull/1162) -* Fix OffRoute engine cleared before service shutdown [#1167](https://github.com/mapbox/mapbox-navigation-android/pull/1167) -* Transifex Updates [#1145](https://github.com/mapbox/mapbox-navigation-android/pull/1145) -* Fix SpeechAnnouncementListener example and add tests [#1166](https://github.com/mapbox/mapbox-navigation-android/pull/1166) -* Update dependencies LLP, ConstraintLayout [#1172](https://github.com/mapbox/mapbox-navigation-android/pull/1172) -* Consolidate InstructionView DistanceFormatters [#1174](https://github.com/mapbox/mapbox-navigation-android/pull/1174) -* Add ETA support for the notification back [#1184](https://github.com/mapbox/mapbox-navigation-android/pull/1184) -* Fix exception when adding routes in NavigationMapRoute [#1150](https://github.com/mapbox/mapbox-navigation-android/pull/1150) -* Check dispatcher on announcement and instruction events in ViewModel [#1152](https://github.com/mapbox/mapbox-navigation-android/pull/1152) -* Update LeakCanary to 1.6.1 [#1181](https://github.com/mapbox/mapbox-navigation-android/pull/1181) -* Re-initialize arrow sources in NavigationMapRoute after style loaded [#1180](https://github.com/mapbox/mapbox-navigation-android/pull/1180) -* Use application Context for CustomNavigationNotification example [#1182](https://github.com/mapbox/mapbox-navigation-android/pull/1182) -* Update README.md with UI build.gradle instructions [#1148](https://github.com/mapbox/mapbox-navigation-android/pull/1148) -* Add maneuver view roundabout angle bottom limit [#1144](https://github.com/mapbox/mapbox-navigation-android/pull/1144) -* Use roundabout degrees for "then" step in InstructionView [#1141](https://github.com/mapbox/mapbox-navigation-android/pull/1141) -* Remove navigation listeners before clearing NavigationEngineFactory [#1140](https://github.com/mapbox/mapbox-navigation-android/pull/1140) -* Prevent to use the map route until the map is ready and the route fetched [#1134](https://github.com/mapbox/mapbox-navigation-android/pull/1134) - -### v0.16.0 - July 20, 2018 - -Note: This release breaks `SEMVER` / contains API breaking changes. - -* Fixed error by only accepting SUCCESS state [#1127](https://github.com/mapbox/mapbox-navigation-android/pull/1127) -* Make navigation map null when shutting navigation view down [#1125](https://github.com/mapbox/mapbox-navigation-android/pull/1125) -* Update Maps SDK 6.3.0 and Telem 3.1.4 [#1124](https://github.com/mapbox/mapbox-navigation-android/pull/1124) -* Fix IllegalArgumentException when updating InstructionList [#1123](https://github.com/mapbox/mapbox-navigation-android/pull/1123) -* [SEMVER] Update MapboxNavigationNotification to consider 24 hour time formatting [#1115](https://github.com/mapbox/mapbox-navigation-android/pull/1123) -* Prevent route overview animation with insufficient route data [#1120](https://github.com/mapbox/mapbox-navigation-android/pull/1120) -* Prevent NavigationNotification update after unregistered [#1118](https://github.com/mapbox/mapbox-navigation-android/pull/1118) -* Refactor InstructionListAdapter and limit roundabout degrees in ManeuverView [#1064](https://github.com/mapbox/mapbox-navigation-android/pull/1064) -* Improve catching low point amounts [#1122](https://github.com/mapbox/mapbox-navigation-android/pull/1122) -* Simplify find current banner and voice instructions algorithms [#1117](https://github.com/mapbox/mapbox-navigation-android/pull/1117) -* Update TimeFormatter to include localized Strings [#1106](https://github.com/mapbox/mapbox-navigation-android/pull/1106) -* Add InstructionListener for intercepting Voice / Banner Instructions [#1107](https://github.com/mapbox/mapbox-navigation-android/pull/1107) -* NavigationService refactor and tests [#1066](https://github.com/mapbox/mapbox-navigation-android/pull/1066) -* Add dual navigation map example to the test app [#1092](https://github.com/mapbox/mapbox-navigation-android/pull/1092) -* Update LocationLayerPlugin 0.6.0 [#1102](https://github.com/mapbox/mapbox-navigation-android/pull/1102) -* Fix navigation camera on start null pointer exception [#1094](https://github.com/mapbox/mapbox-navigation-android/pull/1094) -* Fix navigation map route index out of bounds exception [#1093](https://github.com/mapbox/mapbox-navigation-android/pull/1093) -* Ignore arrival checks after route has finished [#1070](https://github.com/mapbox/mapbox-navigation-android/pull/1070) -* Added InstructionView list state to saveInstanceState [#1079](https://github.com/mapbox/mapbox-navigation-android/pull/1079) -* Update Transifex translations [#1088](https://github.com/mapbox/mapbox-navigation-android/pull/1088) -* Rename MapView id included in NavigationView [#1087](https://github.com/mapbox/mapbox-navigation-android/pull/1087) -* Update Transifex translations [#1078](https://github.com/mapbox/mapbox-navigation-android/pull/1078) -* Update navigation view activity (from the test app) naming [#1076](https://github.com/mapbox/mapbox-navigation-android/pull/1076) -* Add end navigation functionality to navigation view [#959](https://github.com/mapbox/mapbox-navigation-android/pull/959) -* Fix voiceLanguage NPE and add tests for NavigationSpeechPlayer [#1054](https://github.com/mapbox/mapbox-navigation-android/pull/1054) -* Fix vector drawables for < API 21 in test Application [#1067](https://github.com/mapbox/mapbox-navigation-android/pull/1067) -* Re-did the navigation notification layout [#1059](https://github.com/mapbox/mapbox-navigation-android/pull/1059) -* Setup AppCompatDelegate night mode to automatic [#1063](https://github.com/mapbox/mapbox-navigation-android/pull/1063) -* Fix upcoming maneuver arrow underneath road labels [#1053](https://github.com/mapbox/mapbox-navigation-android/pull/1053) - -### v0.15.0 - June 21, 2018 - -* Use theme attribute to update MapView map style URL [#1018](https://github.com/mapbox/mapbox-navigation-android/pull/1018) -* Remove setting voiceLanguage / voice unitType in RouteFetcher [#1046](https://github.com/mapbox/mapbox-navigation-android/pull/1046) -* Add distance remaining buffer to show first instruction immediately [#1043](https://github.com/mapbox/mapbox-navigation-android/pull/1043) -* Revert maps SDK version to 6.1.3 [#1044](https://github.com/mapbox/mapbox-navigation-android/pull/1044) -* Update Maps SDK to 6.2.0 [#1042](https://github.com/mapbox/mapbox-navigation-android/pull/1042) -* Update to MAS 3.3.0 and add approaches / waypointNames to NavigationRoute [#996](https://github.com/mapbox/mapbox-navigation-android/pull/996) -* Fix upcoming arrow is drawn over annotations [#1041](https://github.com/mapbox/mapbox-navigation-android/pull/1041) -* Added error logging for API voice errors [#1036](https://github.com/mapbox/mapbox-navigation-android/pull/1036) -* Removed AndroidSpeechPlayer.UtteranceProgressListener and replaced wi… [#1017](https://github.com/mapbox/mapbox-navigation-android/pull/1017) -* Added check for whether a language is supported by API voice before d… [#1004](https://github.com/mapbox/mapbox-navigation-android/pull/1004) -* Updated NavigationRoute.language to take a Locale [#1025](https://github.com/mapbox/mapbox-navigation-android/pull/1025) -* Add route overview button and animation to NavigationView [#967](https://github.com/mapbox/mapbox-navigation-android/pull/967) -* NavigationViewEventDispatcher remove navigation listeners in onDestroy [#1013](https://github.com/mapbox/mapbox-navigation-android/pull/1013) -* Fixed issue where map still had focus when instruction list was visib… [#1014](https://github.com/mapbox/mapbox-navigation-android/pull/1014) -* Remove origin, destination, unit type and locale from nav options [#965](https://github.com/mapbox/mapbox-navigation-android/pull/965) -* Remove metric arrival event reset for multiple waypoints [#1022](https://github.com/mapbox/mapbox-navigation-android/pull/1022) -* Check for valid name property value in MapWayname [#1031](https://github.com/mapbox/mapbox-navigation-android/pull/1031) -* Update NavigationActivity naming to avoid naming collisions [#1020](https://github.com/mapbox/mapbox-navigation-android/pull/1020) -* Hide way name when camera is not tracking Location [#1027](https://github.com/mapbox/mapbox-navigation-android/pull/1027) -* Add check to remove listener from location engine in NavigationService [#1026](https://github.com/mapbox/mapbox-navigation-android/pull/1026) -* Fixed overlapping of button and compass by wrapping button content [#990](https://github.com/mapbox/mapbox-navigation-android/pull/990) -* Add missing arrival ManeuverViewMap pair [#1007](https://github.com/mapbox/mapbox-navigation-android/pull/1007) -* Remove attempt to place route source when style layers are null [#1006](https://github.com/mapbox/mapbox-navigation-android/pull/1006) -* Update LocationLayerPlugin to 0.5.3, MAS 3.2.0 [#1010](https://github.com/mapbox/mapbox-navigation-android/pull/1010) -* Added extra call to onError for cases where a response is received bu… [#997](https://github.com/mapbox/mapbox-navigation-android/pull/997) -* Added InstructionViewCallback to allow views to be alerted when the in… [#988](https://github.com/mapbox/mapbox-navigation-android/pull/988) -* Update repositories block in build.gradle to have google() as the first entry [#1000](https://github.com/mapbox/mapbox-navigation-android/pull/1000) -* Add wayname underneath navigation puck [#953](https://github.com/mapbox/mapbox-navigation-android/pull/953) -* Add upcoming maneuver arrow on the route line [#934](https://github.com/mapbox/mapbox-navigation-android/pull/934) -* Update InstructionView with BannerMilestone only with callback [#969](https://github.com/mapbox/mapbox-navigation-android/pull/969) -* Added onOffRoute call and removed queue from NavigationInstructionPlayer [#986](https://github.com/mapbox/mapbox-navigation-android/pull/986) -* Example cleanup [#987](https://github.com/mapbox/mapbox-navigation-android/pull/987) -* Check distance remaining before running OffRouteDetector logic [#977](https://github.com/mapbox/mapbox-navigation-android/pull/977) -* Add try catch when obtaining FragmentManager in InstructionView [#973](https://github.com/mapbox/mapbox-navigation-android/pull/973) - -### v0.14.0 - May 30, 2018 - -* Always provide DirectionsRoute in NavigationActivity [#980](https://github.com/mapbox/mapbox-navigation-android/pull/980) -* Update Maps SDK to 6.1.3 and Events library to 3.1.2 [#975](https://github.com/mapbox/mapbox-navigation-android/pull/975) -* Add List of Milestones to NavigationViewOptions [#974](https://github.com/mapbox/mapbox-navigation-android/pull/974) -* Remove origin, destination, unit type and locale from nav options [#965](https://github.com/mapbox/mapbox-navigation-android/pull/965) -* Update Maps SDK 6.1.2 [#962](https://github.com/mapbox/mapbox-navigation-android/pull/962) -* Disable debug logging for Telemetry and Image loading [#961](https://github.com/mapbox/mapbox-navigation-android/pull/961) -* Reset EventDispatcher in onDestroy [#954](https://github.com/mapbox/mapbox-navigation-android/pull/954) -* Fix link in CONTRIBUTING.md [#952](https://github.com/mapbox/mapbox-navigation-android/pull/952) -* Fix navigation guidance styles keys [#948](https://github.com/mapbox/mapbox-navigation-android/pull/948) -* Resume navigation state based on MapboxNavigation running [#946](https://github.com/mapbox/mapbox-navigation-android/pull/946) -* Initialize ViewModel EventDispatcher in NavigationView constructor [#945](https://github.com/mapbox/mapbox-navigation-android/pull/945) -* Add NavigationHelper check for valid step points using lineSlice [#944](https://github.com/mapbox/mapbox-navigation-android/pull/944) -* Use last BannerInstruction for arrival event [#943](https://github.com/mapbox/mapbox-navigation-android/pull/943) -* Downgrade min sdk version to 14 [#942](https://github.com/mapbox/mapbox-navigation-android/pull/942) -* Remove onStyleLoaded Callback in NavigationView [#939](https://github.com/mapbox/mapbox-navigation-android/pull/939) -* Update ConstraintLayout, Support Lib, and LocationLayerPlugin dependencies [#938](https://github.com/mapbox/mapbox-navigation-android/pull/938) -* Update translation Strings and add Burmese [#937](https://github.com/mapbox/mapbox-navigation-android/pull/937) -* Check for valid BannerInstructions when milestones are enabled [#936](https://github.com/mapbox/mapbox-navigation-android/pull/936) -* Added null check to make sure a file is actually returned [#925](https://github.com/mapbox/mapbox-navigation-android/pull/925) -* Update to Guidance V3 Map Styles [#917](https://github.com/mapbox/mapbox-navigation-android/pull/917) -* Check NavigationOptions in NavigationService [#916](https://github.com/mapbox/mapbox-navigation-android/pull/916) -* Remove AWS Polly dependency not needed anymore [#914](https://github.com/mapbox/mapbox-navigation-android/pull/914) -* Update localization.md [#913](https://github.com/mapbox/mapbox-navigation-android/pull/913) -* Dynamic abbreviations in banner instructions [#887](https://github.com/mapbox/mapbox-navigation-android/pull/887) - -### v0.13.0 - May 2, 2018 - -* Add missing uturn step maneuver modifier to should flip modifiers set [#908](https://github.com/mapbox/mapbox-navigation-android/pull/909) -* Bump Mapbox SDK Services to 3.1.0 version [#907](https://github.com/mapbox/mapbox-navigation-android/pull/907) -* Reverse maneuver sharp left resource [#905](https://github.com/mapbox/mapbox-navigation-android/pull/905) -* Fixed bug where we weren't checking if the unit type changed before l… [#896](https://github.com/mapbox/mapbox-navigation-android/pull/896) -* Remove use of LiveData for fetching DirectionsRoute and updating Location [#894](https://github.com/mapbox/mapbox-navigation-android/pull/894) -* Update String resources with new Transifex translations [#889](https://github.com/mapbox/mapbox-navigation-android/pull/889) -* Cancel delayed transitions when InstructionView is detached [#885](https://github.com/mapbox/mapbox-navigation-android/pull/885) -* Remove app name String resource from libandroid-navigation [#884](https://github.com/mapbox/mapbox-navigation-android/pull/884) -* Update localization.md [#881](https://github.com/mapbox/mapbox-navigation-android/pull/881) -* Fix Feedback FAB margins [#878](https://github.com/mapbox/mapbox-navigation-android/pull/878) -* Update new Transifex translation Strings [#870](https://github.com/mapbox/mapbox-navigation-android/pull/870) -* Check for null camera engine before returning from MapboxNavigation [#866](https://github.com/mapbox/mapbox-navigation-android/pull/866) -* Update Maps SDK 5.5.2 [#865](https://github.com/mapbox/mapbox-navigation-android/pull/865) -* Added null check for race condition when deleting instruction files [#860](https://github.com/mapbox/mapbox-navigation-android/pull/860) -* Add null start timestamp check for metric events [#857](https://github.com/mapbox/mapbox-navigation-android/pull/857) -* Add NavigationLauncherOption snap-to-route enabled [#856](https://github.com/mapbox/mapbox-navigation-android/pull/856) -* Use BannerText roundabout degrees + Banner and Voice Milestone Tests [#854](https://github.com/mapbox/mapbox-navigation-android/pull/854) -* Added null checks in case the user isn't using voice instructions [#852](https://github.com/mapbox/mapbox-navigation-android/pull/852) -* Add gradle-dependency-graph-generator-plugin to the project [#850](https://github.com/mapbox/mapbox-navigation-android/pull/850) -* Remove draw routes and add direction waypoints calls already being called [#849](https://github.com/mapbox/mapbox-navigation-android/pull/849) -* Add AutoValue Proguard rule [#838](https://github.com/mapbox/mapbox-navigation-android/pull/838) -* Validate route profile passed into RouteViewModel [#829](https://github.com/mapbox/mapbox-navigation-android/pull/829) -* Remove NavigationCamera ProgressChangeListener as public api [#828](https://github.com/mapbox/mapbox-navigation-android/pull/828) -* Upgrade RouteProgress Step Data [#812](https://github.com/mapbox/mapbox-navigation-android/pull/812) -* Integrate API Voice [#751](https://github.com/mapbox/mapbox-navigation-android/pull/751) - -### v0.12.0 - April 3, 2018 - -* Add MapboxNavigationOptions to adjust location validation thresholds [#818](https://github.com/mapbox/mapbox-navigation-android/pull/818) -* Set default driving profile and check for empty profile [#816](https://github.com/mapbox/mapbox-navigation-android/pull/816) -* Update to MAS 3.0.1 [#815](https://github.com/mapbox/mapbox-navigation-android/pull/815) -* Added safety for NONE_SPECIFIED type for voice units [#811](https://github.com/mapbox/mapbox-navigation-android/pull/811) -* Add stick to chosen route when re-routing with UI functionality [#808](https://github.com/mapbox/mapbox-navigation-android/pull/808) -* Remove NavigationView lifecycle observer and add Fragment Example [#806](https://github.com/mapbox/mapbox-navigation-android/pull/806) -* Add 12/24 hour format Navigation View Option [#805](https://github.com/mapbox/mapbox-navigation-android/pull/805) -* Fixed unit type was defaulting to imperial [#804](https://github.com/mapbox/mapbox-navigation-android/pull/804) -* Update ISSUE_TEMPLATE.md [#798](https://github.com/mapbox/mapbox-navigation-android/pull/798) -* Decrease Robo tests time to 5 minutes [#795](https://github.com/mapbox/mapbox-navigation-android/pull/795) -* Send departure event with a valid distance traveled [#789](https://github.com/mapbox/mapbox-navigation-android/pull/789) -* Remove last location check from location validation [#788](https://github.com/mapbox/mapbox-navigation-android/pull/788) -* Add localization instructions [#785](https://github.com/mapbox/mapbox-navigation-android/pull/785) -* Extract NavigationEngine processing logic and add tests [#784](https://github.com/mapbox/mapbox-navigation-android/pull/784) -* Fix OffRoute detection disabled bug [#783](https://github.com/mapbox/mapbox-navigation-android/pull/783) -* Create separate options for Launcher and View [#782](https://github.com/mapbox/mapbox-navigation-android/pull/782) -* Create LocationValidator for checking new location updates [#690](https://github.com/mapbox/mapbox-navigation-android/pull/690) - -### v0.11.1 - March 16, 2018 - -* Adjust sound layout margin [#775](https://github.com/mapbox/mapbox-navigation-android/pull/775) -* Fix distancesFromManeuver not being cleared [#773](https://github.com/mapbox/mapbox-navigation-android/pull/773) -* Allow setting of custom destination marker in theme [#763](https://github.com/mapbox/mapbox-navigation-android/pull/763) -* Fixed back button in NavigationViewActivity [#768](https://github.com/mapbox/mapbox-navigation-android/pull/768) -* Fixed unit type bug [#769](https://github.com/mapbox/mapbox-navigation-android/pull/769) -* Fix MapRoute listener not firing for index 0 [#772](https://github.com/mapbox/mapbox-navigation-android/pull//772) -* Stop scroll of InstructionList before hiding [#766](https://github.com/mapbox/mapbox-navigation-android/pull/766) -* Add baseUrl to NavigationRoute and Turf conversion [#767](https://github.com/mapbox/mapbox-navigation-android/pull/767) -* Force first location update without last location [#756](https://github.com/mapbox/mapbox-navigation-android/pull/756) -* Update EventListener Thread Safe [#762](https://github.com/mapbox/mapbox-navigation-android/pull/762) -* Create camera animation from time between updates [#753](https://github.com/mapbox/mapbox-navigation-android/pull/753) -* NavigationView Landscape Optimizations [#749](https://github.com/mapbox/mapbox-navigation-android/pull/749) - -### v0.11.0 - March 7, 2018 - -* Fix same point being added twice for LatLngBounds [#741](https://github.com/mapbox/mapbox-navigation-android/pull/741) -* Fix Recent Distances from maneuver Off-Route [#739](https://github.com/mapbox/mapbox-navigation-android/pull/739) -* Update MAS Dependencies [#738](https://github.com/mapbox/mapbox-navigation-android/pull/738) -* Update LocationLayerPlugin to 0.4.0 [#734](https://github.com/mapbox/mapbox-navigation-android/pull/734) -* Fix visibility bug with TurnLanes [#733](https://github.com/mapbox/mapbox-navigation-android/pull/733) -* Update Maps SDK 5.5.0 [#732](https://github.com/mapbox/mapbox-navigation-android/pull/732) -* Show first BannerInstruction immediately [#731](https://github.com/mapbox/mapbox-navigation-android/pull/731) -* Fix initialization of directions list [#728](https://github.com/mapbox/mapbox-navigation-android/pull/728) -* Default Dynamic Camera for Navigation UI [#679](https://github.com/mapbox/mapbox-navigation-android/pull/679) - -### v0.10.0 - February 26, 2018 - -* Fix NPE with MapRoute click listener [#721](https://github.com/mapbox/mapbox-navigation-android/pull/721) -* Null check camera tracking [#719](https://github.com/mapbox/mapbox-navigation-android/pull/719) -* Initialize metric session state in constructor [#718](https://github.com/mapbox/mapbox-navigation-android/pull/718) - -### v0.10.0-beta.1 - February 16, 2018 - -* Clear features so DirectionsRoute isn't redrawn when new style loads [#706](https://github.com/mapbox/mapbox-navigation-android/pull/706) -* Fix bug with MapRoute onClick [#703](https://github.com/mapbox/mapbox-navigation-android/pull/703) -* Fix flashing InstructionView list during re-routes [#700](https://github.com/mapbox/mapbox-navigation-android/pull/700) -* Fix FeedbackBottomSheet rotation bug [#699](https://github.com/mapbox/mapbox-navigation-android/pull/699) -* Check Turn / Then Banner on each update [#696](https://github.com/mapbox/mapbox-navigation-android/pull/696) -* Instructions based on locale [#691](https://github.com/mapbox/mapbox-navigation-android/pull/691) -* Cancel animation if AlertView detaches while running [#689](https://github.com/mapbox/mapbox-navigation-android/pull/689) -* Add bearing to RouteEngine requests [#687](https://github.com/mapbox/mapbox-navigation-android/pull/687) -* LocationViewModel obtain best LocationEngine [#685](https://github.com/mapbox/mapbox-navigation-android/pull/685) -* Dependencies Bump [#684](https://github.com/mapbox/mapbox-navigation-android/pull/684) -* Fix issue with startup in Night Mode [#683](https://github.com/mapbox/mapbox-navigation-android/pull/683) -* Cache route options / calculate remaining waypoints [#680](https://github.com/mapbox/mapbox-navigation-android/pull/680) -* Switched setOnMapClickListener() to addOnMapClickListener() [#672](https://github.com/mapbox/mapbox-navigation-android/pull/672) -* Locale distance formatter [#668](https://github.com/mapbox/mapbox-navigation-android/pull/668) -* Off-Route Bug Fixes [#667](https://github.com/mapbox/mapbox-navigation-android/pull/667) -* Update Default Zoom Level [#655](https://github.com/mapbox/mapbox-navigation-android/pull/655) - -### v0.9.0 - January 23, 2018 - -* Update Maps and Services dependencies [#661](https://github.com/mapbox/mapbox-navigation-android/pull/661) -* Add Maneuver type exit rotary constant [#653](https://github.com/mapbox/mapbox-navigation-android/pull/653) -* Moved WaypointNavigationActivity from the SDK to the test app [#652](https://github.com/mapbox/mapbox-navigation-android/pull/652) -* NavigationTelemetry update cue for changing configurations [#648](https://github.com/mapbox/mapbox-navigation-android/pull/648) -* Remove duplicate ViewModel updates [#647](https://github.com/mapbox/mapbox-navigation-android/pull/647) -* Track initialization of NavigationView [#646](https://github.com/mapbox/mapbox-navigation-android/pull/646) -* Update Maps SDK to 5.3.1 [#645](https://github.com/mapbox/mapbox-navigation-android/pull/645) -* Check for null directions route or geometry in SessionState [#643](https://github.com/mapbox/mapbox-navigation-android/pull/643) -* Remove NavigationViewModel as lifecycle observer [#643](https://github.com/mapbox/mapbox-navigation-android/pull/643) -* Exposes the MapboxMap in NavigationView with a getter method [#642](https://github.com/mapbox/mapbox-navigation-android/pull/642) -* Package delivery/ride sharing waypoint demo [#641](https://github.com/mapbox/mapbox-navigation-android/pull/641) -* Removed boolean that was preventing subsequent navigation sessions [#640](https://github.com/mapbox/mapbox-navigation-android/pull/640) -* Add FasterRouteDetector to check for quicker routes while navigating [#638](https://github.com/mapbox/mapbox-navigation-android/pull/638) -* Notification check for valid BannerInstructions before updating [#637](https://github.com/mapbox/mapbox-navigation-android/pull/637) -* Check for at least two coordinates when creating snapped location [#636](https://github.com/mapbox/mapbox-navigation-android/pull/636) -* Add language to NavigationViewOptions with default from RouteOptions [#635](https://github.com/mapbox/mapbox-navigation-android/pull/635) -* Add onDestroy as a method that must be implemented for NavigationView [#632](https://github.com/mapbox/mapbox-navigation-android/pull/632) -* Check for network connection before setting off-route [#631](https://github.com/mapbox/mapbox-navigation-android/pull/631) -* Add NavigationView style attribute for custom LocationLayer [#627](https://github.com/mapbox/mapbox-navigation-android/pull/627) -* Replace setOnScroll (now deprecated) with addOnScroll [#626](https://github.com/mapbox/mapbox-navigation-android/pull/626) -* Check for IndexOutOfBounds when calculating foreground percentage [#625](https://github.com/mapbox/mapbox-navigation-android/pull/625) -* Fix for listener bug [#620](https://github.com/mapbox/mapbox-navigation-android/pull/620) - -### v0.8.0 - December 20, 2017 - -* Update Maps SDK to 5.3.0 [#617](https://github.com/mapbox/mapbox-navigation-android/pull/617) -* Expose listeners in the NavigationView [#614](https://github.com/mapbox/mapbox-navigation-android/pull/614) -* Null check light / dark theme from NavigationLauncher [#613](https://github.com/mapbox/mapbox-navigation-android/pull/613) -* Add SSML parameter to Polly request [#612](https://github.com/mapbox/mapbox-navigation-android/pull/612) - -### v0.8.0-beta.1 - December 15, 2017 - -* Allow theme setting from NavigationViewOptions [#595](https://github.com/mapbox/mapbox-navigation-android/pull/595) -* Fix issue NavigationView simulation [#594](https://github.com/mapbox/mapbox-navigation-android/pull/594) -* Remove preference setup for unit type in RouteViewModel [#593](https://github.com/mapbox/mapbox-navigation-android/pull/593) -* Create other map issue in feedback adapter [#592](https://github.com/mapbox/mapbox-navigation-android/pull/592) -* Remove specified layer for map route [#590](https://github.com/mapbox/mapbox-navigation-android/pull/590) -* Guard against IndexOutOfBounds when updating last reroute event [#589](https://github.com/mapbox/mapbox-navigation-android/pull/589) -* Set original and current request identifier [#585](https://github.com/mapbox/mapbox-navigation-android/pull/585) -* Add SSML announcement option for VoiceInstructionMilestone [#584](https://github.com/mapbox/mapbox-navigation-android/pull/584) -* Remove duplicate subscriptions to the ViewModels [#583](https://github.com/mapbox/mapbox-navigation-android/pull/583) -* Return Milestone instead of identifier [#579](https://github.com/mapbox/mapbox-navigation-android/pull/579) -* DirectionsProfile for reroutes in NavigationView [#575](https://github.com/mapbox/mapbox-navigation-android/pull/575) -* Add custom notification support [#564](https://github.com/mapbox/mapbox-navigation-android/pull/564) - -### v0.7.1 - December 6, 2017 - -Note: This release breaks `SEMVER` / contains API breaking changes. - -* Fix NPE with reroute metric events [#565](https://github.com/mapbox/mapbox-navigation-android/pull/565) -* Adjust metric listener reset [#566](https://github.com/mapbox/mapbox-navigation-android/pull/566) -* Update distance completed in off-route scenario [#568](https://github.com/mapbox/mapbox-navigation-android/pull/568) -* Update Maps SDK to `5.2.1` [#570](https://github.com/mapbox/mapbox-navigation-android/pull/570) - -### v0.7.1-beta.1 - December 1, 2017 - -* Expanded the width of route lines when zoomed out -* Added support for displaying alternative routes on map -* Adds exclude, voiceUnits, and banner instruction info to request/response [#500](https://github.com/mapbox/mapbox-navigation-android/pull/500) -* [SEMVER] Add Imperial / Metric support for UI & Notification [#501](https://github.com/mapbox/mapbox-navigation-android/pull/501) -* Add NavigationView as a lifecycle observer [#506](https://github.com/mapbox/mapbox-navigation-android/pull/506) -* Add Custom themes via XML for light / dark mode [#507](https://github.com/mapbox/mapbox-navigation-android/pull/507) -* Navigation Metrics Refactor [#511](https://github.com/mapbox/mapbox-navigation-android/pull/511) -* Add software layer type programmatically for Maneuver and Lane View [#514](https://github.com/mapbox/mapbox-navigation-android/pull/514) -* Use NavigationViewOptions in NavigationLauncher [#524](https://github.com/mapbox/mapbox-navigation-android/pull/524) -* Lifecycle aware Navigation Metrics [#540](https://github.com/mapbox/mapbox-navigation-android/pull/540) - -### v0.7.0 - November 13, 2017 - -* Updated to Mapbox Java 3.0 [#373](https://github.com/mapbox/mapbox-navigation-android/pull/373) -* Update InstructionView with secondary TextView [#404](https://github.com/mapbox/mapbox-navigation-android/pull/404) -* Fixed issue with bearing values in route requests [#408](https://github.com/mapbox/mapbox-navigation-android/pull/408) -* Updates and docs for NavigationRoute [#413](https://github.com/mapbox/mapbox-navigation-android/pull/413) -* Fixed native crash with initialization of navigation UI [#423](https://github.com/mapbox/mapbox-navigation-android/pull/423) -* Add validation utils class [#424](https://github.com/mapbox/mapbox-navigation-android/pull/424) -* Cancel notification when service is destroyed [#409](https://github.com/mapbox/mapbox-navigation-android/pull/409) -* Adjust API Milestone to handle new routes [#425](https://github.com/mapbox/mapbox-navigation-android/pull/425) -* Replaced maneuver arrows with custom StyleKit [#362](https://github.com/mapbox/mapbox-navigation-android/pull/362) -* Dynamic reroute tolerance [#428](https://github.com/mapbox/mapbox-navigation-android/pull/428) -* Add Telem location engine class name [#401](https://github.com/mapbox/mapbox-navigation-android/pull/401) -* Fixed snap to route object for snapped location [#434](https://github.com/mapbox/mapbox-navigation-android/pull/434) -* Directions list as dropdown [#415](https://github.com/mapbox/mapbox-navigation-android/pull/415) -* Feedback UI [#383](https://github.com/mapbox/mapbox-navigation-android/pull/383) -* Fixed bearing values not matching number of coordinates [#435](https://github.com/mapbox/mapbox-navigation-android/pull/435) -* Updated to new TurfConversion class [#440](https://github.com/mapbox/mapbox-navigation-android/pull/440) -* Removes duplicate check and adds test for new route [#443](https://github.com/mapbox/mapbox-navigation-android/pull/443) -* Show / hide recenter button when direction list is showing / hiding [#441](https://github.com/mapbox/mapbox-navigation-android/pull/441) -* Current step removed from instruction list [#444](https://github.com/mapbox/mapbox-navigation-android/pull/444) -* Change feedback timing [#442](https://github.com/mapbox/mapbox-navigation-android/pull/442) -* Updated Maneuver Icons [#445](https://github.com/mapbox/mapbox-navigation-android/pull/445) -* Fixed ordering of the bearings [#455](https://github.com/mapbox/mapbox-navigation-android/pull/455) -* "Then" Banner Instruction [#456](https://github.com/mapbox/mapbox-navigation-android/pull/456) -* NavigationQueueContainer Class to manage reroute and feedback queues [#457](https://github.com/mapbox/mapbox-navigation-android/pull/457) -* Update Turn lane Views to use StyleKit [#466](https://github.com/mapbox/mapbox-navigation-android/pull/466) -* Upgraded to Gradle 3.0 [#453](https://github.com/mapbox/mapbox-navigation-android/pull/453) -* Fixed up a few issues preventing all direction routes from working [#469](https://github.com/mapbox/mapbox-navigation-android/pull/469) -* AlertView integrated with post-reroute feedback [#470](https://github.com/mapbox/mapbox-navigation-android/pull/470) -* Fix leak when closing app with bottomsheet showing [#472](https://github.com/mapbox/mapbox-navigation-android/pull/472) -* Added issue template [#418](https://github.com/mapbox/mapbox-navigation-android/pull/418) -* Check for null raw location before setting bearing [#476](https://github.com/mapbox/mapbox-navigation-android/pull/476) -* Update location layer to 0.2.0 and re-add as lifecycle observe [#473](https://github.com/mapbox/mapbox-navigation-android/pull/473) -* Check for null or empty String speechUrl before playing [#475](https://github.com/mapbox/mapbox-navigation-android/pull/475) -* Create SpanUtil and SpanItem to more easily format Strings [#477](https://github.com/mapbox/mapbox-navigation-android/pull/477) -* Initialize click listeners after presenter / viewmodel is set [#481](https://github.com/mapbox/mapbox-navigation-android/pull/481) -* Fix bug with bottomsheet not hiding in night mode [#483](https://github.com/mapbox/mapbox-navigation-android/pull/483) -* Adjust Instruction Content Layout XML [#465](https://github.com/mapbox/mapbox-navigation-android/pull/465) -* Add telem absolute distance to destination track support [#427](https://github.com/mapbox/mapbox-navigation-android/pull/427) -* Fix issue where new route was not being detected [#478](https://github.com/mapbox/mapbox-navigation-android/pull/478) -* Fix bug with bottom sheet behavior null onConfigChange [#490](https://github.com/mapbox/mapbox-navigation-android/pull/490) -* Update lane stylekit and then maneuver bias [#492](https://github.com/mapbox/mapbox-navigation-android/pull/492) -* Add missing javadoc for feedback methods in MapboxNavigation [#493](https://github.com/mapbox/mapbox-navigation-android/pull/493) -* Portrait / landscape instruction layouts are different - only cast to View [#494](https://github.com/mapbox/mapbox-navigation-android/pull/494) - -### v0.6.3 -October 18, 2017 - -* Significant reroute metric fixes [#348](https://github.com/mapbox/mapbox-navigation-android/pull/348) -* Avoid index out of bounds when drawing route line traffic [#384](https://github.com/mapbox/mapbox-navigation-android/pull/384) - -### v0.6.2 - October 7, 2017 - -* Fixed an issue with the Location Engine not being activated correctly inside the Navigation-UI lib [#321](https://github.com/mapbox/mapbox-navigation-android/pull/321) -* Fixed bottom sheet not getting placed correctly when the device is rotated [#320](https://github.com/mapbox/mapbox-navigation-android/pull/320) -* Fixed missing reroute UI when a navigation session reroute occurs [#319](https://github.com/mapbox/mapbox-navigation-android/pull/319) -* Added logic to detect if the user did a u-turn which would require a reroute [#312](https://github.com/mapbox/mapbox-navigation-android/pull/312) -* Revert snap to route logic creating a new Location object which was causing location updates to occasionally get stuck at a maneuver point [#308](https://github.com/mapbox/mapbox-navigation-android/pull/308) -* Restructured the project so the studio projects opened from the root folder rather than having it nested inside the `navigation` folder [#302](https://github.com/mapbox/mapbox-navigation-android/pull/302) -* Notifications fixed for Android Oreo [#298](https://github.com/mapbox/mapbox-navigation-android/pull/298) -* OSRM-text-instructions removed [#288](https://github.com/mapbox/mapbox-navigation-android/pull/288) -* General code cleanup [#287](https://github.com/mapbox/mapbox-navigation-android/pull/287) -* Day and night mode and theme switching functionality added inside the Navigation-UI library [#286](https://github.com/mapbox/mapbox-navigation-android/pull/286) -* Metric reroute added - [#296](https://github.com/mapbox/mapbox-navigation-android/pull/296) - -### v0.6.1 - September 28, 2017 -* Telemetry Updates - -### v0.6.0 - September 21, 2017 -* First iteration of the Navigation UI -* Optimized Navigation features which were causing slowdowns on long steps - [219](https://github.com/mapbox/mapbox-navigation-android/pull/219) -* Only decode step geometry when needed - [215](https://github.com/mapbox/mapbox-navigation-android/pull/215) -* Introduced metrics -* Cleaned up code and fixed several bugs - -### v0.5.0 - August 30, 2017 -* use followonstep inside routeprogress for instruction - [#188](https://github.com/mapbox/mapbox-navigation-android/pull/188) -* Persistent notification [#177](https://github.com/mapbox/mapbox-navigation-android/pull/177) -* Fixes crash occurring ocasionally at end of route - [#175](https://github.com/mapbox/mapbox-navigation-android/pull/175) -* Cleaned up RouteProgress object to use AutoValue builders - [#164](https://github.com/mapbox/mapbox-navigation-android/pull/164) -* Run calculations and cleaned up `MapboxNavigation` class - [#151](https://github.com/mapbox/mapbox-navigation-android/pull/151) - -### v0.4.0 - August 1, 2017 -* Add new alert level concept called, milestones [#84](https://github.com/mapbox/mapbox-navigation-android/pull/84) -* Multiple way point support added [#76](https://github.com/mapbox/mapbox-navigation-android/pull/76) -* Support for congestion along the route [#106](https://github.com/mapbox/mapbox-navigation-android/pull/106) -* Default Milestones and text instructions [#98](https://github.com/mapbox/mapbox-navigation-android/pull/98) and []() -* Several improvements and bug fixes for snap to route logic [#97](https://github.com/mapbox/mapbox-navigation-android/pull/97) -* Only update routeProgress when the user has a speed greater than 0 [#118](https://github.com/mapbox/mapbox-navigation-android/pull/118) -* Add radius to directions route request [#119](https://github.com/mapbox/mapbox-navigation-android/pull/119) -* Remove RouteUtils class [#127](https://github.com/mapbox/mapbox-navigation-android/pull/127) -* Remove hardcoded constant for seconds till reroute [#121](https://github.com/mapbox/mapbox-navigation-android/pull/121) -* Adds support for creating custom instructions for Milestones [#122](https://github.com/mapbox/mapbox-navigation-android/pull/122) -* RouteProgressChange callback will attempt to get instantly invoked when starting if a locations present [#47](https://github.com/mapbox/mapbox-navigation-android/issues/47) -* Upgrade to MAS 2.2.0 [#153](https://github.com/mapbox/mapbox-navigation-android/pull/153) - -### v0.3.1 - June 8, 2017 -* Use AutoValue inside RouteProgress objects [#74](https://github.com/mapbox/mapbox-navigation-android/pull/74) -* Directly use direction distance measurements instead of calculating them. [#125](https://github.com/mapbox/mapbox-navigation-android/pull/125) - -### v0.3 - June 5, 2017 -* Support for [other direction profiles](https://github.com/mapbox/mapbox-navigation-android/pull/63) (cycling and walking) added. -* Fixed [issue with step and leg indexes](https://github.com/mapbox/mapbox-navigation-android/pull/52) not getting restarted when reroute occurred. -* Resolved [issue with second navigation session](https://github.com/mapbox/mapbox-navigation-android/issues/68) not kicking off service again (preventing listeners getting invoked). -* [Added missing MapboxNavigationOptions getter](https://github.com/mapbox/mapbox-navigation-android/pull/62) inside the MapboxNavigation class. - -### v0.2 - May 15, 2017 - -* [`MapboxNavigationOptions`](https://github.com/mapbox/mapbox-navigation-android/blob/master/navigation/libandroid-navigation/src/main/java/com/mapbox/services/android/navigation/v5/MapboxNavigationOptions.java) added allowing for setting navigation variables. -* Fixed issue with Alert Levels not happening at correct timing -* Split `RouteProgress` to [include leg and step progress](https://github.com/mapbox/mapbox-navigation-android/issues/20) classes. -* [Reroute logic refactored.](https://github.com/mapbox/mapbox-navigation-android/pull/30) - -### v0.1 - April 20, 2017 - -* Initial release as a standalone package. +- Mapbox Maps SDK `v11.1.0` ([release notes](https://github.com/mapbox/mapbox-maps-android/releases/tag/v11.1.0)) +- Mapbox Navigation Native `v300.0.1` +- Mapbox Core Common `24.1.0` +- Mapbox Java `v6.15.0` ([release notes](https://github.com/mapbox/mapbox-java/releases/tag/v6.15.0)) diff --git a/LICENSE.md b/LICENSE.md index 1bfaa410841..72246fce6f0 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -22,158 +22,165 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens -#### Hybrid Router SDK module -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +#### Navigation Base SDK module +Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). +URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the auto-value-gson-runtime. +Mapbox Navigation uses portions of the Android App Startup Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.1](https://developer.android.com/jetpack/androidx/releases/startup#1.1.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). -URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) +Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2](https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Converter: Gson. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Arch-Common. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Gson. -License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Arch-Runtime. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) +Mapbox Navigation uses portions of the Android Emoji2 Compat (Core library to enable emoji compatibility in Kitkat and newer devices to avoid the empty emoji characters.). +URL: [https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0](https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Emoji2 Compat view helpers (View helpers for Emoji2). +URL: [https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0](https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Lifecycle LiveData. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Lifecycle Process. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Lifecycle Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Lifecycle ViewModel. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +Mapbox Navigation uses portions of the Android Lifecycle-Common. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Mapbox Java SDK. -URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) +Mapbox Navigation uses portions of the Android Resource Inspection - Annotations (Annotation processors for Android resource and layout inspection). +URL: [https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.0](https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) +Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2](https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the okhttp-logging-interceptor (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) +Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). -URL: [https://github.com/square/okio/](https://github.com/square/okio/) +Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Retrofit. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== +Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +=========================================================================== -#### Navigation Base SDK module -Mapbox Navigation uses portions of the Android App Startup Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.0](https://developer.android.com/jetpack/androidx/releases/startup#1.1.0) +Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). +Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +Mapbox Navigation uses portions of the Android Support VectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -184,6 +191,18 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== +Mapbox Navigation uses portions of the AndroidX Futures (Androidx implementation of Guava's ListenableFuture). +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Annotation (Provides source annotations for tooling and readability.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the auto-value-gson-runtime. License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -201,13 +220,13 @@ License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -217,6 +236,27 @@ License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== +Mapbox Navigation uses portions of the Guava ListenableFuture only (Contains Guava's com.google.common.util.concurrent.ListenableFuture class, + without any of its other classes -- but is also available in a second + "version" that omits the class to avoid conflicts with the copy in Guava + itself. The idea is: + + - If users want only ListenableFuture, they depend on listenablefuture-1.0. + + - If users want all of Guava, they depend on guava, which, as of Guava + 27.0, depends on + listenablefuture-9999.0-empty-to-avoid-conflict-with-guava. The 9999.0-... + version number is enough for some build systems (notably, Gradle) to select + that empty artifact over the "real" listenablefuture-1.0 -- avoiding a + conflict with the copy of ListenableFuture in guava itself. If users are + using an older version of Guava or a build system other than Gradle, they + may see class conflicts. If so, they can solve them by manually excluding + the listenablefuture artifact or manually forcing their build systems to + use 9999.0-....). +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). URL: [http://www.jetbrains.org](http://www.jetbrains.org) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -259,12 +299,6 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen =========================================================================== -Mapbox Navigation uses portions of the Mapbox Android Commmon OkHttp SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) @@ -273,13 +307,13 @@ License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== @@ -291,13 +325,13 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== @@ -319,7 +353,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). +Mapbox Navigation uses portions of the okio (A modern I/O library for Android, Java, and Kotlin Multiplatform.). URL: [https://github.com/square/okio/](https://github.com/square/okio/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -340,19 +374,19 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens #### Navigation Core SDK module Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.0](https://developer.android.com/jetpack/androidx/releases/activity#1.2.0) +URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Activity Kotlin Extensions (Kotlin extensions for 'activity' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.0](https://developer.android.com/jetpack/androidx/releases/activity#1.2.0) +URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.3](https://developer.android.com/jetpack/androidx/releases/activity#1.2.3) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Android App Startup Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.0](https://developer.android.com/jetpack/androidx/releases/startup#1.1.0) +URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.0.0](https://developer.android.com/jetpack/androidx/releases/startup#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -382,7 +416,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -394,19 +428,19 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Android Lifecycle ViewModel Kotlin Extensions (Kotlin extensions for 'viewmodel' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -418,7 +452,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -430,7 +464,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -442,7 +476,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -482,25 +516,20 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Converter: Gson. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Fragment Kotlin Extensions (Kotlin extensions for 'fragment' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -553,32 +582,20 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen =========================================================================== Mapbox Navigation uses portions of the LiveData Core Kotlin Extensions (Kotlin extensions for 'livedata-core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.0) +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Mapbox Android Commmon OkHttp SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== @@ -588,41 +605,6 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the okhttp-logging-interceptor (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). -URL: [https://github.com/square/okio/](https://github.com/square/okio/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Retrofit. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - Mapbox Navigation uses portions of the SavedState Kotlin Extensions (Kotlin extensions for 'savedstate' artifact). URL: [https://developer.android.com/jetpack/androidx/releases/savedstate#1.1.0](https://developer.android.com/jetpack/androidx/releases/savedstate#1.1.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -682,226 +664,153 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen -#### Navigator SDK module -Mapbox Navigation uses portions of the Android App Startup Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.0](https://developer.android.com/jetpack/androidx/releases/startup#1.1.0) +#### Navigation Trip Data SDK module +Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). +URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. +Mapbox Navigation uses portions of the Android Arch-Common. URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. +Mapbox Navigation uses portions of the Android Arch-Runtime. URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Lifecycle LiveData. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +Mapbox Navigation uses portions of the Android Lifecycle Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) +Mapbox Navigation uses portions of the Android Lifecycle ViewModel. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the auto-value-gson-runtime. +Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). -URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) +Mapbox Navigation uses portions of the Android Lifecycle-Common. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Gson. -License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) +Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Commmon OkHttp SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Java SDK. -URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) +Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Native (Common multi-platform navigation logic). -URL: [https://github.com/mapbox/mapbox-navigation-native](https://github.com/mapbox/mapbox-navigation-native) -License: [Mapbox Terms of Service](https://www.mapbox.com/tos) +Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) +Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). -URL: [https://github.com/square/okio/](https://github.com/square/okio/) +Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). +Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== - - -#### Trip Notification SDK module -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android Support VectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +Mapbox Navigation uses portions of the Android Tracing. +URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -956,7 +865,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens -#### Navigation UI Base SDK module +#### Navigation Voice SDK module Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -981,18 +890,6 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - Mapbox Navigation uses portions of the Android Lifecycle LiveData. URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1054,7 +951,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1113,8 +1010,24 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== +Mapbox Navigation uses portions of the auto-value-gson-runtime. +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). +URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Converter: Gson. +License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1154,26 +1067,56 @@ License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENS =========================================================================== +Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). +URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) +License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). +URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) +License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the Mapbox Java SDK. URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). +URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the viewbinding. +Mapbox Navigation uses portions of the okhttp-logging-interceptor (Square’s meticulous HTTP client for Java and Kotlin.). +URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). +URL: [https://github.com/square/okio/](https://github.com/square/okio/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== +Mapbox Navigation uses portions of the Retrofit. +License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +=========================================================================== -#### Navigation UI Maps SDK module +Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + + + +#### Navigator SDK module Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1181,13 +1124,13 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android App Startup Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.0](https://developer.android.com/jetpack/androidx/releases/startup#1.1.0) +URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.1](https://developer.android.com/jetpack/androidx/releases/startup#1.1.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2](https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1204,14 +1147,14 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) +Mapbox Navigation uses portions of the Android Emoji2 Compat (Core library to enable emoji compatibility in Kitkat and newer devices to avoid the empty emoji characters.). +URL: [https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0](https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) +Mapbox Navigation uses portions of the Android Emoji2 Compat view helpers (View helpers for Emoji2). +URL: [https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0](https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1228,50 +1171,50 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Lifecycle Process. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Lifecycle Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). +Mapbox Navigation uses portions of the Android Lifecycle ViewModel. URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. +Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) +Mapbox Navigation uses portions of the Android Lifecycle-Common. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the Android Resource Inspection - Annotations (Annotation processors for Android resource and layout inspection). +URL: [https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.0](https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2](https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.2) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1283,13 +1226,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Coordinator Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1336,44 +1273,49 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android Support RecyclerView v7. +Mapbox Navigation uses portions of the Android Support VectorDrawable. URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the Android Tracing. +URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) +Mapbox Navigation uses portions of the AndroidX Futures (Androidx implementation of Guava's ListenableFuture). +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Transition Support Library. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the Annotation (Provides source annotations for tooling and readability.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the AndroidX Widget ViewPager2. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the auto-value-gson-runtime. +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). +URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1383,6 +1325,27 @@ License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== +Mapbox Navigation uses portions of the Guava ListenableFuture only (Contains Guava's com.google.common.util.concurrent.ListenableFuture class, + without any of its other classes -- but is also available in a second + "version" that omits the class to avoid conflicts with the copy in Guava + itself. The idea is: + + - If users want only ListenableFuture, they depend on listenablefuture-1.0. + + - If users want all of Guava, they depend on guava, which, as of Guava + 27.0, depends on + listenablefuture-9999.0-empty-to-avoid-conflict-with-guava. The 9999.0-... + version number is enough for some build systems (notably, Gradle) to select + that empty artifact over the "real" listenablefuture-1.0 -- avoiding a + conflict with the copy of ListenableFuture in guava itself. If users are + using an older version of Guava or a build system other than Gradle, they + may see class conflicts. If so, they can solve them by manually excluding + the listenablefuture artifact or manually forcing their build systems to + use 9999.0-....). +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). URL: [http://www.jetbrains.org](http://www.jetbrains.org) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1413,51 +1376,27 @@ License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENS =========================================================================== -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Mapbox Android Commmon OkHttp SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) =========================================================================== -Mapbox Navigation uses portions of the Mapbox Android Core SDK. -URL: [https://github.com/mapbox/mapbox-sdk](https://github.com/mapbox/mapbox-sdk) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Gestures Library. -URL: [https://github.com/mapbox/mapbox-gestures-android](https://github.com/mapbox/mapbox-gestures-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== @@ -1469,31 +1408,19 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Maps SDK Base. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Material Components for Android (Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Navigation Native (Common multi-platform navigation logic). +URL: [https://github.com/mapbox/mapbox-navigation-native](https://github.com/mapbox/mapbox-navigation-native) +License: [Mapbox Terms of Service](https://www.mapbox.com/tos) =========================================================================== @@ -1503,172 +1430,59 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). +Mapbox Navigation uses portions of the okio (A modern I/O library for Android, Java, and Kotlin Multiplatform.). URL: [https://github.com/square/okio/](https://github.com/square/okio/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Telemetry for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The annotation module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The attribution module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The camera animation module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The compass module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The gestures module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The location component module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The logo module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The map lifecycle module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The map localization module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The map overlay module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The scalebar module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The style extension for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the The viewport module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -#### Navigation UI Util SDK module +#### Trip Notification SDK module Mapbox Navigation uses portions of the Android Arch-Common. URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DataStore (Android DataStore - contains the underlying store used by each serialization method along with components that require an Android dependency). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DataStore Core (Android DataStore Core - contains the underlying store used by each serialization method). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Kotlin Extensions (Kotlin extensions for 'lifecycle' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Preferences DataStore. -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) +Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Preferences DataStore Core (Android Preferences DataStore without the Android Dependencies). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) +Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the AndroidSVG (SVG rendering library for Android.). -URL: [https://github.com/BigBadaboom/androidsvg](https://github.com/BigBadaboom/androidsvg) +Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1715,9 +1529,15 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen =========================================================================== +Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + -#### Navigation UI Trip Progress SDK module +#### Navigation UI Base SDK module Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1815,7 +1635,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1875,11 +1695,16 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== +Mapbox Navigation uses portions of the Gson. +License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). URL: [http://www.jetbrains.org](http://www.jetbrains.org) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -1910,15 +1735,9 @@ License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENS =========================================================================== -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Java SDK. +URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1928,22 +1747,23 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -=========================================================================== +#### Navigation UI Maps SDK module +Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). +URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.6.0](https://developer.android.com/jetpack/androidx/releases/activity#1.6.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +=========================================================================== -#### Navigation UI Maneuver SDK module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) +Mapbox Navigation uses portions of the Android App Startup Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.1](https://developer.android.com/jetpack/androidx/releases/startup#1.1.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.6.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.6.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1960,14 +1780,14 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) +Mapbox Navigation uses portions of the Android Emoji2 Compat (Core library to enable emoji compatibility in Kitkat and newer devices to avoid the empty emoji characters.). +URL: [https://developer.android.com/jetpack/androidx/releases/emoji2#1.2.0](https://developer.android.com/jetpack/androidx/releases/emoji2#1.2.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) +Mapbox Navigation uses portions of the Android Emoji2 Compat view helpers (View helpers for Emoji2). +URL: [https://developer.android.com/jetpack/androidx/releases/emoji2#1.2.0](https://developer.android.com/jetpack/androidx/releases/emoji2#1.2.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -1979,55 +1799,55 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Lifecycle Process. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Lifecycle Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Lifecycle ViewModel. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) +Mapbox Navigation uses portions of the Android Lifecycle-Common. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.5.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the Android Resource Inspection - Annotations (Annotation processors for Android resource and layout inspection). +URL: [https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.1](https://developer.android.com/jetpack/androidx/releases/resourceinspection#1.0.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.6.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.6.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -2039,7 +1859,7 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -2086,26 +1906,64 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android Support RecyclerView v7. +Mapbox Navigation uses portions of the Android Support VectorDrawable. URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the Android Tracing. +URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) +Mapbox Navigation uses portions of the AndroidX Futures (Androidx implementation of Guava's ListenableFuture). +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Annotation (Provides source annotations for tooling and readability.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Gson. +License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Guava ListenableFuture only (Contains Guava's com.google.common.util.concurrent.ListenableFuture class, + without any of its other classes -- but is also available in a second + "version" that omits the class to avoid conflicts with the copy in Guava + itself. The idea is: + + - If users want only ListenableFuture, they depend on listenablefuture-1.0. + + - If users want all of Guava, they depend on guava, which, as of Guava + 27.0, depends on + listenablefuture-9999.0-empty-to-avoid-conflict-with-guava. The 9999.0-... + version number is enough for some build systems (notably, Gradle) to select + that empty artifact over the "real" listenablefuture-1.0 -- avoiding a + conflict with the copy of ListenableFuture in guava itself. If users are + using an older version of Guava or a build system other than Gradle, they + may see class conflicts. If so, they can solve them by manually excluding + the listenablefuture artifact or manually forcing their build systems to + use 9999.0-....). License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -2116,6 +1974,12 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== +Mapbox Navigation uses portions of the Kotlin Android Extensions Runtime. +URL: [https://kotlinlang.org/](https://kotlinlang.org/) +License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). URL: [https://kotlinlang.org/](https://kotlinlang.org/) License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2152,226 +2016,188 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen =========================================================================== -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. +URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) =========================================================================== -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Android Core SDK. +URL: [https://github.com/mapbox/mapbox-sdk](https://github.com/mapbox/mapbox-sdk) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== +Mapbox Navigation uses portions of the Mapbox Android Gestures Library. +URL: [https://github.com/mapbox/mapbox-gestures-android](https://github.com/mapbox/mapbox-gestures-android) +License: [BSD](https://opensource.org/licenses/BSD-2-Clause) +=========================================================================== -#### Navigation UI Resources SDK module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +Mapbox Navigation uses portions of the Mapbox Java SDK. +URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Maps SDK. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle LiveData. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Maps SDK Base. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). +URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the okio (A modern I/O library for Android, Java, and Kotlin Multiplatform.). +URL: [https://github.com/square/okio/](https://github.com/square/okio/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Parcelize Runtime (Runtime library for the Parcelize compiler plugin). +URL: [https://kotlinlang.org/](https://kotlinlang.org/) +License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Saved State (Android Lifecycle Saved State). +URL: [https://developer.android.com/jetpack/androidx/releases/savedstate#1.2.0](https://developer.android.com/jetpack/androidx/releases/savedstate#1.2.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Telemetry for the Mapbox Maps SDK. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The annotation module for the Mapbox Maps SDK. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The attribution module for the Mapbox Maps SDK. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The camera animation module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The compass module for the Mapbox Maps SDK. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The gestures module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The location component module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The logo module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The map lifecycle module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The map localization module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The map overlay module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The scalebar module for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The style extension for the Mapbox Maps SDK for Android. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the The viewport module for the Mapbox Maps SDK. +URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) +Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the viewbinding. +Mapbox Navigation uses portions of the viewbinding. License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -#### Navigation UI Voice SDK module +#### UI Components SDK module Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2456,6 +2282,12 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== +Mapbox Navigation uses portions of the Android Support CardView v7. +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2469,7 +2301,13 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Android Support Library Coordinator Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -2516,51 +2354,42 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== -Mapbox Navigation uses portions of the Android Support VectorDrawable. +Mapbox Navigation uses portions of the Android Support RecyclerView v7. URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) +Mapbox Navigation uses portions of the Android Support VectorDrawable. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the auto-value-gson-runtime. +Mapbox Navigation uses portions of the Android Tracing. +URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). -URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) +Mapbox Navigation uses portions of the Android Transition Support Library. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Converter: Gson. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) +Mapbox Navigation uses portions of the AndroidX Widget ViewPager2. +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) +URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Gson. -License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). URL: [http://www.jetbrains.org](http://www.jetbrains.org) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2603,49 +2432,92 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen =========================================================================== -Mapbox Navigation uses portions of the Mapbox Java SDK. -URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) +Mapbox Navigation uses portions of the Material Components for Android (Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) +Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). +URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the okhttp-logging-interceptor (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) +Mapbox Navigation uses portions of the viewbinding. License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). -URL: [https://github.com/square/okio/](https://github.com/square/okio/) + + +#### Navigation UI Util SDK module +Mapbox Navigation uses portions of the Android Arch-Common. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Retrofit. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Android Arch-Runtime. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android DataStore (Android DataStore - contains the underlying store used by each serialization method along with components that require an Android dependency). +URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the viewbinding. +Mapbox Navigation uses portions of the Android DataStore Core (Android DataStore Core - contains the underlying store used by each serialization method). +URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== +Mapbox Navigation uses portions of the Android Lifecycle Kotlin Extensions (Kotlin extensions for 'lifecycle' artifact). +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +=========================================================================== + +Mapbox Navigation uses portions of the Android Lifecycle Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Android Lifecycle-Common. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Android Preferences DataStore. +URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Android Preferences DataStore Core (Android Preferences DataStore without the Android Dependencies). +URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== + +Mapbox Navigation uses portions of the AndroidSVG (SVG rendering library for Android.). +URL: [https://github.com/BigBadaboom/androidsvg](https://github.com/BigBadaboom/androidsvg) +License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) + +=========================================================================== -#### Navigation group module Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). URL: [http://www.jetbrains.org](http://www.jetbrains.org) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2676,101 +2548,97 @@ License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENS =========================================================================== +Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). +URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) +License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) +=========================================================================== -#### Navigation UI speed limit module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). +URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) +License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -=========================================================================== -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) +#### Navigation group module +Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). +URL: [http://www.jetbrains.org](http://www.jetbrains.org) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). +URL: [https://kotlinlang.org/](https://kotlinlang.org/) +License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). +URL: [https://kotlinlang.org/](https://kotlinlang.org/) +License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). +URL: [https://kotlinlang.org/](https://kotlinlang.org/) +License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle LiveData. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). +URL: [https://kotlinlang.org/](https://kotlinlang.org/) +License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) -=========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +#### Nav SDK Test Router module +Mapbox Navigation uses portions of the Android App Startup Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.1](https://developer.android.com/jetpack/androidx/releases/startup#1.1.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Arch-Common. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android Arch-Runtime. +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) +Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). +URL: [http://tools.android.com](http://tools.android.com) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) +Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). +URL: [http://tools.android.com](http://tools.android.com) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) +Mapbox Navigation uses portions of the Android Lifecycle Runtime. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android Lifecycle-Common. +URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) +Mapbox Navigation uses portions of the Android Multi-Dex Library (Library for legacy multi-dex support). License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== @@ -2782,68 +2650,75 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) +URL: [https://developer.android.com/jetpack/androidx/releases/core#1.9.0](https://developer.android.com/jetpack/androidx/releases/core#1.9.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Android Tracing. +URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the AndroidX Futures (Androidx implementation of Guava's ListenableFuture). +URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the AndroidX Test Library (The AndroidX Test Library provides an extensive framework for testing Android apps). +URL: [https://developer.android.com/testing](https://developer.android.com/testing) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) +Mapbox Navigation uses portions of the Annotation (Provides source annotations for tooling and readability.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.7.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). +URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the FindBugs-jsr305 (JSR305 Annotations for Findbugs). +URL: [http://findbugs.sourceforge.net/](http://findbugs.sourceforge.net/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Gson. +License: [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Guava ListenableFuture only (Contains Guava's com.google.common.util.concurrent.ListenableFuture class, + without any of its other classes -- but is also available in a second + "version" that omits the class to avoid conflicts with the copy in Guava + itself. The idea is: -=========================================================================== + - If users want only ListenableFuture, they depend on listenablefuture-1.0. -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) + - If users want all of Guava, they depend on guava, which, as of Guava + 27.0, depends on + listenablefuture-9999.0-empty-to-avoid-conflict-with-guava. The 9999.0-... + version number is enough for some build systems (notably, Gradle) to select + that empty artifact over the "real" listenablefuture-1.0 -- avoiding a + conflict with the copy of ListenableFuture in guava itself. If users are + using an older version of Guava or a build system other than Gradle, they + may see class conflicts. If so, they can solve them by manually excluding + the listenablefuture artifact or manually forcing their build systems to + use 9999.0-....). License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Hamcrest Core (This is the core API of hamcrest matcher framework to be used by third-party framework providers. This includes the a foundation set of matcher implementations for common operations.). +License: [New BSD License](http://www.opensource.org/licenses/bsd-license.php) =========================================================================== @@ -2853,6 +2728,12 @@ License: [The Apache Software License, Version 2.0](http://www.apache.org/licens =========================================================================== +Mapbox Navigation uses portions of the JUnit (JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.). +URL: [http://junit.org](http://junit.org) +License: [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) + +=========================================================================== + Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). URL: [https://kotlinlang.org/](https://kotlinlang.org/) License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) @@ -2889,1712 +2770,57 @@ License: [The Apache Software License, Version 2.0](https://www.apache.org/licen =========================================================================== -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - - - -#### Navigation UI shield module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. +URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Coordinator Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the Mapbox Java SDK. +URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) +Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). +URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) +License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). +URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) +Mapbox Navigation uses portions of the okio (A modern I/O library for Android, Java, and Kotlin Multiplatform.). +URL: [https://github.com/square/okio/](https://github.com/square/okio/) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). +Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) =========================================================================== -Mapbox Navigation uses portions of the Android Support RecyclerView v7. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Transition Support Library. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the AndroidX Widget ViewPager2. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Material Components for Android (Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - - - -#### Navigation UI status module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.5.0](https://developer.android.com/jetpack/androidx/releases/core#1.5.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Coordinator Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support RecyclerView v7. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Transition Support Library. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the AndroidX Widget ViewPager2. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Material Components for Android (Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - - - -#### Navigation UI Drop-In module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Kotlin Extensions (Kotlin extensions for 'lifecycle' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel Kotlin Extensions (Kotlin extensions for 'viewmodel' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Coordinator Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6](https://developer.android.com/jetpack/androidx/releases/fragment#1.3.6) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support RecyclerView v7. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Transition Support Library. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the AndroidX Widget ViewPager2. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the auto-value-gson-runtime. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). -URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Converter: Gson. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.6.0](https://developer.android.com/jetpack/androidx/releases/core#1.6.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Gson. -License: [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the LiveData Core Kotlin Extensions (Kotlin extensions for 'livedata-core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the LiveData Kotlin Extensions (Kotlin extensions for 'livedata' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Java SDK. -URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Material Components for Android (Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the okhttp-logging-interceptor (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). -URL: [https://github.com/square/okio/](https://github.com/square/okio/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Retrofit. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - - - -#### Navigation UI Android Auto module -Mapbox Navigation uses portions of the Activity (Provides the base Activity subclass and the relevant hooks to build a composable structure on top.). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.4](https://developer.android.com/jetpack/androidx/releases/activity#1.2.4) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Activity Kotlin Extensions (Kotlin extensions for 'activity' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/activity#1.2.3](https://developer.android.com/jetpack/androidx/releases/activity#1.2.3) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android App Startup Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/startup#1.1.1](https://developer.android.com/jetpack/androidx/releases/startup#1.1.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android AppCompat Library (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout (ConstraintLayout for Android). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android ConstraintLayout Solver (Solver for ConstraintLayout). -URL: [http://tools.android.com](http://tools.android.com) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DataStore (Android DataStore - contains the underlying store used by each serialization method along with components that require an Android dependency). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DataStore Core (Android DataStore Core - contains the underlying store used by each serialization method). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DB. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android for Cars App Library (Build navigation, parking, and charging apps for Android Auto). -URL: [https://developer.android.com/jetpack/androidx/releases/car-app#1.2.0](https://developer.android.com/jetpack/androidx/releases/car-app#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Kotlin Extensions (Kotlin extensions for 'lifecycle' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle LiveData Core. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Process. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Service. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel Kotlin Extensions (Kotlin extensions for 'viewmodel' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle ViewModel with SavedState (Android Lifecycle ViewModel). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle-Common for Java 8 Language. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Preferences DataStore. -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Preferences DataStore Core (Android Preferences DataStore without the Android Dependencies). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Resources Library (The Resources Library is a static library that you can add to your Android application in order to use resource APIs that backport the latest APIs to older versions of the platform. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1](https://developer.android.com/jetpack/androidx/releases/appcompat#1.3.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Room-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Room-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support AnimatedVectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support CardView v7. -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support ExifInterface. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.3.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library collections (Standalone efficient collections.). -URL: [https://developer.android.com/jetpack/androidx/releases/collection#1.2.0](https://developer.android.com/jetpack/androidx/releases/collection#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library compat (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.7.0](https://developer.android.com/jetpack/androidx/releases/core#1.7.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Coordinator Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Cursor Adapter (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Custom View (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Drawer Layout (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library fragment (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Interpolators (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library loader (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library View Pager (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support RecyclerView v7. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support SQLite - Framework Implementation (The implementation of Support SQLite library using the framework code.). -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support VectorDrawable. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Tracing. -URL: [https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0](https://developer.android.com/jetpack/androidx/releases/tracing#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Transition Support Library. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android WorkManager Kotlin Extensions. -URL: [https://developer.android.com/jetpack/androidx/releases/work#2.7.1](https://developer.android.com/jetpack/androidx/releases/work#2.7.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android WorkManager Runtime (Android WorkManager runtime library). -URL: [https://developer.android.com/jetpack/androidx/releases/work#2.7.1](https://developer.android.com/jetpack/androidx/releases/work#2.7.1) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the AndroidSVG (SVG rendering library for Android.). -URL: [https://github.com/BigBadaboom/androidsvg](https://github.com/BigBadaboom/androidsvg) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the AndroidX Futures (Androidx implementation of Guava's ListenableFuture). -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the AndroidX Widget ViewPager2. -URL: [https://developer.android.com/jetpack/androidx](https://developer.android.com/jetpack/androidx) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the auto-value-gson-runtime. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the autotransient (A transient annotation for AutoValue extensions.). -URL: [https://github.com/ZacSweers/AutoTransient/](https://github.com/ZacSweers/AutoTransient/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Collections Kotlin Extensions (Kotlin extensions for 'collection' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/collection#1.2.0](https://developer.android.com/jetpack/androidx/releases/collection#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Converter: Gson. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Core Kotlin Extensions (Kotlin extensions for 'core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/core#1.7.0](https://developer.android.com/jetpack/androidx/releases/core#1.7.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Experimental annotation (Java annotation for use on unstable Android API surfaces. When used in conjunction with the Experimental annotation lint checks, this annotation provides functional parity with Kotlin's Experimental annotation.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.1.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Fragment Kotlin Extensions (Kotlin extensions for 'fragment' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0](https://developer.android.com/jetpack/androidx/releases/fragment#1.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Glide (A fast and efficient image loading library for Android focused on smooth scrolling.). -URL: [https://github.com/bumptech/glide](https://github.com/bumptech/glide) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Glide Annotations (A set of annotations for configuring Glide.). -URL: [https://github.com/bumptech/glide](https://github.com/bumptech/glide) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Glide Disk LRU Cache Library (A cache that uses a bounded amount of space on a filesystem. Based on Jake Wharton's tailored for Glide.). -URL: [https://github.com/bumptech/glide](https://github.com/bumptech/glide) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Glide GIF Decoder Library (Implementation of GifDecoder that is more memory efficient to animate for Android devices.). -URL: [https://github.com/bumptech/glide](https://github.com/bumptech/glide) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Gson. -License: [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Guava ListenableFuture only (Contains Guava's com.google.common.util.concurrent.ListenableFuture class, - without any of its other classes -- but is also available in a second - "version" that omits the class to avoid conflicts with the copy in Guava - itself. The idea is: - - - If users want only ListenableFuture, they depend on listenablefuture-1.0. - - - If users want all of Guava, they depend on guava, which, as of Guava - 27.0, depends on - listenablefuture-9999.0-empty-to-avoid-conflict-with-guava. The 9999.0-... - version number is enough for some build systems (notably, Gradle) to select - that empty artifact over the "real" listenablefuture-1.0 -- avoiding a - conflict with the copy of ListenableFuture in guava itself. If users are - using an older version of Guava or a build system other than Gradle, they - may see class conflicts. If so, they can solve them by manually excluding - the listenablefuture artifact or manually forcing their build systems to - use 9999.0-....). -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Android Extensions Runtime. -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the LiveData Core Kotlin Extensions (Kotlin extensions for 'livedata-core' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the LiveData Kotlin Extensions (Kotlin extensions for 'livedata' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Commmon OkHttp SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Commmon SDK. -URL: [https://github.com/mapbox/mapbox-sdk-common](https://github.com/mapbox/mapbox-sdk-common) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Core SDK. -URL: [https://github.com/mapbox/mapbox-sdk](https://github.com/mapbox/mapbox-sdk) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Android Gestures Library. -URL: [https://github.com/mapbox/mapbox-gestures-android](https://github.com/mapbox/mapbox-gestures-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Annotations (Artifact that provides Mapbox module and plugin annotations). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Base SDK for Android. -URL: [https://github.com/mapbox/mapbox-search-android](https://github.com/mapbox/mapbox-search-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Common (Artifact that provides Mapbox module and plugin contracts). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Hybrid Router (Artifact that provides the default implementation of the routing engine implementation that alternates between offbaord and onboard data (online/offline)). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Java SDK. -URL: [https://github.com/mapbox/mapbox-java](https://github.com/mapbox/mapbox-java) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox LibraryLoader (Artifact that provides Mapbox LibraryLoader module implementation). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Logger (Artifact that provides Mapbox Logger module implementation). -URL: [https://github.com/mapbox/mapbox-base-android](https://github.com/mapbox/mapbox-base-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Maps SDK Base. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Base (Artifact that provides the set of interface definitions and DTOs used in the modular Navigation SDK). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Copilot (Artifact that provides Copilot capabilities). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Metrics (Artifact that provides the default implementation of the metrics integration). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Native (Common multi-platform navigation logic). -URL: [https://github.com/mapbox/mapbox-navigation-native](https://github.com/mapbox/mapbox-navigation-native) -License: [Mapbox Terms of Service](https://www.mapbox.com/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Native wrapper (Artifact that provides the native capabilities of the SDK). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Notification (Artifact that provides the default implementation of the navigation notification). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation SDK (Artifact that groups all of the Navigation SDK features). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Navigation Utils (Artifact that provides basic navigation utilities). -URL: [https://github.com/mapbox/mapbox-navigation-android](https://github.com/mapbox/mapbox-navigation-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos/) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Search Native SDK for Android. -URL: [https://github.com/mapbox/mapbox-search-android](https://github.com/mapbox/mapbox-search-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Search SDK Common for Android. -URL: [https://github.com/mapbox/mapbox-search-android](https://github.com/mapbox/mapbox-search-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Mapbox Search SDK for Android. -URL: [https://github.com/mapbox/mapbox-search-android](https://github.com/mapbox/mapbox-search-android) -License: [Mapbox Terms of Service](https://www.mapbox.com/legal/tos) - -=========================================================================== - -Mapbox Navigation uses portions of the Material Components for Android (Material Components for Android is a static library that you can add to your Android application in order to use APIs that provide implementations of the Material Design specification. Compatible on devices running API 14 or later.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the okhttp (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the okhttp-logging-interceptor (Square’s meticulous HTTP client for Java and Kotlin.). -URL: [https://square.github.io/okhttp/](https://square.github.io/okhttp/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Okio (A modern I/O API for Java). -URL: [https://github.com/square/okio/](https://github.com/square/okio/) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Parcelize Runtime (Runtime library for the Parcelize compiler plugin). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Retrofit. -License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the SavedState Kotlin Extensions (Kotlin extensions for 'savedstate' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/savedstate#1.1.0](https://developer.android.com/jetpack/androidx/releases/savedstate#1.1.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Telemetry for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The android auto extension for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The annotation module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The attribution module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The camera animation module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The compass module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The gestures module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The location component module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The logo module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The map lifecycle module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The map localization module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The map overlay module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The scalebar module for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The style extension for the Mapbox Maps SDK for Android. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the The viewport module for the Mapbox Maps SDK. -URL: [https://github.com/mapbox/mapbox-maps-android](https://github.com/mapbox/mapbox-maps-android) -License: [BSD](https://opensource.org/licenses/BSD-2-Clause) - -=========================================================================== - -Mapbox Navigation uses portions of the VersionedParcelable (Provides a stable but relatively compact binary serialization format that can be passed across processes or persisted safely.). -URL: [http://developer.android.com/tools/extras/support-library.html](http://developer.android.com/tools/extras/support-library.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the viewbinding. -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - - - -#### Navigation UI App SDK module -Mapbox Navigation uses portions of the Android Arch-Common. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Arch-Runtime. -URL: [https://developer.android.com/topic/libraries/architecture/index.html](https://developer.android.com/topic/libraries/architecture/index.html) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DataStore (Android DataStore - contains the underlying store used by each serialization method along with components that require an Android dependency). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android DataStore Core (Android DataStore Core - contains the underlying store used by each serialization method). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Kotlin Extensions (Kotlin extensions for 'lifecycle' artifact). -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle Runtime. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Lifecycle-Common. -URL: [https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Preferences DataStore. -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Preferences DataStore Core (Android Preferences DataStore without the Android Dependencies). -URL: [https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0](https://developer.android.com/jetpack/androidx/releases/datastore#1.0.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Android Support Library Annotations (The Support Library is a static library that you can add to your Android application in order to use APIs that are either not available for older platform versions or utility APIs that aren't a part of the framework APIs.). -URL: [https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0](https://developer.android.com/jetpack/androidx/releases/annotation#1.2.0) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the IntelliJ IDEA Annotations (A set of annotations used for code inspection support and code documentation.). -URL: [http://www.jetbrains.org](http://www.jetbrains.org) -License: [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib (Kotlin Standard Library for JVM). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Common (Kotlin Common Standard Library). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk7 (Kotlin Standard Library JDK 7 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the Kotlin Stdlib Jdk8 (Kotlin Standard Library JDK 8 extension). -URL: [https://kotlinlang.org/](https://kotlinlang.org/) -License: [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-android (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - -Mapbox Navigation uses portions of the kotlinx-coroutines-core (Coroutines support libraries for Kotlin). -URL: [https://github.com/Kotlin/kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) -License: [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) - -=========================================================================== - diff --git a/Makefile b/Makefile index b329ff6af78..90d08894d5d 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ +PUBLIC_API_PREFIX = public-api + RELEASED_CORE_MODULES = \ -libnavigation-router \ libnavigation-base \ libnavigation-metrics \ libnavigation-util \ @@ -7,34 +8,26 @@ libnavigator \ libtrip-notification \ libnavigation-core \ libnavigation-copilot \ +libnavigation-tripdata \ +libnavigation-voice \ +libtesting-router CORE_MODULES = $(RELEASED_CORE_MODULES) RELEASED_UI_MODULES = \ libnavui-maps \ +ui-components \ +androidauto \ libnavui-base \ libnavui-util \ -libnavui-tripprogress \ -libnavui-maneuver \ -libnavui-resources \ -libnavui-voice \ -libnavigation-android \ -libnavui-speedlimit \ -libnavui-shield \ -libnavui-status \ -libnavui-dropin \ -libnavui-app \ +libnavigation-android UI_MODULES = $(RELEASED_UI_MODULES) -ANDROIDAUTO_MODULES = \ -libnavui-androidauto +PUBLIC_API_MODULES = $(CORE_MODULES) $(UI_MODULES) APPLICATION_MODULES = \ -qa-test-app \ -examples \ -instrumentation-tests \ -android-auto-app \ +instrumentation-tests define run-gradle-tasks COMMAND="./gradlew"; \ @@ -49,21 +42,18 @@ endef check-kotlin-lint: $(call run-gradle-tasks,$(CORE_MODULES),ktlint) \ && $(call run-gradle-tasks,$(UI_MODULES),ktlint) \ - && $(call run-gradle-tasks,$(ANDROIDAUTO_MODULES),ktlint) \ && $(call run-gradle-tasks,$(APPLICATION_MODULES),ktlint) .PHONY: format-kotlin-lint format-kotlin-lint: $(call run-gradle-tasks,$(CORE_MODULES),ktlintFormat) \ && $(call run-gradle-tasks,$(UI_MODULES),ktlintFormat) \ - && $(call run-gradle-tasks,$(ANDROIDAUTO_MODULES),ktlintFormat) \ && $(call run-gradle-tasks,$(APPLICATION_MODULES),ktlintFormat) .PHONY: check-android-lint check-android-lint: $(call run-gradle-tasks,$(CORE_MODULES),lint) \ && $(call run-gradle-tasks,$(UI_MODULES),lint) \ - && $(call run-gradle-tasks,$(ANDROIDAUTO_MODULES),lint) \ && $(call run-gradle-tasks,$(APPLICATION_MODULES),lint) .PHONY: license-verification @@ -80,10 +70,6 @@ javadoc-dokka: ./gradlew dokkaHtmlMultiModule ./docs/replace-styles.sh -.PHONY: javadoc-dokka-androidauto -javadoc-dokka-androidauto: - ./gradlew libnavui-androidauto:dokkaHtml - .PHONY: dependency-graphs dependency-graphs: $(call run-gradle-tasks,$(CORE_MODULES),generateDependencyGraphMapboxLibraries) \ @@ -94,9 +80,9 @@ dependency-updates: $(call run-gradle-tasks,$(CORE_MODULES),dependencyUpdates) \ && $(call run-gradle-tasks,$(UI_MODULES),dependencyUpdates) \ -.PHONY: verify-common-sdk-version -verify-common-sdk-version: - ./gradlew verifyCommonSdkVersion +.PHONY: find-all-common-sdk-versions +find-all-common-sdk-versions: + ./gradlew findAllCommonSdkVersions .PHONY: dex-count dex-count: @@ -129,7 +115,6 @@ core-dependency-graph: .PHONY: core-check-api core-check-api: assemble-core-release - ./gradlew :libnavigation-router:checkApi -PhidePackage=com.mapbox.navigation.route.internal ./gradlew :libnavigation-base:checkApi -PhidePackage=com.mapbox.navigation.base.internal ./gradlew :libnavigation-metrics:checkApi -PhidePackage=com.mapbox.navigation.metrics.internal ./gradlew :libnavigation-util:checkApi -PhidePackage=com.mapbox.navigation.utils.internal @@ -137,10 +122,12 @@ core-check-api: assemble-core-release ./gradlew :libtrip-notification:checkApi -PhidePackage=com.mapbox.navigation.trip.notification.internal ./gradlew :libnavigation-core:checkApi -PhidePackage=com.mapbox.navigation.core.internal ./gradlew :libnavigation-copilot:checkApi -PhidePackage=com.mapbox.navigation.copilot.internal + ./gradlew :libnavigation-tripdata:checkApi -PhidePackage=com.mapbox.navigation.tripdata.internal,com.mapbox.navigation.tripdata.maneuver.internal,com.mapbox.navigation.tripdata.progress.internal,com.mapbox.navigation.tripdata.shield.internal,com.mapbox.navigation.tripdata.speedlimit.internal + ./gradlew :libnavigation-voice:checkApi -PhidePackage=com.mapbox.navigation.voice.internal -PhideId=ReferencesHidden + ./gradlew :libtesting-router:checkApi -PhidePackage=com.mapbox.navigation.testing.router.internal .PHONY: core-update-api core-update-api: assemble-core-release - ./gradlew :libnavigation-router:updateApi -PhidePackage=com.mapbox.navigation.route.internal ./gradlew :libnavigation-base:updateApi -PhidePackage=com.mapbox.navigation.base.internal ./gradlew :libnavigation-metrics:updateApi -PhidePackage=com.mapbox.navigation.metrics.internal ./gradlew :libnavigation-util:updateApi -PhidePackage=com.mapbox.navigation.utils.internal @@ -148,6 +135,9 @@ core-update-api: assemble-core-release ./gradlew :libtrip-notification:updateApi -PhidePackage=com.mapbox.navigation.trip.notification.internal ./gradlew :libnavigation-core:updateApi -PhidePackage=com.mapbox.navigation.core.internal ./gradlew :libnavigation-copilot:updateApi -PhidePackage=com.mapbox.navigation.copilot.internal + ./gradlew :libnavigation-tripdata:updateApi -PhidePackage=com.mapbox.navigation.tripdata.internal,com.mapbox.navigation.tripdata.maneuver.internal,com.mapbox.navigation.tripdata.progress.internal,com.mapbox.navigation.tripdata.shield.internal,com.mapbox.navigation.tripdata.speedlimit.internal + ./gradlew :libnavigation-voice:updateApi -PhidePackage=com.mapbox.navigation.voice.internal + ./gradlew :libtesting-router:updateApi -PhidePackage=com.mapbox.navigation.testing.router.internal .PHONY: assemble-ui-debug assemble-ui-debug: @@ -157,10 +147,6 @@ assemble-ui-debug: assemble-ui-release: $(call run-gradle-tasks,$(UI_MODULES),assembleRelease $(additional_gradle_parameters)) -.PHONY: assemble-androidauto-release -assemble-androidauto-release: - $(call run-gradle-tasks,$(ANDROIDAUTO_MODULES),assembleRelease) - .PHONY: ui-unit-tests ui-unit-tests: $(call run-gradle-tasks,$(UI_MODULES),test) @@ -179,11 +165,11 @@ publish-local: .PHONY: upload-to-sdk-registry-snapshot upload-to-sdk-registry-snapshot: - ./gradlew mapboxSDKRegistryUpload -Psnapshot=true; + ./gradlew mapboxSDKRegistryUpload -Psnapshot=true -PVERSION_NAME=$(VERSION_NAME); .PHONY: upload-to-sdk-registry upload-to-sdk-registry: - ./gradlew mapboxSDKRegistryUpload -x libnavui-androidauto:mapboxSDKRegistryUpload; + ./gradlew mapboxSDKRegistryUpload; .PHONY: publish-to-sdk-registry publish-to-sdk-registry: @@ -194,62 +180,29 @@ publish-to-sdk-registry: ./gradlew mapboxSDKRegistryPublishAll; \ fi -.PHONY: upload-to-sdk-registry-androidauto -upload-to-sdk-registry-androidauto: - ./gradlew libnavui-androidauto:mapboxSDKRegistryUpload; - -.PHONY: publish-to-sdk-registry-androidauto -publish-to-sdk-registry-androidauto: - @if [ -z "$(GITHUB_TOKEN)" ]; then \ - echo "GITHUB_TOKEN env variable has to be set"; \ - else \ - python3 -m pip install git-pull-request; \ - ./gradlew libnavui-androidauto:mapboxSDKRegistryPublish; \ - fi - .PHONY: ui-check-api ui-check-api: assemble-ui-release # TODO Remove -PhideId=ReferencesHidden after fixing errors ./gradlew :libnavui-maps:checkApi -PhidePackage=com.mapbox.navigation.ui.maps.internal -PhideId=ReferencesHidden + ./gradlew :ui-components:updateApi -PhidePackage=com.mapbox.navigation.ui.components.internal,com.mapbox.navigation.ui.components.maneuver.internal,com.mapbox.navigation.ui.components.maps.internal,com.mapbox.navigation.ui.components.speedlimit.internal,com.mapbox.navigation.ui.components.status.internal,com.mapbox.navigation.ui.components.tripprogress.internal,com.mapbox.navigation.ui.components.voice.internal + ./gradlew :androidauto:updateApi -PhidePackage=com.mapbox.navigation.ui.androidauto.internal ./gradlew :libnavui-base:checkApi -PhidePackage=com.mapbox.navigation.ui.base.internal -PhideId=ReferencesHidden ./gradlew :libnavui-util:checkApi -PhidePackage=com.mapbox.navigation.ui.utils.internal -PhideId=ReferencesHidden - ./gradlew :libnavui-maneuver:checkApi -PhidePackage=com.mapbox.navigation.ui.maneuver.internal -PhideId=ReferencesHidden - ./gradlew :libnavui-tripprogress:checkApi -PhidePackage=com.mapbox.navigation.ui.tripprogress.internal -PhideId=ReferencesHidden - ./gradlew :libnavui-voice:checkApi -PhidePackage=com.mapbox.navigation.ui.voice.internal -PhideId=ReferencesHidden - ./gradlew :libnavui-shield:checkApi -PhidePackage=com.mapbox.navigation.ui.shield.internal - ./gradlew :libnavui-speedlimit:checkApi -PhidePackage=com.mapbox.navigation.ui.speedlimit.internal -PhideId=ReferencesHidden - ./gradlew :libnavui-status:checkApi -PhidePackage=com.mapbox.navigation.ui.status.internal - ./gradlew :libnavui-dropin:checkApi -PhidePackage=com.mapbox.navigation.dropin.internal - ./gradlew :libnavui-app:checkApi -PhidePackage=com.mapbox.navigation.ui.app.internal .PHONY: ui-update-api ui-update-api: assemble-ui-release ./gradlew :libnavui-maps:updateApi -PhidePackage=com.mapbox.navigation.ui.maps.internal + ./gradlew :ui-components:updateApi -PhidePackage=com.mapbox.navigation.ui.components.internal,com.mapbox.navigation.ui.components.maneuver.internal,com.mapbox.navigation.ui.components.maps.internal,com.mapbox.navigation.ui.components.speedlimit.internal,com.mapbox.navigation.ui.components.status.internal,com.mapbox.navigation.ui.components.tripprogress.internal,com.mapbox.navigation.ui.components.voice.internal + ./gradlew :androidauto:updateApi -PhidePackage=com.mapbox.navigation.ui.androidauto.internal ./gradlew :libnavui-base:updateApi -PhidePackage=com.mapbox.navigation.ui.base.internal ./gradlew :libnavui-util:updateApi -PhidePackage=com.mapbox.navigation.ui.utils.internal - ./gradlew :libnavui-maneuver:updateApi -PhidePackage=com.mapbox.navigation.ui.maneuver.internal - ./gradlew :libnavui-tripprogress:updateApi -PhidePackage=com.mapbox.navigation.ui.tripprogress.internal - ./gradlew :libnavui-voice:updateApi -PhidePackage=com.mapbox.navigation.ui.voice.internal - ./gradlew :libnavui-shield:updateApi -PhidePackage=com.mapbox.navigation.ui.shield.internal - ./gradlew :libnavui-speedlimit:updateApi -PhidePackage=com.mapbox.navigation.ui.speedlimit.internal - ./gradlew :libnavui-status:updateApi -PhidePackage=com.mapbox.navigation.ui.status.internal - ./gradlew :libnavui-dropin:updateApi -PhidePackage=com.mapbox.navigation.dropin.internal - ./gradlew :libnavui-app:updateApi -PhidePackage=com.mapbox.navigation.ui.app.internal - -.PHONY: androidauto-check-api -androidauto-check-api: assemble-androidauto-release - ./gradlew :libnavui-androidauto:checkApi -PhidePackage=com.mapbox.androidauto.internal - -.PHONY: androidauto-update-api -androidauto-update-api: assemble-androidauto-release - ./gradlew :libnavui-androidauto:updateApi -PhidePackage=com.mapbox.androidauto.internal .PHONY: update-metalava update-metalava: sh ./scripts/update_metalava.sh # Android Auto helper command. Set up your environment to run the desktop car emulator. -# Guidance available in the android-auto README: /libnavui-androidauto/README.md +# Guidance available in the android-auto README: /libnavigation-extensions/androidauto/README.md .PHONY: car car: adb forward tcp:5277 tcp:5277 diff --git a/README.md b/README.md index 62caf4c7c6e..faa8cd47a11 100644 --- a/README.md +++ b/README.md @@ -1,70 +1,15 @@ -
- Mapbox Service -
-
-

- - - -

- -When your users want to get from one location to another, don’t push them out of your application into a generic map application. Instead, keep them engaged with your application 100% of the time with in-app turn-by-turn navigation. - -The Mapbox Navigation SDK for Android is built on top of [the Mapbox Directions API](https://www.mapbox.com/directions) and [the Mapbox Maps SDK](https://www.mapbox.com/maps) to provide tools needed to build a complete navigation experience. - -The Mapbox Navigation SDK is a precise and flexible platform which enables your users to explore the world's streets. We are designing new maps specifically for navigation that highlight traffic conditions and helpful landmarks. The calculations are based on the user's current location and compare it to the current route that the user's traversing to provide critical information at any given moment. _You control the entire experience, from the time your user chooses a destination to when they arrive._ +# Mapbox Navigation SDK for Android ## Getting Started -Refer to the [full documentation pages](https://docs.mapbox.com/android/navigation/) for [installation](https://docs.mapbox.com/android/navigation/guides/get-started/install/) and usage instructions. +Refer to the [full documentation pages](https://docs.mapbox.com/android/navigation/) for +[installation](https://docs.mapbox.com/android/navigation/guides/installation/) and usage instructions. -For the latest version and changelog visit [CHANGELOG](./CHANGELOG.md) or [releases](https://github.com/mapbox/mapbox-navigation-android/releases) pages. +For the latest version and changelog visit [CHANGELOG](./CHANGELOG.md). -Along with the full documentation, [this migration guide](https://docs.mapbox.com/android/navigation/guides/migrate-to-v2/) can help you transition your project from version `v1` of the Navigation SDK to `v2` or higher. +Along with the full documentation, [this migration guide](https://docs.mapbox.com/android/navigation/guides/migration-from-v2/) can help you transition your project from version `v2` of the Navigation SDK to `v3` or higher. ## Getting Help - **Need help with your code?**: Look for previous questions on the [#mapbox tag](https://stackoverflow.com/questions/tagged/mapbox+android) — or [ask a new question](https://stackoverflow.com/questions/tagged/mapbox+android). - **Have a bug to report?** [Open an issue](https://github.com/mapbox/mapbox-navigation-android/issues). If possible, include the version of Mapbox Services, a full log, and a project that shows the issue. - **Have a feature request?** [Open an issue](https://github.com/mapbox/mapbox-navigation-android/issues/new). Tell us what the feature should do and why you want the feature. - -## Using Snapshots - -You can use a `-SNAPSHOT` release if you want to test recent bug fixes or features that have not been packaged in an official release yet. - -##### `1.0.0`+ versions of the Navigation SDK: - -To access `SNAPSHOT` builds follow the [installation instructions](https://docs.mapbox.com/android/navigation/guides/get-started/install/) and then: -1. Provide the below additional snapshot repository reference, next to the existing release repository reference: -```groovy -maven { - url 'https://api.mapbox.com/downloads/v2/snapshots/maven' - authentication { - basic(BasicAuthentication) - } - credentials { - username = "mapbox" - password = "{secret Mapbox token with DOWNLOADS:READ scope, the same as the token used for the release repository}" - } -} -``` - -2. Append `-SNAPSHOT` to the target version: -```groovy -dependencies { - implementation "com.mapbox.navigation:android:X.Y.Z-SNAPSHOT" -} -``` - -You can find the latest snapshot version reference in [gradle.properties](./gradle.properties). - -## Sample code - -Examples for Mapbox Navigation Android SDK are now available on their own separate repo, [available here](https://github.com/mapbox/mapbox-navigation-android-examples). - -The QA application [is available here](https://github.com/mapbox/mapbox-navigation-android/tree/main/qa-test-app/README.md). - -General documentation for Mapbox Navigation Android SDK is [available here](https://docs.mapbox.com/android/navigation). - -## Contributing - -We welcome feedback, translations, and code contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details. diff --git a/android-auto-app/.gitignore b/android-auto-app/.gitignore deleted file mode 100644 index 2446cd1f709..00000000000 --- a/android-auto-app/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -src/main/res/values/mapbox_access_token.xml diff --git a/android-auto-app/README.md b/android-auto-app/README.md deleted file mode 100644 index 622faf42470..00000000000 --- a/android-auto-app/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Mapbox Navigation Android-Auto SDK Examples - -The android-auto-app is for developing the Android Auto library. - -Refer to the examples repository for the released solutions https://github.com/mapbox/mapbox-navigation-android-examples. - -## Installation - -1. Change "Configuration" of "android-auto-app". "Launch Options - Launch" should be "Nothing" -1. Update or create the "mapbox_access_token.xml" under "android-auto-app/src/main/res/values" and put below - - - PUBLIC TOKEN HERE - -1. Establish Android Auto environment by following [Google's document](https://developer.android.com/training/cars/testing) or [Readme](https://github.com/mapbox/mapbox-navigation-android-examples/blob/main/android-auto/README.md) -1. Run "android-auto-app" which installs the app on your device -1. Run the app on "Desktop Head Unit" - -## Enable route replay (AUTO_DRIVE) - -When testing Android Auto, it is easy to simulate a route instead of using mock locations. Follow these instructions, to enable route replay. -https://docs.mapbox.com/android/navigation/guides/developer-tools/route-replay/ - -``` -1. Start the desktop head unit -2. Open your navigation app -3. $ adb shell dumpsys activity service com.mapbox.navigation.examples.androidauto.car.MainCarAppService AUTO_DRIVE -``` diff --git a/android-auto-app/build.gradle b/android-auto-app/build.gradle deleted file mode 100644 index f74874a5aa8..00000000000 --- a/android-auto-app/build.gradle +++ /dev/null @@ -1,87 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'com.mapbox.maps.token' -apply from: "../gradle/script-git-version.gradle" -apply from: "../gradle/ktlint.gradle" - -android { - compileSdkVersion androidVersions.compileSdkVersion - - def getGitHash = { -> - try { - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'rev-parse', '--short', 'HEAD' - standardOutput = stdout - } - return stdout.toString().trim() - } catch (Exception exception) { - return "" - } - } - - kotlinOptions { - freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn" - } - - defaultConfig { - applicationId "com.mapbox.navigation.examples.androidauto" - minSdkVersion androidVersions.carMinSdkVersion - targetSdkVersion androidVersions.targetSdkVersion - versionCode gitVersionCode - versionName gitVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - testInstrumentationRunnerArguments clearPackageData: 'true' - vectorDrawables.useSupportLibrary = true - buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\"" - } - - testOptions { - execution 'ANDROIDX_TEST_ORCHESTRATOR' - } - - buildTypes { - debug { - testCoverageEnabled = false - manifestPlaceholders = [enableCrashReporting: "false"] - } - } - - lintOptions { - abortOnError false - } - - buildFeatures { - viewBinding true - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - kotlinOptions { - jvmTarget = "1.8" - } -} - -dependencies { - // Mapbox Navigation Android Auto SDK - implementation project(':libnavui-androidauto') - - // This example is used for development so it may depend on unstable versions. - // Examples based on final versions can be found in the examples repository. - // https://github.com/mapbox/mapbox-navigation-android-examples - implementation("com.mapbox.navigation:ui-dropin:2.10.3") - implementation("com.mapbox.search:mapbox-search-android:1.0.0-rc.1") - - // Dependencies needed for this example. - implementation dependenciesList.androidXCore - implementation dependenciesList.materialDesign - implementation dependenciesList.androidXAppCompat - implementation dependenciesList.androidXCardView - implementation dependenciesList.androidXConstraintLayout - implementation dependenciesList.androidXFragment - implementation dependenciesList.androidXLifecycleLivedata - implementation dependenciesList.androidXLifecycleRuntime -} \ No newline at end of file diff --git a/android-auto-app/src/main/AndroidManifest.xml b/android-auto-app/src/main/AndroidManifest.xml deleted file mode 100644 index 594e14bc6bd..00000000000 --- a/android-auto-app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/CarAppSyncComponent.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/CarAppSyncComponent.kt deleted file mode 100644 index b700bdbb413..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/CarAppSyncComponent.kt +++ /dev/null @@ -1,184 +0,0 @@ -package com.mapbox.navigation.examples.androidauto - -import androidx.car.app.Session -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.LifecycleOwner -import com.mapbox.android.core.permissions.PermissionsManager -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenEvent -import com.mapbox.androidauto.screenmanager.MapboxScreenManager -import com.mapbox.maps.logI -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp -import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver -import com.mapbox.navigation.dropin.NavigationView -import com.mapbox.navigation.dropin.navigationview.NavigationViewListener -import com.mapbox.navigation.ui.base.lifecycle.UIComponent -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope -import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.launch - -/** - * This is a temporarily solution for syncing two new libraries, Drop-in-ui and the Mapbox AA. - * - * The libraries are defining public apis so that there can be options to determine the experience - * while both the car and phone are displayed. - */ -class CarAppSyncComponent private constructor() : MapboxNavigationObserver { - - private var navigationView: NavigationView? = null - private var session: Session? = null - - fun attachNavigationView(navigationView: NavigationView) { - this.navigationView = navigationView - navigationView.lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onCreate(owner: LifecycleOwner) { - this@CarAppSyncComponent.navigationView = navigationView - MapboxNavigationApp.registerObserver(appSyncComponent) - } - override fun onDestroy(owner: LifecycleOwner) { - MapboxNavigationApp.unregisterObserver(appSyncComponent) - this@CarAppSyncComponent.navigationView = null - } - }) - } - - fun setCarSession(session: Session) { - this.session = session - session.lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onCreate(owner: LifecycleOwner) { - this@CarAppSyncComponent.session = session - MapboxNavigationApp.registerObserver(carSyncComponent) - } - override fun onDestroy(owner: LifecycleOwner) { - MapboxNavigationApp.unregisterObserver(carSyncComponent) - this@CarAppSyncComponent.session = null - } - }) - } - - override fun onAttached(mapboxNavigation: MapboxNavigation) { - // Attached when car or app is available - logI(LOG_TAG, "onAttached CarAppSyncComponent") - } - - override fun onDetached(mapboxNavigation: MapboxNavigation) { - // Detached when the car and app are unavailable - logI(LOG_TAG, "onDetached CarAppSyncComponent") - } - - private val appListener = object : NavigationViewListener() { - override fun onFreeDrive() { - if (PermissionsManager.areLocationPermissionsGranted(navigationView!!.context)) { - // TODO use the RoutesPreview feature introduced in 2.10. Until then, the route - // preview state requires a custom implementation. - // https://github.com/mapbox/mapbox-navigation-android/blob/main/CHANGELOG.md - val currentCarScreen = MapboxScreenManager.current()?.key - val isInRoutePreview = currentCarScreen == MapboxScreen.ROUTE_PREVIEW - if (!isInRoutePreview) { - logI(LOG_TAG, "updateCarAppState onFreeDrive") - MapboxScreenManager.replaceTop(MapboxScreen.FREE_DRIVE) - } - } - } - - override fun onRoutePreview() { - logI(LOG_TAG, "updateCarAppState onRoutePreview") - MapboxScreenManager.replaceTop(MapboxScreen.ROUTE_PREVIEW) - } - - override fun onActiveNavigation() { - logI(LOG_TAG, "updateCarAppState onActiveNavigation") - MapboxScreenManager.replaceTop(MapboxScreen.ACTIVE_GUIDANCE) - } - - override fun onArrival() { - logI(LOG_TAG, "updateCarAppState onArrival") - MapboxScreenManager.replaceTop(MapboxScreen.ARRIVAL) - } - } - - private val appSyncComponent = object : UIComponent() { - var isAttached = false - private set - override fun onAttached(mapboxNavigation: MapboxNavigation) { - super.onAttached(mapboxNavigation) - logI(LOG_TAG, "onAttached app") - val navigationView = navigationView - checkNotNull(navigationView) { - "NavigationView is not set for onAttached" - } - if (carSyncComponent.isAttached) { - onCarAppStateUpdate(MapboxScreenManager.current()) - } - navigationView.addListener(appListener) - isAttached = true - } - - override fun onDetached(mapboxNavigation: MapboxNavigation) { - super.onDetached(mapboxNavigation) - val navigationView = navigationView - checkNotNull(navigationView) { - "NavigationView is not set for onDetached" - } - isAttached = false - navigationView.removeListener(appListener) - logI(LOG_TAG, "onDetached app") - } - } - - private val carSyncComponent = object : MapboxNavigationObserver { - var isAttached = false - private set - var carCoroutineScope: CoroutineScope? = null - override fun onAttached(mapboxNavigation: MapboxNavigation) { - logI(LOG_TAG, "onAttached car") - carCoroutineScope = MainScope() - isAttached = true - carCoroutineScope?.launch { - MapboxScreenManager.screenEvent.collect { onCarAppStateUpdate(it) } - } - } - - override fun onDetached(mapboxNavigation: MapboxNavigation) { - isAttached = false - carCoroutineScope?.cancel() - carCoroutineScope = null - logI(LOG_TAG, "onDetached car") - } - } - - private fun onCarAppStateUpdate(mapboxScreenEvent: MapboxScreenEvent?) { - val screenEvent = mapboxScreenEvent ?: return - val navigationView = navigationView ?: return - when (screenEvent.key) { - MapboxScreen.FREE_DRIVE -> { - logI(LOG_TAG, "navigationView.api.startFreeDrive()") - navigationView.api.startFreeDrive() - } - MapboxScreen.ROUTE_PREVIEW -> { - logI(LOG_TAG, "navigationView.api.startRoutePreview()") - navigationView.api.startRoutePreview() - } - MapboxScreen.ACTIVE_GUIDANCE -> { - logI(LOG_TAG, "navigationView.api.startActiveGuidance()") - val routes = MapboxNavigationApp.current()!!.getNavigationRoutes() - navigationView.api.startActiveGuidance(routes) - } - MapboxScreen.ARRIVAL -> { - logI(LOG_TAG, "navigationView.api.startArrival()") - val routes = MapboxNavigationApp.current()!!.getNavigationRoutes() - navigationView.api.startArrival(routes) - } - } - } - - companion object { - private const val LOG_TAG = "CarAppSyncComponent" - fun getInstance(): CarAppSyncComponent = MapboxNavigationApp - .getObservers(CarAppSyncComponent::class).firstOrNull() - ?: CarAppSyncComponent().also { MapboxNavigationApp.registerObserver(it) } - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/ExampleApplication.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/ExampleApplication.kt deleted file mode 100644 index 39dc8e1be27..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/ExampleApplication.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.mapbox.navigation.examples.androidauto - -import android.app.Application -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp - -class ExampleApplication : Application() { - - override fun onCreate() { - super.onCreate() - - // Setup MapboxNavigation - MapboxNavigationApp.setup( - NavigationOptions.Builder(applicationContext) - .accessToken(getString(R.string.mapbox_access_token)) - .build() - ).attachAllActivities(this) - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/app/DrawerActivity.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/app/DrawerActivity.kt deleted file mode 100644 index 1c7b3b0136c..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/app/DrawerActivity.kt +++ /dev/null @@ -1,98 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.app - -import android.os.Bundle -import android.view.View -import android.widget.AdapterView -import android.widget.SpinnerAdapter -import androidx.annotation.CallSuper -import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.widget.AppCompatSpinner -import androidx.appcompat.widget.SwitchCompat -import androidx.core.view.GravityCompat -import androidx.lifecycle.MutableLiveData -import com.mapbox.navigation.examples.androidauto.databinding.ActivityDrawerBinding - -abstract class DrawerActivity : AppCompatActivity() { - - private lateinit var binding: ActivityDrawerBinding - - @CallSuper - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = ActivityDrawerBinding.inflate(layoutInflater) - binding.drawerContent.addView(onCreateContentView(), 0) - binding.drawerMenuContent.addView(onCreateMenuView()) - setContentView(binding.root) - - binding.menuButton.setOnClickListener { openDrawer() } - } - - abstract fun onCreateContentView(): View - - abstract fun onCreateMenuView(): View - - fun openDrawer() { - binding.drawerLayout.openDrawer(GravityCompat.START) - } - - fun closeDrawers() { - binding.drawerLayout.closeDrawers() - } - - protected fun bindSwitch( - switch: SwitchCompat, - getValue: () -> Boolean, - setValue: (v: Boolean) -> Unit - ) { - switch.isChecked = getValue() - switch.setOnCheckedChangeListener { _, isChecked -> setValue(isChecked) } - } - - protected fun bindSwitch( - switch: SwitchCompat, - liveData: MutableLiveData, - onChange: (value: Boolean) -> Unit - ) { - liveData.observe(this) { - switch.isChecked = it - onChange(it) - } - switch.setOnCheckedChangeListener { _, isChecked -> - liveData.value = isChecked - } - } - - protected fun bindSpinner( - spinner: AppCompatSpinner, - liveData: MutableLiveData, - onChange: (value: String) -> Unit - ) { - liveData.observe(this) { - if (spinner.selectedItem != it) { - spinner.setSelection(spinner.adapter.findItemPosition(it) ?: 0) - } - onChange(it) - } - - spinner.onItemSelectedListener = - object : AdapterView.OnItemSelectedListener { - override fun onItemSelected( - parent: AdapterView<*>, - view: View?, - position: Int, - id: Long - ) { - liveData.value = parent.getItemAtPosition(position) as? String - } - - override fun onNothingSelected(parent: AdapterView<*>?) = Unit - } - } - - private fun SpinnerAdapter.findItemPosition(item: Any): Int? { - for (pos in 0..count) { - if (item == getItem(pos)) return pos - } - return null - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/app/MainActivity.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/app/MainActivity.kt deleted file mode 100644 index 1e35b046f24..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/app/MainActivity.kt +++ /dev/null @@ -1,117 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.app - -import android.os.Bundle -import android.view.View -import androidx.appcompat.widget.AppCompatImageView -import androidx.lifecycle.lifecycleScope -import com.mapbox.api.directions.v5.models.BannerInstructions -import com.mapbox.common.LogConfiguration -import com.mapbox.common.LoggingLevel -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.internal.extensions.flowRoutesUpdated -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp -import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver -import com.mapbox.navigation.examples.androidauto.CarAppSyncComponent -import com.mapbox.navigation.examples.androidauto.databinding.ActivityMainBinding -import com.mapbox.navigation.examples.androidauto.databinding.LayoutDrawerMenuNavViewBinding -import com.mapbox.navigation.examples.androidauto.utils.NavigationViewController -import com.mapbox.navigation.examples.androidauto.utils.TestRoutes -import com.mapbox.navigation.ui.base.installer.installComponents -import com.mapbox.navigation.ui.base.lifecycle.UIComponent -import com.mapbox.navigation.ui.maps.guidance.junction.api.MapboxJunctionApi -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.launch - -class MainActivity : DrawerActivity() { - - private lateinit var binding: ActivityMainBinding - private lateinit var menuBinding: LayoutDrawerMenuNavViewBinding - - override fun onCreateContentView(): View { - binding = ActivityMainBinding.inflate(layoutInflater) - CarAppSyncComponent.getInstance().attachNavigationView(binding.navigationView) - return binding.root - } - - override fun onCreateMenuView(): View { - menuBinding = LayoutDrawerMenuNavViewBinding.inflate(layoutInflater) - return menuBinding.root - } - - private lateinit var controller: NavigationViewController - - @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - LogConfiguration.setLoggingLevel("nav-sdk", LoggingLevel.DEBUG) - - controller = NavigationViewController(this, binding.navigationView) - - menuBinding.toggleReplay.isChecked = binding.navigationView.api.isReplayEnabled() - menuBinding.toggleReplay.setOnCheckedChangeListener { _, isChecked -> - binding.navigationView.api.routeReplayEnabled(isChecked) - } - - menuBinding.junctionViewTestButton.setOnClickListener { - lifecycleScope.launch { - val (origin, destination) = TestRoutes.valueOf( - menuBinding.spinnerTestRoute.selectedItem as String - ) - controller.startActiveGuidance(origin, destination) - closeDrawers() - } - } - - MapboxNavigationApp.installComponents(this) { - component(Junctions(binding.junctionImageView)) - } - } - - /** - * Simple component for detecting and rendering Junction Views. - */ - private class Junctions( - private val imageView: AppCompatImageView - ) : UIComponent() { - private var junctionApi: MapboxJunctionApi? = null - - override fun onAttached(mapboxNavigation: MapboxNavigation) { - super.onAttached(mapboxNavigation) - val token = mapboxNavigation.navigationOptions.accessToken!! - junctionApi = MapboxJunctionApi(token) - - mapboxNavigation.flowBannerInstructions().observe { instructions -> - junctionApi?.generateJunction(instructions) { result -> - result.fold( - { imageView.setImageBitmap(null) }, - { imageView.setImageBitmap(it.bitmap) } - ) - } - } - mapboxNavigation.flowRoutesUpdated().observe { - if (it.navigationRoutes.isEmpty()) { - imageView.setImageBitmap(null) - } - } - } - - override fun onDetached(mapboxNavigation: MapboxNavigation) { - super.onDetached(mapboxNavigation) - junctionApi?.cancelAll() - junctionApi = null - } - - @OptIn(ExperimentalCoroutinesApi::class) - private fun MapboxNavigation.flowBannerInstructions(): Flow = - callbackFlow { - val observer = BannerInstructionsObserver { trySend(it) } - registerBannerInstructionsObserver(observer) - awaitClose { unregisterBannerInstructionsObserver(observer) } - } - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/car/MainCarAppService.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/car/MainCarAppService.kt deleted file mode 100644 index cf97173ad59..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/car/MainCarAppService.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.car - -import androidx.car.app.CarAppService -import androidx.car.app.validation.HostValidator - -class MainCarAppService : CarAppService() { - override fun createHostValidator() = HostValidator.ALLOW_ALL_HOSTS_VALIDATOR - - override fun onCreateSession() = MainCarSession() -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/car/MainCarSession.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/car/MainCarSession.kt deleted file mode 100644 index 015178d955c..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/car/MainCarSession.kt +++ /dev/null @@ -1,175 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.car - -import android.annotation.SuppressLint -import android.content.Intent -import android.content.res.Configuration -import androidx.car.app.Screen -import androidx.car.app.Session -import androidx.car.app.model.ActionStrip -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.repeatOnLifecycle -import com.mapbox.android.core.permissions.PermissionsManager -import com.mapbox.androidauto.MapboxCarContext -import com.mapbox.androidauto.action.MapboxScreenActionStripProvider -import com.mapbox.androidauto.deeplink.GeoDeeplinkNavigateAction -import com.mapbox.androidauto.freedrive.FreeDriveActionStrip -import com.mapbox.androidauto.map.MapboxCarMapLoader -import com.mapbox.androidauto.map.compass.CarCompassRenderer -import com.mapbox.androidauto.map.logo.CarLogoRenderer -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager -import com.mapbox.androidauto.screenmanager.prepareExperimentalRoutePreviewScreen -import com.mapbox.androidauto.screenmanager.prepareScreens -import com.mapbox.maps.ContextMode -import com.mapbox.maps.MapInitOptions -import com.mapbox.maps.MapOptions -import com.mapbox.maps.applyDefaultParams -import com.mapbox.maps.extension.androidauto.MapboxCarMap -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp -import com.mapbox.navigation.core.lifecycle.requireMapboxNavigation -import com.mapbox.navigation.core.replay.route.ReplayRouteSession -import com.mapbox.navigation.core.trip.session.TripSessionState -import com.mapbox.navigation.examples.androidauto.CarAppSyncComponent -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.launch - -@OptIn(ExperimentalPreviewMapboxNavigationAPI::class) -class MainCarSession : Session() { - - private val mapboxCarMapLoader = MapboxCarMapLoader() - private val mapboxCarMap = MapboxCarMap().registerObserver(mapboxCarMapLoader) - private val mapboxCarContext = MapboxCarContext(lifecycle, mapboxCarMap) - .prepareScreens() - .prepareExperimentalRoutePreviewScreen() - .customize { - // Use the actionStripProvider to customize the screen actions. - actionsStripProvider = object : MapboxScreenActionStripProvider() { - override fun getFreeDrive(screen: Screen): ActionStrip { - val actionsBuilder = FreeDriveActionStrip(screen) - return ActionStrip.Builder() - .addAction(actionsBuilder.buildSettingsAction()) - .addAction(actionsBuilder.buildFeedbackAction()) - .addAction(actionsBuilder.buildSearchAction()) - .addAction(actionsBuilder.buildFavoritesAction()) - .build() - } - } - } - private val mapboxNavigation by requireMapboxNavigation() - private val replayRouteSession = ReplayRouteSession() - - init { - // Decide how you want the car and app to interact. In this example, the car and app - // are kept in sync where they essentially mirror each other. - CarAppSyncComponent.getInstance().setCarSession(this) - - // Add BitmapWidgets to the map that will be shown whenever the map is visible. - val logoSurfaceRenderer = CarLogoRenderer() - val compassSurfaceRenderer = CarCompassRenderer() - lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onCreate(owner: LifecycleOwner) { - // You must give the MapboxCarMap an instance of the carContext. - // The BitmapWidget needs to use ContextMode.SHARED to remove an optimization - // that can crash or create artifacts. - mapboxCarMap.setup( - carContext, - MapInitOptions( - context = carContext, - mapOptions = MapOptions.Builder() - .applyDefaultParams(carContext) - .contextMode(ContextMode.SHARED) - .build() - ) - ) - checkLocationPermissions() - observeAutoDrive() - } - - override fun onResume(owner: LifecycleOwner) { - mapboxCarMap.registerObserver(logoSurfaceRenderer) - mapboxCarMap.registerObserver(compassSurfaceRenderer) - } - - override fun onPause(owner: LifecycleOwner) { - mapboxCarMap.unregisterObserver(logoSurfaceRenderer) - mapboxCarMap.unregisterObserver(compassSurfaceRenderer) - } - - override fun onDestroy(owner: LifecycleOwner) { - mapboxCarMap.clearObservers() - } - }) - } - - // This logic is for you to decide. In this example the MapboxScreenManager.replaceTop is - // declared in other logical places. At this point the screen key should be already set. - override fun onCreateScreen(intent: Intent): Screen { - val screenKey = MapboxScreenManager.current()?.key - checkNotNull(screenKey) { "The screen key should be set before the Screen is requested." } - return mapboxCarContext.mapboxScreenManager.createScreen(screenKey) - } - - // Forward the CarContext to the MapboxCarMapLoader with the configuration changes. - override fun onCarConfigurationChanged(newConfiguration: Configuration) { - mapboxCarMapLoader.onCarConfigurationChanged(carContext) - } - - // Handle the geo deeplink for voice activated navigation. This will handle the case when - // you ask the head unit to "Navigate to coffee shop". - @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) - override fun onNewIntent(intent: Intent) { - super.onNewIntent(intent) - if (PermissionsManager.areLocationPermissionsGranted(carContext)) { - GeoDeeplinkNavigateAction(mapboxCarContext).onNewIntent(intent) - } - } - - // Location permissions are required for this example. Check the state and replace the current - // screen if there is not one already set. - private fun checkLocationPermissions() { - PermissionsManager.areLocationPermissionsGranted(carContext).also { isGranted -> - val currentKey = MapboxScreenManager.current()?.key - if (!isGranted) { - MapboxScreenManager.replaceTop(MapboxScreen.NEEDS_LOCATION_PERMISSION) - } else if (currentKey == null || currentKey == MapboxScreen.NEEDS_LOCATION_PERMISSION) { - MapboxScreenManager.replaceTop(MapboxScreen.FREE_DRIVE) - } - } - } - - // Enable auto drive. Open the app on the head unit and then execute the following from your - // computer terminal. - // adb shell dumpsys activity service com.mapbox.navigation.examples.androidauto.car.MainCarAppService AUTO_DRIVE - private fun observeAutoDrive() { - lifecycleScope.launch { - lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { - mapboxCarContext.mapboxNavigationManager.autoDriveEnabledFlow.collect { - refreshTripSession() - } - } - } - } - - @SuppressLint("MissingPermission") - private fun refreshTripSession() { - val isAutoDriveEnabled = mapboxCarContext.mapboxNavigationManager - .autoDriveEnabledFlow.value - if (!PermissionsManager.areLocationPermissionsGranted(carContext)) { - mapboxNavigation.stopTripSession() - return - } - - if (isAutoDriveEnabled) { - MapboxNavigationApp.registerObserver(replayRouteSession) - } else { - MapboxNavigationApp.unregisterObserver(replayRouteSession) - if (mapboxNavigation.getTripSessionState() != TripSessionState.STARTED) { - mapboxNavigation.startTripSession() - } - } - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/testing/CarJavaInterfaceChecker.java b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/testing/CarJavaInterfaceChecker.java deleted file mode 100644 index f16b456e6e0..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/testing/CarJavaInterfaceChecker.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.testing; - -import static com.mapbox.maps.extension.style.StyleExtensionImplKt.style; - -import android.app.Application; -import android.text.SpannableString; - -import androidx.annotation.NonNull; -import androidx.car.app.CarContext; -import androidx.car.app.model.Distance; -import androidx.lifecycle.LifecycleOwner; - -import com.mapbox.androidauto.internal.search.CarPlaceSearch; -import com.mapbox.androidauto.map.MapboxCarMapLoader; -import com.mapbox.androidauto.navigation.CarDistanceFormatter; -import com.mapbox.androidauto.navigation.MapboxCarNavigationManager; -import com.mapbox.maps.extension.androidauto.MapboxCarMap; -import com.mapbox.maps.extension.style.StyleContract; -import com.mapbox.navigation.base.options.NavigationOptions; -import com.mapbox.navigation.core.MapboxNavigation; -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp; -import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver; -import com.mapbox.navigation.ui.maps.NavigationStyles; - -import java.util.List; - -import kotlin.Unit; -import kotlinx.coroutines.CoroutineScope; - -class CarJavaInterfaceChecker { - - void MapboxNavigationApp( - Application application, - LifecycleOwner lifecycleOwner, - NavigationOptions navigationOptions, - MapboxNavigationObserver observer - ) { - // Set up now - MapboxNavigationApp.setup(navigationOptions); - - // Set up provider - MapboxNavigationApp.setup(() -> navigationOptions); - - // Control lifecycles - MapboxNavigationApp.attach(lifecycleOwner); - MapboxNavigationApp.disable(); - MapboxNavigationApp.detach(lifecycleOwner); - MapboxNavigationApp.attachAllActivities(application); - MapboxNavigationApp.getLifecycleOwner(); - - // Get current instance - MapboxNavigation mapboxNavigation = MapboxNavigationApp.current(); - - // Register and unregister observer - MapboxNavigationApp.registerObserver(observer); - MapboxNavigationApp.unregisterObserver(observer); - - MapboxNavigationObserver otherObserver = MapboxNavigationApp.getObserver(CarPlaceSearch.class); - List otherObservers = MapboxNavigationApp.getObservers(CarPlaceSearch.class); - } - - void MapboxNavigationObserver() { - MapboxNavigationObserver observer = new MapboxNavigationObserver() { - @Override - public void onAttached(@NonNull MapboxNavigation mapboxNavigation) { - - } - - @Override - public void onDetached(@NonNull MapboxNavigation mapboxNavigation) { - - } - }; - } - - void MapboxCarNavigationManager( - CarContext carContext, - LifecycleOwner lifecycleOwner, - MapboxCarMap mapboxCarMap - ) { - // Constructor - MapboxCarNavigationManager sut = new MapboxCarNavigationManager(carContext); - - // Observing auto drive - CoroutineScope scope = JavaFlow.lifecycleScope(lifecycleOwner); - JavaFlow.collect(sut.getAutoDriveEnabledFlow(), scope, (enabled) -> { - // check enabled - }); - - // Get auto drive value - boolean isEnabled = sut.getAutoDriveEnabledFlow().getValue(); - - // Register onto MapboxNavigationAPp - MapboxNavigationApp.registerObserver(sut); - MapboxNavigationApp.unregisterObserver(sut); - } - - void CarDistanceFormatter() { - SpannableString spannableString = CarDistanceFormatter.formatDistance(1200.0); - Distance distance = CarDistanceFormatter.carDistance(1200.0); - } - - void MapboxCarMapLoader() { - MapboxCarMapLoader sut = new MapboxCarMapLoader(); - sut.setDarkStyleOverride(styleExtension(NavigationStyles.NAVIGATION_NIGHT_STYLE)); - sut.setLightStyleOverride(styleExtension(NavigationStyles.NAVIGATION_DAY_STYLE)); - } - - StyleContract.StyleExtension styleExtension(String styleUri) { - return style(styleUri, builder -> Unit.INSTANCE); - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/testing/JavaFlow.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/testing/JavaFlow.kt deleted file mode 100644 index e9e6d6bfd8c..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/testing/JavaFlow.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.testing - -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.lifecycleScope -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.collect -import kotlinx.coroutines.launch - -/** - * This is not production tested. It is used to showcase java interoperability. - */ -object JavaFlow { - - @JvmStatic - fun lifecycleScope(owner: LifecycleOwner): CoroutineScope = owner.lifecycleScope - - @JvmStatic - fun collect(flow: Flow, scope: CoroutineScope, consumer: Consumer) { - scope.launch { - flow.collect { value -> consumer.accept(value) } - } - } -} - -interface Consumer { - fun accept(value: T) -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/MapboxNavigationEx.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/MapboxNavigationEx.kt deleted file mode 100644 index 6f75a30823d..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/MapboxNavigationEx.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.utils - -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigation.base.route.NavigationRouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import kotlinx.coroutines.suspendCancellableCoroutine -import kotlin.coroutines.resume -import kotlin.coroutines.resumeWithException - -internal suspend fun MapboxNavigation.fetchRoute( - origin: Point, - destination: Point, -): List = - fetchRoute( - RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(navigationOptions.applicationContext) - .layersList(listOf(getZLevel(), null)) - .coordinatesList(listOf(origin, destination)) - .alternatives(true) - .build() - ) - -internal suspend fun MapboxNavigation.fetchRoute( - routeOptions: RouteOptions -): List = suspendCancellableCoroutine { cont -> - val requestId = requestRoutes( - routeOptions, - object : NavigationRouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - cont.resume(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - cont.resumeWithException(FetchRouteError(reasons, routeOptions)) - } - - override fun onCanceled( - routeOptions: RouteOptions, - routerOrigin: RouterOrigin - ) = Unit - } - ) - cont.invokeOnCancellation { cancelRouteRequest(requestId) } -} - -internal class FetchRouteError( - val reasons: List, - val routeOptions: RouteOptions -) : Error() diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/NavigationViewController.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/NavigationViewController.kt deleted file mode 100644 index c08c18a3c83..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/NavigationViewController.kt +++ /dev/null @@ -1,73 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.utils - -import android.location.Location -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.LifecycleOwner -import com.mapbox.geojson.Point -import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.internal.extensions.flowNewRawLocation -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp -import com.mapbox.navigation.dropin.NavigationView -import com.mapbox.navigation.ui.base.lifecycle.UIComponent -import com.mapbox.navigation.utils.internal.toPoint -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.filterNotNull -import kotlinx.coroutines.flow.first - -/** - * Lifecycle aware thin wrapper around NavigationView that offers convenience methods for - * fetching routes and starting active navigation. - */ -internal class NavigationViewController( - lifecycleOwner: LifecycleOwner, - private val navigationView: NavigationView -) : DefaultLifecycleObserver, UIComponent() { - init { - lifecycleOwner.lifecycle.addObserver(this) - } - - val location = MutableStateFlow(null) - private val mapboxNavigation = MutableStateFlow(null) - - override fun onCreate(owner: LifecycleOwner) { - MapboxNavigationApp.registerObserver(this) - } - - override fun onDestroy(owner: LifecycleOwner) { - MapboxNavigationApp.unregisterObserver(this) - } - - override fun onAttached(mapboxNavigation: MapboxNavigation) { - super.onAttached(mapboxNavigation) - this.mapboxNavigation.value = mapboxNavigation - mapboxNavigation.flowNewRawLocation().observe { - location.value = it - } - } - - override fun onDetached(mapboxNavigation: MapboxNavigation) { - super.onDetached(mapboxNavigation) - this.mapboxNavigation.value = null - } - - suspend fun startActiveGuidance(destination: Point) { - val routes = fetchRoute(destination) - navigationView.api.startActiveGuidance(routes) - } - - suspend fun startActiveGuidance(origin: Point, destination: Point) { - val routes = fetchRoute(origin, destination) - navigationView.api.startActiveGuidance(routes) - } - - suspend fun fetchRoute(destination: Point): List { - val origin = location.filterNotNull().first().toPoint() - return fetchRoute(origin, destination) - } - - suspend fun fetchRoute(origin: Point, destination: Point): List { - val mapboxNavigation = this.mapboxNavigation.filterNotNull().first() - return mapboxNavigation.fetchRoute(origin, destination) - } -} diff --git a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/TestRoutes.kt b/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/TestRoutes.kt deleted file mode 100644 index edae3cd2f72..00000000000 --- a/android-auto-app/src/main/java/com/mapbox/navigation/examples/androidauto/utils/TestRoutes.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.mapbox.navigation.examples.androidauto.utils - -import com.mapbox.geojson.Point - -/** - * Coordinates containing `subType = JCT` - * 139.7745686, 35.677573;139.784915, 35.680960 - * https://api.mapbox.com/guidance-views/v1/709948800/jct/CA075101?arrow_ids=CA07510E - * - * Coordinates containing `subType` = SAPA` - * 137.76136788022933, 34.83891088143494;137.75220947550804, 34.840924660770725 - * https://api.mapbox.com/guidance-views/v1/709948800/sapa/SA117201?arrow_ids=SA11720A - * - * Coordinates containing `subType` = CITYREAL` - * 139.68153626083233, 35.66812853462302;139.68850488593154, 35.66099697148769 - * https://api.mapbox.com/guidance-views/v1/709948800/cityreal/13c00282_o40d?arrow_ids=13c00282_o41a - * - * Coordinates containing `subType` = TOLLBRANCH` - * 137.02725, 35.468588;137.156787, 35.372602 - * https://api.mapbox.com/guidance-views/v1/709948800/tollbranch/CR896101?arrow_ids=CR89610A - * - * Coordinates containing `subType` = AFTERTOLL` - * 141.4223967090212, 43.07693368987961;141.42118630948409, 43.07604662044662 - * https://api.mapbox.com/guidance-views/v1/709948800/aftertoll/HW00101805?arrow_ids=HW00101805_1 - * - * Coordinates containing `subType` = EXPRESSWAY_ENTRANCE` - * 139.724088, 35.672885; 139.630359, 35.626416 - * https://api.mapbox.com/guidance-views/v1/709948800/entrance/13i00015_o10d?arrow_ids=13i00015_o11a - * - * Coordinates containing `subType` = EXPRESSWAY_EXIT` - * 135.324023, 34.715952;135.296332, 34.711387 - * https://api.mapbox.com/guidance-views/v1/709948800/exit/28o00022_o20d?arrow_ids=28o00022_o21a - */ -internal enum class TestRoutes( - val origin: Point, - val destination: Point -) { - JCT( - Point.fromLngLat(139.7745686, 35.677573), - Point.fromLngLat(139.784915, 35.680960) - ), - SAPA( - Point.fromLngLat(137.76136788022933, 34.83891088143494), - Point.fromLngLat(137.75220947550804, 34.840924660770725) - ), - CITYREAL( - Point.fromLngLat(139.68153626083233, 35.66812853462302), - Point.fromLngLat(139.68850488593154, 35.66099697148769) - ), - TOLLBRANCH( - Point.fromLngLat(137.02725, 35.468588), - Point.fromLngLat(137.156787, 35.372602) - ), - AFTERTOLL( - Point.fromLngLat(141.4223967090212, 43.07693368987961), - Point.fromLngLat(141.42118630948409, 43.07604662044662) - ), - EXPRESSWAY_ENTRANCE( - Point.fromLngLat(139.724088, 35.672885), - Point.fromLngLat(139.630359, 35.626416) - ), - EXPRESSWAY_EXIT( - Point.fromLngLat(135.324023, 34.715952), - Point.fromLngLat(135.296332, 34.711387) - ); - - operator fun component1(): Point = origin - operator fun component2(): Point = destination -} diff --git a/android-auto-app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/android-auto-app/src/main/res/drawable-v24/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d11462..00000000000 --- a/android-auto-app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/drawable/ic_baseline_menu_24.xml b/android-auto-app/src/main/res/drawable/ic_baseline_menu_24.xml deleted file mode 100644 index dbeefd45f0f..00000000000 --- a/android-auto-app/src/main/res/drawable/ic_baseline_menu_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/android-auto-app/src/main/res/drawable/ic_launcher_background.xml b/android-auto-app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9cbf1..00000000000 --- a/android-auto-app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/android-auto-app/src/main/res/drawable/menu_button_bg.xml b/android-auto-app/src/main/res/drawable/menu_button_bg.xml deleted file mode 100644 index e6e4f3f7b47..00000000000 --- a/android-auto-app/src/main/res/drawable/menu_button_bg.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/layout/activity_drawer.xml b/android-auto-app/src/main/res/layout/activity_drawer.xml deleted file mode 100644 index ce7f3254d2e..00000000000 --- a/android-auto-app/src/main/res/layout/activity_drawer.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/android-auto-app/src/main/res/layout/activity_main.xml b/android-auto-app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 27b1e43e4d5..00000000000 --- a/android-auto-app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/layout/layout_drawer_menu_nav_view.xml b/android-auto-app/src/main/res/layout/layout_drawer_menu_nav_view.xml deleted file mode 100644 index 4f761a749cc..00000000000 --- a/android-auto-app/src/main/res/layout/layout_drawer_menu_nav_view.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android-auto-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index eca70cfe52e..00000000000 --- a/android-auto-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/android-auto-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index eca70cfe52e..00000000000 --- a/android-auto-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/mipmap-hdpi/ic_launcher.png b/android-auto-app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a571e60098c..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android-auto-app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 61da551c559..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-mdpi/ic_launcher.png b/android-auto-app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c41dd285319..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android-auto-app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index db5080a7527..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android-auto-app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6dba46dab19..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android-auto-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index da31a871c8d..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android-auto-app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 15ac681720f..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android-auto-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index b216f2d313c..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android-auto-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f25a4197447..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/android-auto-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android-auto-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index e96783ccce8..00000000000 Binary files a/android-auto-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/android-auto-app/src/main/res/values-night/themes.xml b/android-auto-app/src/main/res/values-night/themes.xml deleted file mode 100644 index 3ce38bafeee..00000000000 --- a/android-auto-app/src/main/res/values-night/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/values/colors.xml b/android-auto-app/src/main/res/values/colors.xml deleted file mode 100644 index f8c6127d327..00000000000 --- a/android-auto-app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/android-auto-app/src/main/res/values/strings.xml b/android-auto-app/src/main/res/values/strings.xml deleted file mode 100644 index 0b6a38d0b2b..00000000000 --- a/android-auto-app/src/main/res/values/strings.xml +++ /dev/null @@ -1,15 +0,0 @@ - - Dev Android Auto - - Hello blank fragment - - - JCT - SAPA - CITYREAL - TOLLBRANCH - AFTERTOLL - EXPRESSWAY_ENTRANCE - EXPRESSWAY_EXIT - - \ No newline at end of file diff --git a/android-auto-app/src/main/res/values/themes.xml b/android-auto-app/src/main/res/values/themes.xml deleted file mode 100644 index 484dc751f46..00000000000 --- a/android-auto-app/src/main/res/values/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/qa-test-app/.gitignore b/androidauto/.gitignore similarity index 100% rename from qa-test-app/.gitignore rename to androidauto/.gitignore diff --git a/androidauto/README.md b/androidauto/README.md new file mode 100644 index 00000000000..4d3b7b12172 --- /dev/null +++ b/androidauto/README.md @@ -0,0 +1,117 @@ + +

+ + +

+ +## Overview + +The Mapbox Navigation Android Auto SDK is a public library to help you publish Mapbox Android Auto +apps to [Google Play](https://play.google.com/store/apps). The library provides everything you need +to have an Android Auto Navigation App accepted by Google Play. This library bundles +[Mapbox Maps](https://www.mapbox.com/maps), [Mapbox Navigation](https://www.mapbox.com/navigation/), +[Mapbox Search](https://www.mapbox.com/search), and the +[Jetpack Car Library for Android Auto](https://developer.android.com/jetpack/androidx/releases/car-app). + +This library builds on top of the +[Mapbox Maps Android Auto Extension](https://github.com/mapbox/mapbox-maps-android/tree/main/extension-androidauto). +Please refer to the maps extension for building solutions without Mapbox Navigation. + +A simple example can be found in our +[app-qa-androidauto](https://github.com/mapbox/navigation/tree/main/projects/mapbox-navigation-android/app-qa-androidauto). +To see a larger integration, you can refer to the +[navigation examples](https://github.com/mapbox/mapbox-navigation-android-examples). + +Please refer to +[Google's developer documentation](https://developer.android.com/training/cars/navigation)to learn +how to develop apps for Android Auto. + +## Getting Started + +This README is intended for building an app that uses the Mapbox Navigation Android Auto SDK. To +add the android auto extension to your project, you configure its dependency in your `build.gradle` +files. + +```groovy +// In the root build.gradle file +// The Mapbox access token needs to a scope set to DOWNLOADS:READ +allprojects { + repositories { + maven { + url 'https://api.mapbox.com/downloads/v2/releases/maven' + authentication { + basic(BasicAuthentication) + } + credentials { + username = "mapbox" + password = "MAPBOX_SECRET_TOKEN" + } + } + } +} + +// You must have the same version android-auto-components as Nav SDK version if you use the latest +dependencies { + implementation 'com.mapbox.navigationcore:android-auto-components:${NAV_SDK_VERSION}' +} +``` + +## AndroidManifest and CarAppService + +You should become familiar with +[Google's documentation for building a navigation app](https://developer.android.com/training/cars/apps/navigation). +You will need to declare your own +[CarAppService](https://developer.android.com/reference/androidx/car/app/CarAppService) to get +started. You will also need to specify the `androidx.car.app.category.NAVIGATION` category in order +to have the app accepted by Google Play. + +``` xml + + + + + + + + + + + + +``` + +## Example MainCarAppService + +``` +class MainCarAppService : CarAppService() { + override fun createHostValidator() = HostValidator.ALLOW_ALL_HOSTS_VALIDATOR + + override fun onCreateSession() = MainCarSession() +} +``` + +The `MainCarSession` example is where you will implement your Android Auto experience. All the building blocks are included in the SDK, but you will need to decide how to use them yourself. Mapbox is also simplifiying and solidifying this architecuture. Please refer to `MapboxCarMap` and `MapboxNavigationApp`. `MapboxCarMap` will make the Mapbox Map show on the Android Auto head unit, you can add/remove elements with `MapboxCarMapObserver`. Similarly, `MapboxNavigationApp` helps you to customize the entire turn-by-turn navigation experience. + +## Testing + +Please refer to [Google training documentation](https://developer.android.com/training/cars/testing) to use the ./desktop-head-unit. + +tl;dr here. You need to run an emulator to test Android Auto. +Testing in real cars, requires publishing your app to Google Play. + +1. Install the emulator: SDK Manager > SDK Tools > Android Auto Desktop Head Unit Emulator > **install** +1. Make sure you have the Android Auto app on your phone https://play.google.com/store/apps/details?id=com.google.android.projection.gearhead +1. Android Auto App, enable developer settings by tapping on device info and then version info +1. Android Auto App > click the hamburger on the top right > Start head unit server +1. Set the `ANDROID_HOME` environment variable to your android SDK location (e.g., /Users/{user}/Library/Android/sdk) +1. $ make car + 1. $ adb forward tcp:5277 tcp:5277 + 1. $ cd $(ANDROID_HOME)/extras/google/auto/ + 1. $ ./desktop-head-unit diff --git a/androidauto/api/current.txt b/androidauto/api/current.txt new file mode 100644 index 00000000000..56dc5e75a6a --- /dev/null +++ b/androidauto/api/current.txt @@ -0,0 +1,995 @@ +// Signature format: 3.0 +package com.mapbox.navigation.ui.androidauto { + + public final class MapboxCarContext { + ctor public MapboxCarContext(androidx.lifecycle.Lifecycle lifecycle, com.mapbox.maps.extension.androidauto.MapboxCarMap mapboxCarMap); + method public com.mapbox.navigation.ui.androidauto.MapboxCarContext customize(kotlin.jvm.functions.Function1 action); + method public androidx.car.app.CarContext getCarContext(); + method public androidx.lifecycle.Lifecycle getLifecycle(); + method public com.mapbox.maps.extension.androidauto.MapboxCarMap getMapboxCarMap(); + method public com.mapbox.navigation.ui.androidauto.settings.MapboxCarStorage getMapboxCarStorage(); + method public com.mapbox.navigation.ui.androidauto.navigation.MapboxCarNavigationManager getMapboxNavigationManager(); + method public com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager getMapboxScreenManager(); + method public com.mapbox.navigation.ui.androidauto.MapboxCarOptions getOptions(); + method public com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRequest getRoutePreviewRequest(); + property public final androidx.car.app.CarContext carContext; + property public final androidx.lifecycle.Lifecycle lifecycle; + property public final com.mapbox.maps.extension.androidauto.MapboxCarMap mapboxCarMap; + property public final com.mapbox.navigation.ui.androidauto.settings.MapboxCarStorage mapboxCarStorage; + property public final com.mapbox.navigation.ui.androidauto.navigation.MapboxCarNavigationManager mapboxNavigationManager; + property public final com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager mapboxScreenManager; + property public final com.mapbox.navigation.ui.androidauto.MapboxCarOptions options; + property public final com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRequest routePreviewRequest; + } + + public final class MapboxCarOptions { + ctor public MapboxCarOptions(); + method public void applyCustomization(com.mapbox.navigation.ui.androidauto.MapboxCarOptions.Customization customization); + method public com.mapbox.navigation.ui.androidauto.action.MapboxScreenActionStripProvider getActionStripProvider(); + method public com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions getCarFeedbackOptions(); + method public com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions getCarPlaceSearchOptions(); + method public com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackPollProvider getFeedbackPollProvider(); + method public com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions getNotificationOptions(); + method public com.mapbox.navigation.ui.androidauto.preview.CarRouteOptionsInterceptor getRouteOptionsInterceptor(); + method public kotlinx.coroutines.flow.StateFlow getSpeedLimitOptions(); + property public final com.mapbox.navigation.ui.androidauto.action.MapboxScreenActionStripProvider actionStripProvider; + property public final com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions carFeedbackOptions; + property public final com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions carPlaceSearchOptions; + property public final com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackPollProvider feedbackPollProvider; + property public final com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions notificationOptions; + property public final com.mapbox.navigation.ui.androidauto.preview.CarRouteOptionsInterceptor routeOptionsInterceptor; + property public final kotlinx.coroutines.flow.StateFlow speedLimitOptions; + } + + public static final class MapboxCarOptions.Customization { + ctor public MapboxCarOptions.Customization(); + method public com.mapbox.navigation.ui.androidauto.action.MapboxScreenActionStripProvider? getActionsStripProvider(); + method public com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions? getCarFeedbackOptions(); + method public com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackPollProvider? getFeedbackPollProvider(); + method public com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions? getNotificationOptions(); + method public com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions? getPlaceSearchOptions(); + method public com.mapbox.navigation.ui.androidauto.preview.CarRouteOptionsInterceptor? getRouteOptionsInterceptor(); + method public com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions? getSpeedLimitOptions(); + method public void setActionsStripProvider(com.mapbox.navigation.ui.androidauto.action.MapboxScreenActionStripProvider?); + method public void setCarFeedbackOptions(com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions?); + method public void setFeedbackPollProvider(com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackPollProvider?); + method public void setNotificationOptions(com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions?); + method public void setPlaceSearchOptions(com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions?); + method public void setRouteOptionsInterceptor(com.mapbox.navigation.ui.androidauto.preview.CarRouteOptionsInterceptor?); + method public void setSpeedLimitOptions(com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions?); + property public final com.mapbox.navigation.ui.androidauto.action.MapboxScreenActionStripProvider? actionsStripProvider; + property public final com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions? carFeedbackOptions; + property public final com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackPollProvider? feedbackPollProvider; + property public final com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions? notificationOptions; + property public final com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions? placeSearchOptions; + property public final com.mapbox.navigation.ui.androidauto.preview.CarRouteOptionsInterceptor? routeOptionsInterceptor; + property public final com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions? speedLimitOptions; + } + +} + +package com.mapbox.navigation.ui.androidauto.action { + + public final class MapboxMapActionStrip { + ctor public MapboxMapActionStrip(androidx.car.app.Screen screen, com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera carNavigationCamera); + method public androidx.car.app.model.ActionStrip build(); + } + + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public class MapboxScreenActionStripProvider { + ctor public MapboxScreenActionStripProvider(); + method public androidx.car.app.model.ActionStrip getActionStrip(androidx.car.app.Screen screen, @com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.Key String mapboxScreen); + method protected androidx.car.app.model.ActionStrip getActiveGuidance(androidx.car.app.Screen screen); + method protected androidx.car.app.model.ActionStrip getFavorites(androidx.car.app.Screen screen); + method protected androidx.car.app.model.ActionStrip getFreeDrive(androidx.car.app.Screen screen); + method protected androidx.car.app.model.ActionStrip getGeoDeeplink(androidx.car.app.Screen screen); + method protected androidx.car.app.model.ActionStrip getRoutePreview(androidx.car.app.Screen screen); + method protected androidx.car.app.model.ActionStrip getSearch(androidx.car.app.Screen screen); + } + +} + +package com.mapbox.navigation.ui.androidauto.deeplink { + + public final class GeoDeeplinkGeocoding { + ctor public GeoDeeplinkGeocoding(String accessToken); + method public void cancel(); + method public com.mapbox.api.geocoding.v5.MapboxGeocoding? getCurrentMapboxGeocoding(); + method public suspend Object? requestPlaces(com.mapbox.navigation.core.geodeeplink.GeoDeeplink geoDeeplink, com.mapbox.geojson.Point origin, kotlin.coroutines.Continuation); + method public void setCurrentMapboxGeocoding(com.mapbox.api.geocoding.v5.MapboxGeocoding?); + property public final com.mapbox.api.geocoding.v5.MapboxGeocoding? currentMapboxGeocoding; + } + + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class GeoDeeplinkNavigateAction { + ctor public GeoDeeplinkNavigateAction(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.MapboxCarContext getMapboxCarContext(); + method public boolean onNewIntent(android.content.Intent intent); + property public final com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext; + } + + public final class GeoDeeplinkParser { + method public kotlinx.coroutines.channels.ReceiveChannel getDestinationReceiveChannel(); + method public void parseAndSave(String? geoDeeplink); + property public final kotlinx.coroutines.channels.ReceiveChannel destinationReceiveChannel; + field public static final com.mapbox.navigation.ui.androidauto.deeplink.GeoDeeplinkParser INSTANCE; + } + +} + +package com.mapbox.navigation.ui.androidauto.feedback.core { + + public final class CarFeedbackOptions { + method public com.mapbox.navigation.core.telemetry.events.BitmapEncodeOptions getBitmapEncodeOptions(); + property public final com.mapbox.navigation.core.telemetry.events.BitmapEncodeOptions bitmapEncodeOptions; + } + + public static final class CarFeedbackOptions.Builder { + ctor public CarFeedbackOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions build(); + } + + public class CarFeedbackPollProvider { + ctor public CarFeedbackPollProvider(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getActiveGuidanceFeedbackPoll(androidx.car.app.CarContext carContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getArrivalFeedbackPoll(androidx.car.app.CarContext carContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getFreeDriveFeedbackPoll(androidx.car.app.CarContext carContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getRoutePreviewFeedbackPoll(androidx.car.app.CarContext carContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getSearchFeedbackPoll(androidx.car.app.CarContext carContext); + } + + public abstract class CarFeedbackScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public CarFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + method public abstract com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public abstract String getSourceName(); + method public void onFinish(); + } + +} + +package com.mapbox.navigation.ui.androidauto.feedback.ui { + + public final class CarFeedbackAction { + ctor public CarFeedbackAction(@com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.Key String carFeedbackScreen); + method public androidx.car.app.model.Action getAction(androidx.car.app.Screen screen); + } + + public abstract sealed class CarFeedbackIcon { + } + + public static final class CarFeedbackIcon.Local extends com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon { + ctor public CarFeedbackIcon.Local(androidx.car.app.model.CarIcon icon); + method public androidx.car.app.model.CarIcon component1(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon.Local copy(androidx.car.app.model.CarIcon icon); + method public androidx.car.app.model.CarIcon getIcon(); + property public final androidx.car.app.model.CarIcon icon; + } + + public static final class CarFeedbackIcon.Remote extends com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon { + ctor public CarFeedbackIcon.Remote(android.net.Uri uri); + method public android.net.Uri component1(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon.Remote copy(android.net.Uri uri); + method public android.net.Uri getUri(); + property public final android.net.Uri uri; + } + + public final class CarFeedbackOption { + ctor public CarFeedbackOption(String title, com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon icon, String? type = null, java.util.List? subType = null, String? searchFeedbackReason = null, String? favoritesFeedbackReason = null, com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll? nextPoll = null); + method public String component1(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon component2(); + method public String? component3(); + method public java.util.List? component4(); + method public String? component5(); + method public String? component6(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll? component7(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackOption copy(String title, com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon icon, String? type, java.util.List? subType, String? searchFeedbackReason, String? favoritesFeedbackReason, com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll? nextPoll); + method public String? getFavoritesFeedbackReason(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon getIcon(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll? getNextPoll(); + method public String? getSearchFeedbackReason(); + method public java.util.List? getSubType(); + method public String getTitle(); + method public String? getType(); + property public final String? favoritesFeedbackReason; + property public final com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon icon; + property public final com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll? nextPoll; + property public final String? searchFeedbackReason; + property public final java.util.List? subType; + property public final String title; + property public final String? type; + } + + public final class CarFeedbackPoll { + ctor public CarFeedbackPoll(String title, java.util.List options); + method public String component1(); + method public java.util.List component2(); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll copy(String title, java.util.List options); + method public java.util.List getOptions(); + method public String getTitle(); + property public final java.util.List options; + property public final String title; + } + +} + +package com.mapbox.navigation.ui.androidauto.freedrive { + + public final class FreeDriveActionStrip { + ctor public FreeDriveActionStrip(androidx.car.app.Screen screen); + method public androidx.car.app.model.Action buildFavoritesAction(); + method public androidx.car.app.model.Action buildFeedbackAction(); + method public androidx.car.app.model.Action buildSearchAction(); + method public androidx.car.app.model.Action buildSettingsAction(); + method public androidx.car.app.model.ActionStrip.Builder builder(); + } + +} + +package com.mapbox.navigation.ui.androidauto.location { + + public final class CarLocationProvider implements com.mapbox.maps.plugin.locationcomponent.LocationProvider com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { + method public static com.mapbox.navigation.ui.androidauto.location.CarLocationProvider getRegisteredInstance(); + method public com.mapbox.common.location.Location? lastLocation(); + method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void registerLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer); + method public void unRegisterLocationConsumer(com.mapbox.maps.plugin.locationcomponent.LocationConsumer locationConsumer); + method public suspend Object? validLocation(kotlin.coroutines.Continuation); + field public static final com.mapbox.navigation.ui.androidauto.location.CarLocationProvider.Companion Companion; + } + + public static final class CarLocationProvider.Companion { + method public com.mapbox.navigation.ui.androidauto.location.CarLocationProvider getRegisteredInstance(); + } + + public final class CarLocationPuck { + method public com.mapbox.maps.plugin.LocationPuck2D navigationPuck2D(); + field public static final com.mapbox.navigation.ui.androidauto.location.CarLocationPuck INSTANCE; + } + + public final class CarLocationRenderer implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarLocationRenderer(); + } + +} + +package com.mapbox.navigation.ui.androidauto.map { + + public final class MapboxCarMapLoader implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public MapboxCarMapLoader(); + method public com.mapbox.maps.extension.style.StyleContract.StyleExtension getStyleExtension(boolean isDarkMode); + method public com.mapbox.navigation.ui.androidauto.map.MapboxCarMapLoader onCarConfigurationChanged(androidx.car.app.CarContext carContext); + method public com.mapbox.navigation.ui.androidauto.map.MapboxCarMapLoader setDarkStyleOverride(com.mapbox.maps.extension.style.StyleContract.StyleExtension? styleContract); + method public com.mapbox.navigation.ui.androidauto.map.MapboxCarMapLoader setLightStyleOverride(com.mapbox.maps.extension.style.StyleContract.StyleExtension? styleContract); + } + +} + +package com.mapbox.navigation.ui.androidauto.map.compass { + + public final class CarCompassRenderer implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarCompassRenderer(); + } + +} + +package com.mapbox.navigation.ui.androidauto.map.logo { + + public final class CarLogoRenderer implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarLogoRenderer(); + } + +} + +package com.mapbox.navigation.ui.androidauto.navigation { + + public final class CarActiveGuidanceMarkers implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarActiveGuidanceMarkers(com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider carRoutesProvider = com.mapbox.navigation.ui.androidauto.routes.NavigationCarRoutesProvider()); + } + + public final class CarArrivalTrigger implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { + ctor public CarArrivalTrigger(); + method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void triggerArrival(); + } + + public enum CarCameraMode { + enum_constant public static final com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode FOLLOWING; + enum_constant public static final com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode IDLE; + enum_constant public static final com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode OVERVIEW; + } + + public final class CarDistanceFormatter { + method public static androidx.car.app.model.Distance carDistance(double distanceMeters); + method public static android.text.SpannableString formatDistance(double distance); + field public static final com.mapbox.navigation.ui.androidauto.navigation.CarDistanceFormatter INSTANCE; + } + + public final class CarLocationsOverviewCamera implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarLocationsOverviewCamera(com.mapbox.maps.CameraOptions initialCameraOptions = CameraOptions.().zoom(DEFAULT_INITIAL_ZOOM).build()); + method @UiThread public void updateWithLocations(java.util.List points); + field public static final double DEFAULT_INITIAL_ZOOM = 15.0; + } + + @UiThread public final class CarNavigationCamera implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarNavigationCamera(com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode initialCarCameraMode, com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode? alternativeCarCameraMode, com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider carRoutesProvider = com.mapbox.navigation.ui.androidauto.routes.NavigationCarRoutesProvider(), com.mapbox.maps.CameraOptions? initialCameraOptions = CameraOptions.().zoom(DEFAULT_INITIAL_ZOOM).build()); + method public boolean followingZoomUpdatesAllowed(); + method public com.mapbox.maps.extension.androidauto.DefaultMapboxCarMapGestureHandler getGestureHandler(); + method public kotlinx.coroutines.flow.StateFlow getNextCameraMode(); + method public void updateCameraMode(com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode carCameraMode); + method public void zoomInAction(); + method public void zoomOutAction(); + method public void zoomUpdatesAllowed(boolean allowed); + property public final com.mapbox.maps.extension.androidauto.DefaultMapboxCarMapGestureHandler gestureHandler; + property public final kotlinx.coroutines.flow.StateFlow nextCameraMode; + } + + public final class CarNavigationCameraKt { + } + + public final class CarNavigationEtaMapper { + ctor public CarNavigationEtaMapper(com.mapbox.navigation.tripdata.progress.api.MapboxTripProgressApi tripProgressApi); + method public androidx.car.app.navigation.model.TravelEstimate getDestinationTravelEstimate(com.mapbox.navigation.base.trip.model.RouteProgress routeProgress); + } + + public final class CarNavigationInfo { + method public androidx.car.app.navigation.model.TravelEstimate? getDestinationTravelEstimate(); + method public androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? getNavigationInfo(); + property public final androidx.car.app.navigation.model.TravelEstimate? destinationTravelEstimate; + property public final androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? navigationInfo; + } + + public final class CarNavigationInfoMapper { + ctor public CarNavigationInfoMapper(android.content.Context context, com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverInstructionRenderer carManeuverInstructionRenderer, com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconRenderer carManeuverIconRenderer, com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImageRenderer carLanesImageGenerator); + method public androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? mapNavigationInfo(com.mapbox.bindgen.Expected> expectedManeuvers, java.util.List routeShields, com.mapbox.navigation.base.trip.model.RouteProgress routeProgress, com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionValue? junctionValue = null); + method public androidx.car.app.navigation.model.NavigationTemplate.NavigationInfo? mapNavigationInfo(com.mapbox.bindgen.Expected> expectedManeuvers, java.util.List routeShields, com.mapbox.navigation.base.trip.model.RouteProgress routeProgress); + } + + public final class CarNavigationInfoProvider implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarNavigationInfoProvider(); + method public kotlinx.coroutines.flow.StateFlow getCarNavigationInfo(); + method public com.mapbox.navigation.ui.androidauto.navigation.CarNavigationInfoProvider invalidateOnChange(androidx.car.app.Screen screen); + method public androidx.car.app.navigation.model.NavigationTemplate.Builder setNavigationInfo(androidx.car.app.navigation.model.NavigationTemplate.Builder builder); + property public final kotlinx.coroutines.flow.StateFlow carNavigationInfo; + } + + public final class MapUserStyleObserver implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public MapUserStyleObserver(); + method public String getStyleId(); + method public String getUserId(); + method public void setStyleId(String); + method public void setUserId(String); + property public final String styleId; + property public final String userId; + } + + public final class MapboxCarNavigationManager implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { + method public kotlinx.coroutines.flow.StateFlow getAutoDriveEnabledFlow(); + method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + property public final kotlinx.coroutines.flow.StateFlow autoDriveEnabledFlow; + } + +} + +package com.mapbox.navigation.ui.androidauto.navigation.audioguidance { + + public final class AppAudioGuidanceUiKt { + method @UiThread public static void muteAudioGuidance(androidx.lifecycle.Lifecycle); + } + + public final class CarAudioGuidanceAction { + ctor public CarAudioGuidanceAction(); + method public androidx.car.app.model.Action getAction(androidx.car.app.Screen screen); + } + +} + +package com.mapbox.navigation.ui.androidauto.navigation.lanes { + + public final class CarLaneIcon { + ctor public CarLaneIcon(com.mapbox.navigation.tripdata.maneuver.model.LaneIcon laneIcon, boolean isActive); + method public com.mapbox.navigation.tripdata.maneuver.model.LaneIcon component1(); + method public boolean component2(); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIcon copy(com.mapbox.navigation.tripdata.maneuver.model.LaneIcon laneIcon, boolean isActive); + method public com.mapbox.navigation.tripdata.maneuver.model.LaneIcon getLaneIcon(); + method public boolean isActive(); + property public final boolean isActive; + property public final com.mapbox.navigation.tripdata.maneuver.model.LaneIcon laneIcon; + } + + public final class CarLaneIconOptions { + method public android.content.res.Resources.Theme getActiveTheme(); + method public android.content.res.Resources.Theme getNotActiveTheme(); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions.Builder toBuilder(); + property public final android.content.res.Resources.Theme activeTheme; + property public final android.content.res.Resources.Theme notActiveTheme; + } + + public static final class CarLaneIconOptions.Builder { + ctor public CarLaneIconOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions.Builder activeTheme(android.content.res.Resources.Theme activeTheme); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions build(android.content.Context? context = null); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions.Builder notActiveTheme(android.content.res.Resources.Theme notActiveTheme); + } + + public final class CarLanesImage { + method public androidx.car.app.model.CarIcon getCarIcon(); + method public java.util.List getLanes(); + property public final androidx.car.app.model.CarIcon carIcon; + property public final java.util.List lanes; + } + + public final class CarLanesImageRenderer { + ctor public CarLanesImageRenderer(android.content.Context context, @ColorInt int background = 0, com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions options = CarLaneIconOptions.().build(context)); + method public int getBackground(); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions getOptions(); + method public com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImage? renderLanesImage(com.mapbox.navigation.tripdata.maneuver.model.Lane? lane); + property public final int background; + property public final com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLaneIconOptions options; + } + + public final class CarLanesImageRendererKt { + method public static androidx.car.app.navigation.model.Step.Builder useMapboxLaneGuidance(androidx.car.app.navigation.model.Step.Builder, com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImageRenderer imageGenerator, com.mapbox.navigation.tripdata.maneuver.model.Lane? laneGuidance); + } + +} + +package com.mapbox.navigation.ui.androidauto.navigation.maneuver { + + public final class CarManeuverIconOptions { + method public int getBackground(); + method public android.content.Context getContext(); + method public int getStyleRes(); + method public com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconOptions.Builder toBuilder(); + property public final int background; + property public final android.content.Context context; + property public final int styleRes; + } + + public static final class CarManeuverIconOptions.Builder { + ctor public CarManeuverIconOptions.Builder(android.content.Context context); + method public com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconOptions.Builder background(@ColorInt int background); + method public com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconOptions build(); + method public com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconOptions.Builder styleRes(@StyleRes Integer? styleRes); + } + + public final class CarManeuverIconRenderer { + ctor public CarManeuverIconRenderer(com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconOptions options); + method public androidx.car.app.model.CarIcon? renderManeuverIcon(com.mapbox.navigation.tripdata.maneuver.model.PrimaryManeuver maneuver); + method public androidx.car.app.model.CarIcon? renderManeuverIcon(com.mapbox.navigation.tripdata.maneuver.model.SubManeuver maneuver); + } + + public final class CarManeuverInstructionRenderer { + ctor public CarManeuverInstructionRenderer(); + method public CharSequence renderInstruction(java.util.List maneuver, java.util.List shields, com.mapbox.navigation.ui.androidauto.ui.maneuver.view.MapboxExitText exitView, String? modifier, int desiredHeight); + } + + public final class CarManeuverMapper { + method public androidx.car.app.navigation.model.Trip from(com.mapbox.navigation.base.trip.model.RouteProgress routeProgress, com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi maneuverApi); + method public androidx.car.app.navigation.model.Maneuver.Builder from(com.mapbox.bindgen.Expected> exp); + method public androidx.car.app.navigation.model.Maneuver.Builder from(String? maneuverType, String? maneuverModifier, Double? degrees = null); + field public static final com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverMapper INSTANCE; + } + +} + +package com.mapbox.navigation.ui.androidauto.navigation.roadlabel { + + public final class CarRoadLabelOptions { + method public int getBackgroundColor(); + method public int getRoundedLabelColor(); + method public Integer? getShadowColor(); + method public int getTextColor(); + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions.Builder toBuilder(); + property public final int backgroundColor; + property public final int roundedLabelColor; + property public final Integer? shadowColor; + property public final int textColor; + field public static final com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions.Companion Companion; + } + + public static final class CarRoadLabelOptions.Builder { + ctor public CarRoadLabelOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions.Builder backgroundColor(@ColorInt int backgroundColor); + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions build(); + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions.Builder roundedLabelColor(@ColorInt int roundedLabelColor); + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions.Builder shadowColor(@ColorInt Integer? shadowColor); + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions.Builder textColor(@ColorInt int textColor); + } + + public static final class CarRoadLabelOptions.Companion { + method public com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions getDefault(); + property public final com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelOptions default; + } + + public final class CarRoadLabelRenderer implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarRoadLabelRenderer(); + } + +} + +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit { + + public final class CarSpeedLimitRenderer implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarSpeedLimitRenderer(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + } + + public final class SpeedLimitOptions { + method public com.mapbox.navigation.base.speed.model.SpeedLimitSign? getForcedSignFormat(); + method public int getWarningThreshold(); + method public com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions.Builder toBuilder(); + property public final com.mapbox.navigation.base.speed.model.SpeedLimitSign? forcedSignFormat; + property public final int warningThreshold; + } + + public static final class SpeedLimitOptions.Builder { + ctor public SpeedLimitOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions build(); + method public com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions.Builder forcedSignFormat(com.mapbox.navigation.base.speed.model.SpeedLimitSign? forcedSignFormat); + method public com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions.Builder warningThreshold(int warningThreshold); + } + + @com.mapbox.maps.MapboxExperimental public final class SpeedLimitWidget extends com.mapbox.maps.renderer.widget.BitmapWidget { + ctor public SpeedLimitWidget(com.mapbox.navigation.base.speed.model.SpeedLimitSign initialSignFormat = com.mapbox.navigation.base.speed.model.SpeedLimitSign.MUTCD); + method public void update(Integer? speedLimit, int speed, com.mapbox.navigation.base.speed.model.SpeedLimitSign? signFormat, int threshold); + method public void update(com.mapbox.navigation.base.speed.model.SpeedLimitSign? signFormat, int threshold); + } + +} + +package com.mapbox.navigation.ui.androidauto.notification { + + public final class MapboxCarNotification implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { + method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + } + + public final class MapboxCarNotificationOptions { + method public Class? getStartAppService(); + method public com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions.Builder toBuilder(); + property public final Class? startAppService; + } + + public static final class MapboxCarNotificationOptions.Builder { + ctor public MapboxCarNotificationOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions build(); + method public com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions.Builder startAppService(Class? startAppService); + } + +} + +package com.mapbox.navigation.ui.androidauto.placeslistonmap { + + public final class PlaceMarkerRenderer { + ctor public PlaceMarkerRenderer(android.content.Context context, @ColorInt int background = 0); + method public android.graphics.Bitmap? getBitmap(); + method public androidx.car.app.model.CarIcon renderMarker(); + method public void setBitmap(android.graphics.Bitmap?); + property public final android.graphics.Bitmap? bitmap; + } + + @UiThread public interface PlacesListItemClickListener { + method public void onItemClick(com.mapbox.navigation.ui.androidauto.search.PlaceRecord placeRecord); + } + + public final class PlacesListItemMapper { + ctor public PlacesListItemMapper(com.mapbox.navigation.ui.androidauto.placeslistonmap.PlaceMarkerRenderer placeMarkerRenderer, com.mapbox.navigation.base.formatter.UnitType unitType); + method public androidx.car.app.model.ItemList mapToItemList(com.mapbox.common.location.Location anchorLocation, java.util.List places, com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListItemClickListener? itemClickListener); + } + + @UiThread public final class PlacesListOnMapLayerUtil { + ctor public PlacesListOnMapLayerUtil(); + method public void initializePlacesListOnMapLayer(com.mapbox.maps.Style style, android.content.res.Resources resources); + method public void removePlacesListOnMapLayer(com.mapbox.maps.Style style); + method public void updatePlacesListOnMapLayer(com.mapbox.maps.Style style, com.mapbox.geojson.FeatureCollection featureCollection); + field public static final com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapLayerUtil.Companion Companion; + } + + public static final class PlacesListOnMapLayerUtil.Companion { + } + + public final class PlacesListOnMapManager implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public PlacesListOnMapManager(com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapProvider placesListOnMapProvider); + method public kotlinx.coroutines.flow.StateFlow getItemList(); + method public kotlinx.coroutines.flow.StateFlow> getPlaceRecords(); + method public kotlinx.coroutines.flow.StateFlow getPlaceSelected(); + property public final kotlinx.coroutines.flow.StateFlow itemList; + property public final kotlinx.coroutines.flow.StateFlow> placeRecords; + property public final kotlinx.coroutines.flow.StateFlow placeSelected; + } + + public interface PlacesListOnMapProvider { + method public void cancel(); + method public suspend Object? getPlaces(kotlin.coroutines.Continuation>>); + } + +} + +package com.mapbox.navigation.ui.androidauto.preview { + + public final class CarRouteLineRenderer implements com.mapbox.maps.extension.androidauto.MapboxCarMapObserver { + ctor public CarRouteLineRenderer(com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider carRoutesProvider = com.mapbox.navigation.ui.androidauto.routes.NavigationCarRoutesProvider()); + } + + public fun interface CarRouteOptionsInterceptor { + method public com.mapbox.api.directions.v5.models.RouteOptions.Builder intercept(com.mapbox.api.directions.v5.models.RouteOptions.Builder builder); + } + + public final class CarRoutePreviewRepository { + ctor public CarRoutePreviewRepository(); + method public kotlinx.coroutines.flow.StateFlow getPlaceRecord(); + method public kotlinx.coroutines.flow.StateFlow> getRoutes(); + method public void setRoutePreview(com.mapbox.navigation.ui.androidauto.search.PlaceRecord placeRecord, java.util.List routes); + property public final kotlinx.coroutines.flow.StateFlow placeRecord; + property public final kotlinx.coroutines.flow.StateFlow> routes; + } + + public final class CarRoutePreviewRequest implements com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver { + method @UiThread public void cancelRequest(); + method public com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRepository? getRepository(); + method public void onAttached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method public void onDetached(com.mapbox.navigation.core.MapboxNavigation mapboxNavigation); + method @UiThread public void request(com.mapbox.navigation.ui.androidauto.search.PlaceRecord placeRecord, com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRequestCallback callback); + property public final com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRepository? repository; + } + + public interface CarRoutePreviewRequestCallback { + method public void onDestinationLocationUnknown(); + method public void onNoRoutesFound(); + method public void onRoutesReady(com.mapbox.navigation.ui.androidauto.search.PlaceRecord placeRecord, java.util.List routes); + method public void onUnknownCurrentLocation(); + } + + public final class PreviewCarRoutesProvider implements com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider { + ctor public PreviewCarRoutesProvider(java.util.List routes); + method public kotlinx.coroutines.flow.StateFlow> getNavigationRoutes(); + method public void updateRoutes(java.util.List routes); + property public kotlinx.coroutines.flow.StateFlow> navigationRoutes; + } + + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class PreviewCarRoutesProvider2 implements com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider { + ctor public PreviewCarRoutesProvider2(); + method public kotlinx.coroutines.flow.Flow> getNavigationRoutes(); + method public kotlinx.coroutines.flow.Flow getRoutesPreview(); + method public void updateSelectedRoute(int index); + property public kotlinx.coroutines.flow.Flow> navigationRoutes; + property public final kotlinx.coroutines.flow.Flow routesPreview; + } + +} + +package com.mapbox.navigation.ui.androidauto.routes { + + public interface CarRoutesProvider { + method public kotlinx.coroutines.flow.Flow> getNavigationRoutes(); + property public abstract kotlinx.coroutines.flow.Flow> navigationRoutes; + } + + public final class NavigationCarRoutesProvider implements com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider { + ctor public NavigationCarRoutesProvider(); + method public kotlinx.coroutines.flow.Flow> getNavigationRoutes(); + property public kotlinx.coroutines.flow.Flow> navigationRoutes; + } + +} + +package com.mapbox.navigation.ui.androidauto.screenmanager { + + public final class MapboxScreen { + field public static final String ACTIVE_GUIDANCE = "MAPBOX_ACTIVE_GUIDANCE"; + field public static final String ACTIVE_GUIDANCE_FEEDBACK = "MAPBOX_ACTIVE_GUIDANCE_FEEDBACK"; + field public static final String ARRIVAL = "MAPBOX_ARRIVAL"; + field public static final String FAVORITES = "MAPBOX_FAVORITES"; + field public static final String FAVORITES_FEEDBACK = "MAPBOX_FAVORITES_FEEDBACK"; + field public static final String FREE_DRIVE = "MAPBOX_FREE_DRIVE"; + field public static final String FREE_DRIVE_FEEDBACK = "MAPBOX_FREE_DRIVE_FEEDBACK"; + field public static final String GEO_DEEPLINK = "MAPBOX_GEO_DEEPLINK"; + field public static final String GEO_DEEPLINK_FEEDBACK = "MAPBOX_GEO_DEEPLINK_FEEDBACK"; + field public static final com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen INSTANCE; + field public static final String NEEDS_LOCATION_PERMISSION = "MAPBOX_NEEDS_LOCATION_PERMISSION"; + field public static final String ROUTE_PREVIEW = "MAPBOX_ROUTE_PREVIEW"; + field public static final String ROUTE_PREVIEW_FEEDBACK = "MAPBOX_ROUTE_PREVIEW_FEEDBACK"; + field public static final String SEARCH = "MAPBOX_SEARCH"; + field public static final String SEARCH_FEEDBACK = "MAPBOX_SEARCH_FEEDBACK"; + field public static final String SETTINGS = "MAPBOX_SETTINGS"; + } + + @StringDef({com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.NEEDS_LOCATION_PERMISSION, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.SETTINGS, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FREE_DRIVE, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FREE_DRIVE_FEEDBACK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.SEARCH, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.SEARCH_FEEDBACK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FAVORITES, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FAVORITES_FEEDBACK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.GEO_DEEPLINK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.GEO_DEEPLINK_FEEDBACK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ROUTE_PREVIEW, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ROUTE_PREVIEW_FEEDBACK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ACTIVE_GUIDANCE, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ACTIVE_GUIDANCE_FEEDBACK, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ARRIVAL}) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public static @interface MapboxScreen.Key { + } + + public final class MapboxScreenEvent { + method public String getKey(); + method public String getOperation(); + property public final String key; + property public final String operation; + } + + public fun interface MapboxScreenFactory { + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class MapboxScreenGraph { + method @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public static com.mapbox.navigation.ui.androidauto.MapboxCarContext prepareExperimentalRoutePreviewScreen(com.mapbox.navigation.ui.androidauto.MapboxCarContext); + method public static com.mapbox.navigation.ui.androidauto.MapboxCarContext prepareScreens(com.mapbox.navigation.ui.androidauto.MapboxCarContext); + } + + public final class MapboxScreenManager { + method public operator boolean contains(String key); + method @UiThread public androidx.car.app.Screen createScreen(String screenKey); + method public static com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenEvent? current(); + method public static kotlinx.coroutines.flow.SharedFlow getScreenEvent(); + method @UiThread @kotlin.jvm.Throws(exceptionClasses=IllegalStateException::class) public boolean goBack() throws java.lang.IllegalStateException; + method public static void push(String key); + method public com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager putAll(kotlin.Pair... pairs); + method public static void replaceTop(String key); + method public operator com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory? set(String key, T factory); + property public static final kotlinx.coroutines.flow.SharedFlow screenEvent; + field public static final com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager.Companion Companion; + } + + public static final class MapboxScreenManager.Companion { + method public com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenEvent? current(); + method public kotlinx.coroutines.flow.SharedFlow getScreenEvent(); + method public void push(String key); + method public void replaceTop(String key); + property public final kotlinx.coroutines.flow.SharedFlow screenEvent; + } + + public final class MapboxScreenOperation { + field public static final String CREATED = "CREATED"; + field public static final String GO_BACK = "GO_BACK"; + field public static final com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenOperation INSTANCE; + field public static final String PUSH = "PUSH"; + field public static final String REPLACE_TOP = "REPLACE_TOP"; + } + + @StringDef({com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenOperation.CREATED, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenOperation.REPLACE_TOP, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenOperation.PUSH, com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenOperation.GO_BACK}) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) public static @interface MapboxScreenOperation.Type { + } + +} + +package com.mapbox.navigation.ui.androidauto.screenmanager.factories { + + public final class ActiveGuidanceFeedbackScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public ActiveGuidanceFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class ActiveGuidanceScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public ActiveGuidanceScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class ArrivalScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public ArrivalScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class FavoritesFeedbackScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public FavoritesFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class FavoritesScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public FavoritesScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class FreeDriveFeedbackScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public FreeDriveFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class FreeDriveScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public FreeDriveScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class GeoDeeplinkPlacesCarScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public GeoDeeplinkPlacesCarScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class GeoDeeplinkPlacesFeedbackScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public GeoDeeplinkPlacesFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class NeedsLocationPermissionScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public NeedsLocationPermissionScreenFactory(); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class RoutePreviewFeedbackScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public RoutePreviewFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class RoutePreviewScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public RoutePreviewScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + @com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI public final class RoutePreviewScreenFactory2 implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public RoutePreviewScreenFactory2(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class SearchPlacesFeedbackScreenFactory extends com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory { + ctor public SearchPlacesFeedbackScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll getCarFeedbackPoll(androidx.car.app.CarContext carContext); + method public String getSourceName(); + } + + public final class SearchPlacesScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public SearchPlacesScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + + public final class SettingsScreenFactory implements com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory { + ctor public SettingsScreenFactory(com.mapbox.navigation.ui.androidauto.MapboxCarContext mapboxCarContext); + method public androidx.car.app.Screen create(androidx.car.app.CarContext carContext); + } + +} + +package com.mapbox.navigation.ui.androidauto.search { + + public final class CarPlaceSearchOptions { + method public String? getAccessToken(); + method public com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions.Builder toBuilder(); + property public final String? accessToken; + } + + public static final class CarPlaceSearchOptions.Builder { + ctor public CarPlaceSearchOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions.Builder accessToken(String? accessToken); + method public com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions build(); + } + + public final class GetPlacesError { + method public String getErrorMessage(); + method public Throwable? getThrowable(); + property public final String errorMessage; + property public final Throwable? throwable; + } + + public final class PlaceRecord { + ctor public PlaceRecord(String id, String name, com.mapbox.geojson.Point? coordinate, String? description = null, java.util.List categories = listOf()); + method public java.util.List getCategories(); + method public com.mapbox.geojson.Point? getCoordinate(); + method public String? getDescription(); + method public String getId(); + method public String getName(); + property public final java.util.List categories; + property public final com.mapbox.geojson.Point? coordinate; + property public final String? description; + property public final String id; + property public final String name; + } + +} + +package com.mapbox.navigation.ui.androidauto.settings { + + public final class MapboxCarStorage { + method public androidx.car.app.CarContext getCarContext(); + method public boolean readSharedPref(String key, boolean defaultValue); + method public void writeSharedPref(String key, boolean value); + property public final androidx.car.app.CarContext carContext; + } + +} + +package com.mapbox.navigation.ui.androidauto.ui.maneuver.model { + + public final class ManeuverExitOptions { + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties.PropertiesMutcd getMutcdExitProperties(); + method public int getTextAppearance(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties.PropertiesVienna getViennaExitProperties(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions.Builder toBuilder(); + property public final com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties.PropertiesMutcd mutcdExitProperties; + property public final int textAppearance; + property public final com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties.PropertiesVienna viennaExitProperties; + } + + public static final class ManeuverExitOptions.Builder { + ctor public ManeuverExitOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions build(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions.Builder mutcdExitProperties(com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties.PropertiesMutcd mutcdExitProperties); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions.Builder textAppearance(@StyleRes int textAppearance); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions.Builder viennaExitProperties(com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties.PropertiesVienna viennaExitProperties); + } + + public final class ManeuverPrimaryOptions { + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions getExitOptions(); + method public int getTextAppearance(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverPrimaryOptions.Builder toBuilder(); + property public final com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions exitOptions; + property public final int textAppearance; + } + + public static final class ManeuverPrimaryOptions.Builder { + ctor public ManeuverPrimaryOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverPrimaryOptions build(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverPrimaryOptions.Builder exitOptions(com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions exitOptions); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverPrimaryOptions.Builder textAppearance(@StyleRes int textAppearance); + } + + public final class ManeuverSecondaryOptions { + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions getExitOptions(); + method public int getTextAppearance(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSecondaryOptions.Builder toBuilder(); + property public final com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions exitOptions; + property public final int textAppearance; + } + + public static final class ManeuverSecondaryOptions.Builder { + ctor public ManeuverSecondaryOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSecondaryOptions build(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSecondaryOptions.Builder exitOptions(com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions exitOptions); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSecondaryOptions.Builder textAppearance(@StyleRes int textAppearance); + } + + public final class ManeuverSubOptions { + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions getExitOptions(); + method public int getTextAppearance(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSubOptions.Builder toBuilder(); + property public final com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions exitOptions; + property public final int textAppearance; + } + + public static final class ManeuverSubOptions.Builder { + ctor public ManeuverSubOptions.Builder(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSubOptions build(); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSubOptions.Builder exitOptions(com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions exitOptions); + method public com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSubOptions.Builder textAppearance(@StyleRes int textAppearance); + } + + public abstract sealed class MapboxExitProperties { + method public final int getExitBackground(); + method public final int getExitLeftDrawable(); + method public final int getExitRightDrawable(); + method public final int getFallbackDrawable(); + method public final boolean getShouldFallbackWithDrawable(); + method public final boolean getShouldFallbackWithText(); + property public final int exitBackground; + property public final int exitLeftDrawable; + property public final int exitRightDrawable; + property public final int fallbackDrawable; + property public final boolean shouldFallbackWithDrawable; + property public final boolean shouldFallbackWithText; + } + + public static final class MapboxExitProperties.PropertiesMutcd extends com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties { + ctor public MapboxExitProperties.PropertiesMutcd(boolean shouldFallbackWithText = false, boolean shouldFallbackWithDrawable = true, @DrawableRes int exitBackground = com.mapbox.navigation.tripdata.R.drawable.mapbox_exit_board_background, @DrawableRes int fallbackDrawable = com.mapbox.navigation.tripdata.R.drawable.mapbox_ic_exit_arrow_right_mutcd, @DrawableRes int exitLeftDrawable = com.mapbox.navigation.tripdata.R.drawable.mapbox_ic_exit_arrow_left_mutcd, @DrawableRes int exitRightDrawable = com.mapbox.navigation.tripdata.R.drawable.mapbox_ic_exit_arrow_right_mutcd); + } + + public static final class MapboxExitProperties.PropertiesVienna extends com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties { + ctor public MapboxExitProperties.PropertiesVienna(boolean shouldFallbackWithText = false, boolean shouldFallbackWithDrawable = true, @DrawableRes int exitBackground = com.mapbox.navigation.tripdata.R.drawable.mapbox_exit_board_background, @DrawableRes int fallbackDrawable = com.mapbox.navigation.tripdata.R.drawable.mapbox_ic_exit_arrow_left_vienna, @DrawableRes int exitLeftDrawable = com.mapbox.navigation.tripdata.R.drawable.mapbox_ic_exit_arrow_left_vienna, @DrawableRes int exitRightDrawable = com.mapbox.navigation.tripdata.R.drawable.mapbox_ic_exit_arrow_right_vienna); + } + +} + +package com.mapbox.navigation.ui.androidauto.ui.maneuver.view { + + @UiThread public final class MapboxExitText extends androidx.appcompat.widget.AppCompatTextView { + ctor public MapboxExitText(android.content.Context context); + ctor public MapboxExitText(android.content.Context context, android.util.AttributeSet? attrs); + ctor public MapboxExitText(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr); + method public android.graphics.Bitmap getViewAsBitmap(); + method public void setExit(String? modifier, com.mapbox.navigation.tripdata.maneuver.model.ExitNumberComponentNode exit); + method public android.graphics.drawable.Drawable styleExitWith(android.graphics.Bitmap bitmap, int drawableHeight); + method public void updateExitProperties(com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties? properties); + method public void updateTextAppearance(@StyleRes int style); + } + +} + diff --git a/androidauto/build.gradle b/androidauto/build.gradle new file mode 100644 index 00000000000..bda466b7456 --- /dev/null +++ b/androidauto/build.gradle @@ -0,0 +1,79 @@ +plugins { + id 'com.android.library' + id 'org.jetbrains.kotlin.android' + id 'org.jetbrains.dokka' +} +apply from: "$rootDir/gradle/ktlint.gradle" +apply from: "$rootDir/gradle/track-public-apis.gradle" +apply from: "$rootDir/gradle/jacoco.gradle" +apply from: "$rootDir/gradle/publish.gradle" +apply from: "$rootDir/gradle/kdoc-settings.gradle" +apply from: file("$rootDir/gradle/artifact-settings.gradle") + +version = project.ext.versionName +group = project.ext.mapboxArtifactGroupId + +android { + namespace 'com.mapbox.navigation.ui.androidauto' + compileSdkVersion androidVersions.compileSdkVersion + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + defaultConfig { + testApplicationId "com.mapbox.navigation.extensions.test" + minSdkVersion androidVersions.carMinSdkVersion + targetSdkVersion androidVersions.targetSdkVersion + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'proguard-rules.pro', "../proguard/proguard-project.pro" + } + + testOptions { + execution 'ANDROIDX_TEST_ORCHESTRATOR' + } + + testOptions { + unitTests.returnDefaultValues = true + unitTests.includeAndroidResources = true + } +} + +dependencies { + implementation(project(':libnavigation-android')) + implementation(project(':libnavigation-util')) + + api(dependenciesList.mapboxMapsAndroidAuto) + api dependenciesList.mapboxSearch + + implementation dependenciesList.androidXCore + implementation dependenciesList.androidXAppCompat + implementation dependenciesList.glide + + testImplementation(project(':libtesting-utils')) + testImplementation project(':libtesting-navigation-util') + testImplementation dependenciesList.androidXLifecycleTesting + apply from: "$rootDir/gradle/unit-testing-dependencies.gradle" + // instrumentation tests + androidTestImplementation project(':libtesting-ui') + androidTestImplementation dependenciesList.testRunner + androidTestImplementation dependenciesList.testRules + androidTestImplementation dependenciesList.androidxTestCore + androidTestImplementation dependenciesList.mockkAndroid + androidTestUtil dependenciesList.testOrchestrator +} + +dokkaHtmlPartial { + outputDirectory.set(kdocPath) + moduleName.set("Android Auto Components") + dokkaSourceSets { + configureEach { + reportUndocumented.set(false) // TODO https://mapbox.atlassian.net/browse/NAVAND-2801 + perPackageOption { + matchingRegex.set("com.mapbox.navigation.ui.androidauto.internal.*") + suppress.set(true) + } + } + } +} \ No newline at end of file diff --git a/androidauto/consumer-rules.pro b/androidauto/consumer-rules.pro new file mode 100644 index 00000000000..e69de29bb2d diff --git a/androidauto/gradle.properties b/androidauto/gradle.properties new file mode 100644 index 00000000000..aee6c6a38b5 --- /dev/null +++ b/androidauto/gradle.properties @@ -0,0 +1,3 @@ +POM_ARTIFACT_ID=android-auto-components +POM_ARTIFACT_TITLE=Mapbox Navigation SDK +POM_DESCRIPTION=Artifact that provides Android Auto compoents \ No newline at end of file diff --git a/android-auto-app/proguard-rules.pro b/androidauto/proguard-rules.pro similarity index 100% rename from android-auto-app/proguard-rules.pro rename to androidauto/proguard-rules.pro diff --git a/libnavui-androidauto/screenshots/active-guidance.png b/androidauto/screenshots/active-guidance.png similarity index 100% rename from libnavui-androidauto/screenshots/active-guidance.png rename to androidauto/screenshots/active-guidance.png diff --git a/libnavui-androidauto/screenshots/free-drive.png b/androidauto/screenshots/free-drive.png similarity index 100% rename from libnavui-androidauto/screenshots/free-drive.png rename to androidauto/screenshots/free-drive.png diff --git a/libnavui-androidauto/src/androidTest/AndroidManifest.xml b/androidauto/src/androidTest/AndroidManifest.xml similarity index 100% rename from libnavui-androidauto/src/androidTest/AndroidManifest.xml rename to androidauto/src/androidTest/AndroidManifest.xml diff --git a/libnavui-androidauto/src/androidTest/assets/expected_lanes_images/five_lanes_straight_various.png b/androidauto/src/androidTest/assets/expected_lanes_images/five_lanes_straight_various.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_lanes_images/five_lanes_straight_various.png rename to androidauto/src/androidTest/assets/expected_lanes_images/five_lanes_straight_various.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_lanes_images/four_lanes_right_left_straight_right.png b/androidauto/src/androidTest/assets/expected_lanes_images/four_lanes_right_left_straight_right.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_lanes_images/four_lanes_right_left_straight_right.png rename to androidauto/src/androidTest/assets/expected_lanes_images/four_lanes_right_left_straight_right.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_lanes_images/one_lane_uturn.png b/androidauto/src/androidTest/assets/expected_lanes_images/one_lane_uturn.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_lanes_images/one_lane_uturn.png rename to androidauto/src/androidTest/assets/expected_lanes_images/one_lane_uturn.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_lanes_images/six_lanes_left_various.png b/androidauto/src/androidTest/assets/expected_lanes_images/six_lanes_left_various.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_lanes_images/six_lanes_left_various.png rename to androidauto/src/androidTest/assets/expected_lanes_images/six_lanes_left_various.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_lanes_images/three_lanes_straight_left_straight_right.png b/androidauto/src/androidTest/assets/expected_lanes_images/three_lanes_straight_left_straight_right.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_lanes_images/three_lanes_straight_left_straight_right.png rename to androidauto/src/androidTest/assets/expected_lanes_images/three_lanes_straight_left_straight_right.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_lanes_images/two_lanes_straight_sharp_left_straight.png b/androidauto/src/androidTest/assets/expected_lanes_images/two_lanes_straight_sharp_left_straight.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_lanes_images/two_lanes_straight_sharp_left_straight.png rename to androidauto/src/androidTest/assets/expected_lanes_images/two_lanes_straight_sharp_left_straight.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_135.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_135.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_135.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_135.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_180.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_180.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_180.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_180.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_225.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_225.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_225.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_225.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_270.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_270.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_270.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_270.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_315.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_315.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_315.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_315.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_45.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_45.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_45.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_45.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_90.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_90.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_90.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_roundabout_degrees_90.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_u_turn.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_u_turn.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_u_turn.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_left_u_turn.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_135.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_135.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_135.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_135.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_180.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_180.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_180.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_180.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_225.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_225.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_225.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_225.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_270.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_270.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_270.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_270.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_315.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_315.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_315.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_315.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_45.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_45.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_45.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_45.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_90.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_90.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_90.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_roundabout_degrees_90.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_u_turn.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_u_turn.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_u_turn.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/driving_side_right_u_turn.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_left.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_left.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_left.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_left.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_right.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_right.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_right.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_right.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_left.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_left.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_left.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_left.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_right.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_right.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_right.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_sharp_right.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_left.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_left.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_left.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_left.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_right.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_right.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_right.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_slight_right.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_straight.png b/androidauto/src/androidTest/assets/expected_maneuver_icons/turn_straight.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_maneuver_icons/turn_straight.png rename to androidauto/src/androidTest/assets/expected_maneuver_icons/turn_straight.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_road_label_images/blue_label_without_shadow.png b/androidauto/src/androidTest/assets/expected_road_label_images/blue_label_without_shadow.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_road_label_images/blue_label_without_shadow.png rename to androidauto/src/androidTest/assets/expected_road_label_images/blue_label_without_shadow.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_road_label_images/street_with_name.png b/androidauto/src/androidTest/assets/expected_road_label_images/street_with_name.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_road_label_images/street_with_name.png rename to androidauto/src/androidTest/assets/expected_road_label_images/street_with_name.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_road_label_images/street_with_numbers.png b/androidauto/src/androidTest/assets/expected_road_label_images/street_with_numbers.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_road_label_images/street_with_numbers.png rename to androidauto/src/androidTest/assets/expected_road_label_images/street_with_numbers.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_road_label_images/street_with_shield.png b/androidauto/src/androidTest/assets/expected_road_label_images/street_with_shield.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_road_label_images/street_with_shield.png rename to androidauto/src/androidTest/assets/expected_road_label_images/street_with_shield.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_road_label_images/very_long_street_name.png b/androidauto/src/androidTest/assets/expected_road_label_images/very_long_street_name.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_road_label_images/very_long_street_name.png rename to androidauto/src/androidTest/assets/expected_road_label_images/very_long_street_name.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_mutcd.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_mutcd.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_mutcd.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_mutcd.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_vienna.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_vienna.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_vienna.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_150_vienna.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_mutcd.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_mutcd.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_mutcd.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_mutcd.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_vienna.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_vienna.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_vienna.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_120_speed_90_vienna.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_mutcd.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_mutcd.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_mutcd.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_mutcd.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_vienna.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_vienna.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_vienna.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_0_vienna.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_mutcd.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_mutcd.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_mutcd.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_mutcd.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_vienna.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_vienna.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_vienna.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_5_speed_30_vienna.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_mutcd.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_mutcd.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_mutcd.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_mutcd.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_vienna.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_vienna.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_vienna.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_65_speed_30_vienna.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_mutcd.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_mutcd.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_mutcd.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_mutcd.png diff --git a/libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_vienna.png b/androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_vienna.png similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_vienna.png rename to androidauto/src/androidTest/assets/expected_speed_limit_images/speed_limit_unknown_speed_5_vienna.png diff --git a/libnavui-androidauto/src/androidTest/assets/shield.svg b/androidauto/src/androidTest/assets/shield.svg similarity index 100% rename from libnavui-androidauto/src/androidTest/assets/shield.svg rename to androidauto/src/androidTest/assets/shield.svg diff --git a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/lanes/CarLanesImageRendererTest.kt b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImageRendererTest.kt similarity index 94% rename from libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/lanes/CarLanesImageRendererTest.kt rename to androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImageRendererTest.kt index 7577c3863da..498f95e04a4 100644 --- a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/lanes/CarLanesImageRendererTest.kt +++ b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImageRendererTest.kt @@ -5,11 +5,11 @@ import android.graphics.Color import androidx.test.filters.SmallTest import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import androidx.test.rule.GrantPermissionRule -import com.mapbox.androidauto.navigation.lanes.CarLanesImageRenderer -import com.mapbox.androidauto.testing.BitmapTestUtil import com.mapbox.navigation.base.ExperimentalMapboxNavigationAPI -import com.mapbox.navigation.ui.maneuver.model.LaneFactory -import com.mapbox.navigation.ui.maneuver.model.LaneIndicator +import com.mapbox.navigation.tripdata.maneuver.model.LaneFactory +import com.mapbox.navigation.tripdata.maneuver.model.LaneIndicator +import com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImageRenderer +import com.mapbox.navigation.ui.androidauto.testing.BitmapTestUtil import io.mockk.every import io.mockk.mockk import org.junit.Assert.assertNotNull @@ -32,17 +32,17 @@ class CarLanesImageRendererTest { @get:Rule val permissionsRule: GrantPermissionRule = GrantPermissionRule.grant( Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE + Manifest.permission.WRITE_EXTERNAL_STORAGE, ) private val bitmapTestUtils = BitmapTestUtil( "expected_lanes_images", - "test_lanes_images" + "test_lanes_images", ) private val carLanesImageGenerator = CarLanesImageRenderer( context = bitmapTestUtils.carDisplayContext(), - background = Color.RED + background = Color.RED, ) @Test @@ -54,8 +54,8 @@ class CarLanesImageRendererTest { .activeDirection("uturn") .isActive(true) .directions(listOf("uturn")) - .build() - ) + .build(), + ), ) val lane2 = LaneFactory.buildLane( allLanes = listOf( @@ -64,8 +64,8 @@ class CarLanesImageRendererTest { .activeDirection("uturn") .isActive(true) .directions(listOf("uturn")) - .build() - ) + .build(), + ), ) val img1 = carLanesImageGenerator.renderLanesImage(lane1) val img2 = carLanesImageGenerator.renderLanesImage(lane2) @@ -83,8 +83,8 @@ class CarLanesImageRendererTest { .activeDirection("uturn") .isActive(true) .directions(listOf("uturn")) - .build() - ) + .build(), + ), ) val lane2 = LaneFactory.buildLane( allLanes = listOf( @@ -93,8 +93,8 @@ class CarLanesImageRendererTest { .activeDirection("straight") .isActive(true) .directions(listOf("straight")) - .build() - ) + .build(), + ), ) val img1 = carLanesImageGenerator.renderLanesImage(lane1) val img2 = carLanesImageGenerator.renderLanesImage(lane2) @@ -113,9 +113,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "uturn" every { isActive } returns true every { directions } returns listOf("uturn") - } + }, ) - } + }, ) val actual = carLanesImage!!.carIcon.icon!!.bitmap!! @@ -138,9 +138,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "sharp left" every { isActive } returns false every { directions } returns listOf("straight") - } + }, ) - } + }, ) val actual = carLanesImage!!.carIcon.icon!!.bitmap!! @@ -169,9 +169,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "straight" every { isActive } returns false every { directions } returns listOf("right") - } + }, ) - } + }, ) val actual = carLanesImage!!.carIcon.icon!!.bitmap!! @@ -206,9 +206,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "right" every { isActive } returns true every { directions } returns listOf("right") - } + }, ) - } + }, ) val actual = carLanesImage!!.carIcon.icon!!.bitmap!! @@ -249,9 +249,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "straight" every { isActive } returns false every { directions } returns listOf("sharp right") - } + }, ) - } + }, ) val actual = carLanesImage!!.carIcon.icon!!.bitmap!! @@ -298,9 +298,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "left" every { isActive } returns false every { directions } returns listOf("sharp right") - } + }, ) - } + }, ) val actual = carLanesImage!!.carIcon.icon!!.bitmap!! @@ -353,9 +353,9 @@ class CarLanesImageRendererTest { every { activeDirection } returns "left" every { isActive } returns true every { directions } returns listOf("sharp right") - } + }, ) - } + }, ) // Fail successfully for now. Handle more images with scaling diff --git a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/maneuver/CarManeuverIconRendererTest.kt b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconRendererTest.kt similarity index 94% rename from libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/maneuver/CarManeuverIconRendererTest.kt rename to androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconRendererTest.kt index f39b7686226..ea8524075ff 100644 --- a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/maneuver/CarManeuverIconRendererTest.kt +++ b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconRendererTest.kt @@ -1,16 +1,14 @@ -package com.mapbox.androidauto.car.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import android.Manifest import android.graphics.Color import androidx.test.filters.SmallTest import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import androidx.test.rule.GrantPermissionRule -import com.mapbox.androidauto.navigation.maneuver.CarManeuverIconOptions -import com.mapbox.androidauto.navigation.maneuver.CarManeuverIconRenderer -import com.mapbox.androidauto.testing.BitmapTestUtil import com.mapbox.api.directions.v5.models.ManeuverModifier import com.mapbox.api.directions.v5.models.StepManeuver -import com.mapbox.navigation.ui.maneuver.model.PrimaryManeuver +import com.mapbox.navigation.tripdata.maneuver.model.PrimaryManeuver +import com.mapbox.navigation.ui.androidauto.testing.BitmapTestUtil import io.mockk.every import io.mockk.mockk import org.junit.Rule @@ -29,18 +27,18 @@ class CarManeuverIconRendererTest { @get:Rule val permissionsRule: GrantPermissionRule = GrantPermissionRule.grant( Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE + Manifest.permission.WRITE_EXTERNAL_STORAGE, ) private val bitmapTestUtils = BitmapTestUtil( "expected_maneuver_icons", - "test_maneuver_icons" + "test_maneuver_icons", ) private val carLanesImageGenerator = CarManeuverIconRenderer( CarManeuverIconOptions.Builder(bitmapTestUtils.carDisplayContext()) .background(Color.RED) - .build() + .build(), ) @Test @@ -49,7 +47,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.STRAIGHT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -63,7 +61,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.UTURN every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -77,7 +75,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.UTURN every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -90,7 +88,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.SHARP_LEFT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -103,7 +101,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.SHARP_RIGHT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -116,7 +114,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.SLIGHT_LEFT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -129,7 +127,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.SLIGHT_RIGHT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -142,7 +140,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.SHARP_LEFT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -155,7 +153,7 @@ class CarManeuverIconRendererTest { maneuver = mockk(relaxed = true) { every { type } returns StepManeuver.TURN every { modifier } returns ManeuverModifier.SHARP_RIGHT - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -169,7 +167,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 45.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -183,7 +181,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 90.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -197,7 +195,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 135.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -211,7 +209,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 180.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -225,7 +223,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 225.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -239,7 +237,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 270.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -253,7 +251,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 315.0 every { drivingSide } returns "right" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -267,7 +265,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 45.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -281,7 +279,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 90.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -295,7 +293,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 135.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -309,7 +307,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 180.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -323,7 +321,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 225.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -337,7 +335,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 270.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! @@ -351,7 +349,7 @@ class CarManeuverIconRendererTest { every { type } returns StepManeuver.ROUNDABOUT every { degrees } returns 315.0 every { drivingSide } returns "left" - } + }, ) val actual = carLanesImage!!.icon!!.bitmap!! diff --git a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/roadlabel/RoadLabelBitmapRendererTest.kt b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/RoadLabelBitmapRendererTest.kt similarity index 86% rename from libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/roadlabel/RoadLabelBitmapRendererTest.kt rename to androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/RoadLabelBitmapRendererTest.kt index 8a789afb82b..f61a387169c 100644 --- a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/roadlabel/RoadLabelBitmapRendererTest.kt +++ b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/RoadLabelBitmapRendererTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.car.navigation.roadlabel +package com.mapbox.navigation.ui.androidauto.navigation.roadlabel import android.Manifest import android.graphics.Color @@ -6,13 +6,11 @@ import androidx.test.filters.SmallTest import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import androidx.test.platform.app.InstrumentationRegistry import androidx.test.rule.GrantPermissionRule -import com.mapbox.androidauto.navigation.roadlabel.CarRoadLabelBitmapRenderer -import com.mapbox.androidauto.navigation.roadlabel.CarRoadLabelOptions -import com.mapbox.androidauto.testing.BitmapTestUtil import com.mapbox.api.directions.v5.models.MapboxShield import com.mapbox.navigation.base.ExperimentalMapboxNavigationAPI import com.mapbox.navigation.base.road.model.RoadComponent -import com.mapbox.navigation.ui.shield.model.RouteShieldFactory +import com.mapbox.navigation.tripdata.shield.model.RouteShieldFactory +import com.mapbox.navigation.ui.androidauto.testing.BitmapTestUtil import io.mockk.every import io.mockk.mockk import org.junit.Rule @@ -32,12 +30,12 @@ class RoadLabelBitmapRendererTest { @get:Rule val permissionsRule: GrantPermissionRule = GrantPermissionRule.grant( Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE + Manifest.permission.WRITE_EXTERNAL_STORAGE, ) private val bitmapTestUtils = BitmapTestUtil( "expected_road_label_images", - "test_road_label_images" + "test_road_label_images", ) private val roadLabelBitmapRenderer = CarRoadLabelBitmapRenderer() @@ -51,7 +49,7 @@ class RoadLabelBitmapRendererTest { emptyList(), CarRoadLabelOptions.Builder() .backgroundColor(0x784D4DD3) - .build() + .build(), ) bitmapTestUtils.assertBitmapsSimilar(testName, bitmap!!) @@ -65,7 +63,7 @@ class RoadLabelBitmapRendererTest { emptyList(), CarRoadLabelOptions.Builder() .backgroundColor(0x784D4DD3) - .build() + .build(), ) bitmapTestUtils.assertBitmapsSimilar(testName, bitmap!!) @@ -77,12 +75,12 @@ class RoadLabelBitmapRendererTest { resources, createRoad( "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhen" + - "uakitanatahu" + "uakitanatahu", ), emptyList(), CarRoadLabelOptions.Builder() .backgroundColor(0x784D4DD3) - .build() + .build(), ) bitmapTestUtils.assertBitmapsSimilar(testName, bitmap!!) @@ -98,7 +96,7 @@ class RoadLabelBitmapRendererTest { .shadowColor(null) .roundedLabelColor(0xFF1A65CA.toInt()) .textColor(Color.WHITE) - .build() + .build(), ) bitmapTestUtils.assertBitmapsSimilar(testName, bitmap!!) @@ -114,15 +112,15 @@ class RoadLabelBitmapRendererTest { listOf( createComponent("Clarksburg Road"), createComponent("/"), - createComponent("121", mapboxShield) + createComponent("121", mapboxShield), ), listOf( RouteShieldFactory.buildRouteShield( "download-url", byteArray, mapboxShield, - mockk() - ) + mockk(), + ), ), CarRoadLabelOptions.Builder() .backgroundColor(0x784D4DD3) diff --git a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/speedlimit/SpeedLimitRendererTest.kt b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitRendererTest.kt similarity index 87% rename from libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/speedlimit/SpeedLimitRendererTest.kt rename to androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitRendererTest.kt index 23a037c7196..18601ae80a4 100644 --- a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/car/navigation/speedlimit/SpeedLimitRendererTest.kt +++ b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitRendererTest.kt @@ -1,12 +1,11 @@ -package com.mapbox.androidauto.car.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import android.Manifest import androidx.test.filters.SmallTest import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import androidx.test.rule.GrantPermissionRule -import com.mapbox.androidauto.navigation.speedlimit.SpeedLimitBitmapRenderer -import com.mapbox.androidauto.testing.BitmapTestUtil import com.mapbox.navigation.base.speed.model.SpeedLimitSign +import com.mapbox.navigation.ui.androidauto.testing.BitmapTestUtil import org.junit.Rule import org.junit.Test import org.junit.rules.TestName @@ -23,12 +22,12 @@ class SpeedLimitRendererTest { @get:Rule val permissionsRule: GrantPermissionRule = GrantPermissionRule.grant( Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE + Manifest.permission.WRITE_EXTERNAL_STORAGE, ) private val bitmapUtils = BitmapTestUtil( "expected_speed_limit_images", - "test_speed_limit_images" + "test_speed_limit_images", ) @Test @@ -37,7 +36,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.MUTCD, speedLimit = 120, speed = 150, - warn = true + warn = true, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -48,7 +47,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.MUTCD, speedLimit = 120, speed = 90, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -59,7 +58,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.MUTCD, speedLimit = 65, speed = 30, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -70,7 +69,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.MUTCD, speedLimit = 5, speed = 30, - warn = true + warn = true, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -81,7 +80,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.MUTCD, speedLimit = 5, speed = 0, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -92,7 +91,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.MUTCD, speedLimit = null, speed = 5, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -103,7 +102,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.VIENNA, speedLimit = 120, speed = 150, - warn = true + warn = true, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -114,7 +113,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.VIENNA, speedLimit = 120, speed = 90, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -125,7 +124,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.VIENNA, speedLimit = 65, speed = 30, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -136,7 +135,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.VIENNA, speedLimit = 5, speed = 30, - warn = true + warn = true, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -147,7 +146,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.VIENNA, speedLimit = 5, speed = 0, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } @@ -158,7 +157,7 @@ class SpeedLimitRendererTest { SpeedLimitSign.VIENNA, speedLimit = null, speed = 5, - warn = false + warn = false, ) bitmapUtils.assertBitmapsSimilar(testName, bitmap) } diff --git a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/testing/BitmapTestUtil.kt b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/testing/BitmapTestUtil.kt similarity index 96% rename from libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/testing/BitmapTestUtil.kt rename to androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/testing/BitmapTestUtil.kt index 2ab60130412..db605d587a5 100644 --- a/libnavui-androidauto/src/androidTest/java/com/mapbox/androidauto/testing/BitmapTestUtil.kt +++ b/androidauto/src/androidTest/java/com/mapbox/navigation/ui/androidauto/testing/BitmapTestUtil.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.testing +package com.mapbox.navigation.ui.androidauto.testing import android.content.ContentValues import android.content.Context @@ -45,14 +45,14 @@ import kotlin.math.max */ class BitmapTestUtil( private val expectedAssetsDirectoryName: String, - private val samplesDirectoryName: String + private val samplesDirectoryName: String, ) { private val context = ApplicationProvider.getApplicationContext() private val mapboxTestDirectoryName = "mapbox_test" private val directory: File = File( Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), - mapboxTestDirectoryName + mapboxTestDirectoryName, ) private val deviceTestDirectory = File(directory, samplesDirectoryName) @@ -92,11 +92,11 @@ class BitmapTestUtil( writeBitmapFile(testName, actual) writeBitmapFile( "${testName.methodName}-diff", - difference.difference + difference.difference, ) fail( "The ${testName.methodName} image failed with similarity: " + - "${difference.similarity}" + "${difference.similarity}", ) } } else { @@ -121,7 +121,7 @@ class BitmapTestUtil( expected = expected, actual = actual, difference = difference, - similarity = similarity + similarity = similarity, ) } @@ -175,7 +175,7 @@ class BitmapTestUtil( 1.0f, differenceColor.red(), differenceColor.green(), - differenceColor.blue() + differenceColor.blue(), ) } } @@ -241,7 +241,7 @@ class BitmapTestUtil( put(MediaStore.MediaColumns.MIME_TYPE, "image/png") put( MediaStore.MediaColumns.RELATIVE_PATH, - Environment.DIRECTORY_DOWNLOADS + "/$mapboxTestDirectoryName/$filePath" + Environment.DIRECTORY_DOWNLOADS + "/$mapboxTestDirectoryName/$filePath", ) } val resolver = context.contentResolver @@ -258,7 +258,7 @@ class BitmapTestUtil( 0, 0, bitmap.width, - bitmap.height + bitmap.height, ) } @@ -274,7 +274,7 @@ class BitmapTestUtil( CAR_DISPLAY_HEIGHT_PX, CAR_DISPLAY_DPI, null, - 0 + 0, ) } } @@ -291,5 +291,5 @@ data class BitmapDifference( val expected: Bitmap, val actual: Bitmap, val difference: Bitmap, - val similarity: Double + val similarity: Double, ) diff --git a/androidauto/src/main/AndroidManifest.xml b/androidauto/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..40fd0b332e9 --- /dev/null +++ b/androidauto/src/main/AndroidManifest.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/MapboxCarContext.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/MapboxCarContext.kt new file mode 100644 index 00000000000..0ee694b9b41 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/MapboxCarContext.kt @@ -0,0 +1,112 @@ +package com.mapbox.navigation.ui.androidauto + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import androidx.car.app.Session +import androidx.car.app.navigation.NavigationManager +import androidx.lifecycle.Lifecycle +import com.mapbox.maps.extension.androidauto.MapboxCarMap +import com.mapbox.navigation.ui.androidauto.deeplink.GeoDeeplinkPlacesListOnMapProvider +import com.mapbox.navigation.ui.androidauto.internal.context.MapboxCarContextOwner +import com.mapbox.navigation.ui.androidauto.internal.context.mapboxCarNavigationService +import com.mapbox.navigation.ui.androidauto.internal.context.mapboxCarService +import com.mapbox.navigation.ui.androidauto.navigation.MapboxCarNavigationManager +import com.mapbox.navigation.ui.androidauto.notification.ActiveGuidanceExtenderUpdater +import com.mapbox.navigation.ui.androidauto.notification.FreeDriveExtenderUpdater +import com.mapbox.navigation.ui.androidauto.notification.IdleExtenderUpdater +import com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotification +import com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions +import com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRequest +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager +import com.mapbox.navigation.ui.androidauto.settings.MapboxCarStorage + +/** + * This is the entry point for Mapbox Navigation in Android Auto. Create this object and then you + * have access to services and options for customization. + * + * The [lifecycle] must come from a [Session.getLifecycle] or [Screen.getLifecycle] at this time. + * + * @param lifecycle used to access the [CarContext]. + * @param mapboxCarMap controls the Mapbox car map surface. + */ +class MapboxCarContext( + /** + * Gives access to the [Lifecycle] that owns the [CarContext]. + */ + val lifecycle: Lifecycle, + /** + * [MapboxCarMap] controls the Mapbox car map surface + */ + val mapboxCarMap: MapboxCarMap, +) { + private val carContextOwner = MapboxCarContextOwner(lifecycle) + + /** + * Options available for customizing Mapbox Android Auto Navigation. + */ + val options: MapboxCarOptions = MapboxCarOptions() + + /** + * Gives access to the [CarContext]. Throws an [IllegalStateException] when accessed before the + * lifecycle is [Lifecycle.State.CREATED] + */ + val carContext: CarContext by mapboxCarService("CarContext") { + carContextOwner.carContext() + } + + /** + * Control the screens shown with the [MapboxScreenManager]. + */ + val mapboxScreenManager = MapboxScreenManager(carContextOwner) + + /** + * Integrates Mapbox with the car libraries [NavigationManager]. Gives access to the auto + * drive state. Throws an [IllegalStateException] when accessed before the lifecycle is + * [Lifecycle.State.CREATED]. + * + * @see MapboxCarNavigationManager + * @see NavigationManager + */ + val mapboxNavigationManager by mapboxCarNavigationService("MapboxCarNavigationManager") { + MapboxCarNavigationManager(carContext) + } + + /** + * See the [MapboxCarNotificationOptions] for customization. + * + * @see MapboxCarNotification + */ + internal val mapboxNotification by mapboxCarNavigationService("MapboxCarNotification") { + MapboxCarNotification( + options, + carContext, + IdleExtenderUpdater(carContext), + FreeDriveExtenderUpdater(carContext), + ActiveGuidanceExtenderUpdater(carContext), + ) + } + + /** + * Access to persistent storage. Throws an [IllegalStateException] when accessed before + * the [lifecycle] is [Lifecycle.State.CREATED]. + */ + val mapboxCarStorage by mapboxCarService("MapboxCarStorage") { + MapboxCarStorage(carContext) + } + + /** + * Control and access the route preview. + */ + val routePreviewRequest = CarRoutePreviewRequest(options) + + // This is internal because it surfaces search objects which will likely change. + internal var geoDeeplinkPlacesProvider: GeoDeeplinkPlacesListOnMapProvider? = null + + /** + * Allows you to define values used by the Mapbox Android Auto Navigation SDK. + */ + fun customize(action: MapboxCarOptions.Customization.() -> Unit) = apply { + val customization = MapboxCarOptions.Customization().apply(action) + options.applyCustomization(customization) + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/MapboxCarOptions.kt similarity index 82% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/MapboxCarOptions.kt index e71112409c6..55253027889 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/MapboxCarOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/MapboxCarOptions.kt @@ -1,16 +1,16 @@ -package com.mapbox.androidauto - -import com.mapbox.androidauto.action.MapboxScreenActionStripProvider -import com.mapbox.androidauto.feedback.core.CarFeedbackOptions -import com.mapbox.androidauto.feedback.core.CarFeedbackPollProvider -import com.mapbox.androidauto.feedback.ui.CarFeedbackOption -import com.mapbox.androidauto.navigation.speedlimit.SpeedLimitOptions -import com.mapbox.androidauto.notification.MapboxCarNotification -import com.mapbox.androidauto.notification.MapboxCarNotificationOptions -import com.mapbox.androidauto.preview.CarRouteOptionsInterceptor -import com.mapbox.androidauto.search.CarPlaceSearchOptions +package com.mapbox.navigation.ui.androidauto + import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.ui.androidauto.action.MapboxScreenActionStripProvider +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackOptions +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackPollProvider +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackOption +import com.mapbox.navigation.ui.androidauto.navigation.speedlimit.SpeedLimitOptions +import com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotification +import com.mapbox.navigation.ui.androidauto.notification.MapboxCarNotificationOptions +import com.mapbox.navigation.ui.androidauto.preview.CarRouteOptionsInterceptor +import com.mapbox.navigation.ui.androidauto.search.CarPlaceSearchOptions import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/action/MapboxMapActionStrip.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/action/MapboxMapActionStrip.kt similarity index 81% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/action/MapboxMapActionStrip.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/action/MapboxMapActionStrip.kt index 6031f6344cf..5d8d6abe099 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/action/MapboxMapActionStrip.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/action/MapboxMapActionStrip.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.action +package com.mapbox.navigation.ui.androidauto.action import androidx.annotation.DrawableRes import androidx.car.app.Screen @@ -9,15 +9,14 @@ import androidx.core.graphics.drawable.IconCompat import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle -import com.mapbox.androidauto.R -import com.mapbox.androidauto.navigation.CarCameraMode -import com.mapbox.androidauto.navigation.CarNavigationCamera -import kotlinx.coroutines.flow.collect +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera import kotlinx.coroutines.launch class MapboxMapActionStrip( private val screen: Screen, - private val carNavigationCamera: CarNavigationCamera + private val carNavigationCamera: CarNavigationCamera, ) { init { screen.lifecycleScope.launch { @@ -33,13 +32,13 @@ class MapboxMapActionStrip( val nextCameraMode = carNavigationCamera.nextCameraMode.value when { nextCameraMode == CarCameraMode.FOLLOWING -> mapActionStripBuilder.addAction( - buildRecenterAction() + buildRecenterAction(), ) nextCameraMode == CarCameraMode.OVERVIEW -> mapActionStripBuilder.addAction( - buildOverviewAction() + buildOverviewAction(), ) !carNavigationCamera.followingZoomUpdatesAllowed() -> mapActionStripBuilder.addAction( - buildRecenterAction() + buildRecenterAction(), ) } @@ -54,9 +53,9 @@ class MapboxMapActionStrip( CarIcon.Builder( IconCompat.createWithResource( screen.carContext, - R.drawable.ic_recenter_24 - ) - ).build() + R.drawable.ic_recenter_24, + ), + ).build(), ) .build() @@ -65,9 +64,9 @@ class MapboxMapActionStrip( CarIcon.Builder( IconCompat.createWithResource( screen.carContext, - R.drawable.ic_zoom_in_24 - ) - ).build() + R.drawable.ic_zoom_in_24, + ), + ).build(), ) .setOnClickListener { carNavigationCamera.zoomUpdatesAllowed(false) @@ -80,9 +79,9 @@ class MapboxMapActionStrip( CarIcon.Builder( IconCompat.createWithResource( screen.carContext, - R.drawable.ic_zoom_out_24 - ) - ).build() + R.drawable.ic_zoom_out_24, + ), + ).build(), ) .setOnClickListener { carNavigationCamera.zoomUpdatesAllowed(false) @@ -103,8 +102,8 @@ class MapboxMapActionStrip( IconCompat.createWithResource( screen.carContext, iconId, - ) - ).build() + ), + ).build(), ) .setOnClickListener { carNavigationCamera.zoomUpdatesAllowed(true) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/action/MapboxScreenActionStripProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/action/MapboxScreenActionStripProvider.kt similarity index 79% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/action/MapboxScreenActionStripProvider.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/action/MapboxScreenActionStripProvider.kt index 0ed0f01f2e9..7fed8996679 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/action/MapboxScreenActionStripProvider.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/action/MapboxScreenActionStripProvider.kt @@ -1,18 +1,18 @@ -package com.mapbox.androidauto.action +package com.mapbox.navigation.ui.androidauto.action import androidx.car.app.Screen import androidx.car.app.model.Action import androidx.car.app.model.ActionStrip import androidx.car.app.model.OnClickListener -import com.mapbox.androidauto.R -import com.mapbox.androidauto.feedback.ui.CarFeedbackAction -import com.mapbox.androidauto.freedrive.FreeDriveActionStrip -import com.mapbox.androidauto.navigation.CarArrivalTrigger -import com.mapbox.androidauto.navigation.audioguidance.CarAudioGuidanceAction -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackAction +import com.mapbox.navigation.ui.androidauto.freedrive.FreeDriveActionStrip +import com.mapbox.navigation.ui.androidauto.navigation.CarArrivalTrigger +import com.mapbox.navigation.ui.androidauto.navigation.audioguidance.CarAudioGuidanceAction +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager /** * Gives you the ability to override the [ActionStrip] some of the [MapboxScreen]. @@ -35,7 +35,7 @@ open class MapboxScreenActionStripProvider { MapboxScreen.ROUTE_PREVIEW -> getRoutePreview(screen) MapboxScreen.ACTIVE_GUIDANCE -> getActiveGuidance(screen) else -> throw NotImplementedError( - "The $mapboxScreen does not have customizable actions at this time." + "The $mapboxScreen does not have customizable actions at this time.", ) } } @@ -54,8 +54,8 @@ open class MapboxScreenActionStripProvider { return ActionStrip.Builder() .addAction( CarFeedbackAction( - MapboxScreen.SEARCH_FEEDBACK - ).getAction(screen) + MapboxScreen.SEARCH_FEEDBACK, + ).getAction(screen), ) .build() } @@ -67,8 +67,8 @@ open class MapboxScreenActionStripProvider { return ActionStrip.Builder() .addAction( CarFeedbackAction( - MapboxScreen.FAVORITES_FEEDBACK - ).getAction(screen) + MapboxScreen.FAVORITES_FEEDBACK, + ).getAction(screen), ) .build() } @@ -80,8 +80,8 @@ open class MapboxScreenActionStripProvider { return ActionStrip.Builder() .addAction( CarFeedbackAction( - MapboxScreen.GEO_DEEPLINK_FEEDBACK - ).getAction(screen) + MapboxScreen.GEO_DEEPLINK_FEEDBACK, + ).getAction(screen), ) .build() } @@ -93,8 +93,8 @@ open class MapboxScreenActionStripProvider { return ActionStrip.Builder() .addAction( CarFeedbackAction( - MapboxScreen.ROUTE_PREVIEW_FEEDBACK - ).getAction(screen) + MapboxScreen.ROUTE_PREVIEW_FEEDBACK, + ).getAction(screen), ) .build() } @@ -117,9 +117,9 @@ open class MapboxScreenActionStripProvider { .addAction( Action.Builder() .setTitle( - screen.carContext.getString(R.string.car_action_navigation_stop_button) + screen.carContext.getString(R.string.car_action_navigation_stop_button), ) - .setOnClickListener(arrivalOnClickListener).build() + .setOnClickListener(arrivalOnClickListener).build(), ) .build() } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkGeocoding.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkGeocoding.kt new file mode 100644 index 00000000000..1f441e8e8c0 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkGeocoding.kt @@ -0,0 +1,80 @@ +package com.mapbox.navigation.ui.androidauto.deeplink + +import com.mapbox.api.geocoding.v5.GeocodingCriteria +import com.mapbox.api.geocoding.v5.MapboxGeocoding +import com.mapbox.api.geocoding.v5.models.GeocodingResponse +import com.mapbox.geojson.Point +import com.mapbox.navigation.core.geodeeplink.GeoDeeplink +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.withContext +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class GeoDeeplinkGeocoding( + private val accessToken: String, +) { + var currentMapboxGeocoding: MapboxGeocoding? = null + + suspend fun requestPlaces( + geoDeeplink: GeoDeeplink, + origin: Point, + ): GeocodingResponse? { + currentMapboxGeocoding?.cancelCall() + val point = geoDeeplink.point + val placeQuery = geoDeeplink.placeQuery + currentMapboxGeocoding = when { + point != null -> { + MapboxGeocoding.builder() + .accessToken(accessToken) + .query(point) + .proximity(origin) + .geocodingTypes(GeocodingCriteria.TYPE_ADDRESS) + .build() + } + placeQuery != null -> { + MapboxGeocoding.builder() + .accessToken(accessToken) + .query(placeQuery) + .proximity(origin) + .build() + } + else -> { + error("GeoDeepLink must have a point or query") + } + } + return withContext(Dispatchers.IO) { + currentMapboxGeocoding?.asFlow()?.first() + } + } + + fun cancel() { + currentMapboxGeocoding?.cancelCall() + } + + private fun MapboxGeocoding.asFlow(): Flow = callbackFlow { + enqueueCall( + object : Callback { + override fun onResponse( + call: Call, + response: Response, + ) { + trySend(response.body()) + close() + } + + override fun onFailure(call: Call, t: Throwable) { + trySend(null) + close() + } + }, + ) + awaitClose { + cancelCall() + } + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkNavigateAction.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkNavigateAction.kt new file mode 100644 index 00000000000..0ad8804e290 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkNavigateAction.kt @@ -0,0 +1,32 @@ +package com.mapbox.navigation.ui.androidauto.deeplink + +import android.content.Intent +import com.mapbox.common.MapboxOptions +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.core.geodeeplink.GeoDeeplink +import com.mapbox.navigation.core.geodeeplink.GeoDeeplinkParser +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager + +@ExperimentalPreviewMapboxNavigationAPI +class GeoDeeplinkNavigateAction(val mapboxCarContext: MapboxCarContext) { + fun onNewIntent(intent: Intent): Boolean { + val geoDeeplink = GeoDeeplinkParser.parse(intent.dataString) + ?: return false + return preparePlacesListOnMapScreen(geoDeeplink) + } + + private fun preparePlacesListOnMapScreen( + geoDeeplink: GeoDeeplink, + ): Boolean { + logAndroidAuto("GeoDeeplinkNavigateAction preparePlacesListOnMapScreen") + mapboxCarContext.geoDeeplinkPlacesProvider = GeoDeeplinkPlacesListOnMapProvider( + GeoDeeplinkGeocoding(MapboxOptions.accessToken), + geoDeeplink, + ) + MapboxScreenManager.push(MapboxScreen.GEO_DEEPLINK) + return true + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkParser.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkParser.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkParser.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkParser.kt index f414eed9f19..d0413f1f3c3 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/deeplink/GeoDeeplinkParser.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkParser.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.deeplink +package com.mapbox.navigation.ui.androidauto.deeplink import com.mapbox.navigation.core.geodeeplink.GeoDeeplink import com.mapbox.navigation.core.geodeeplink.GeoDeeplinkParser diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt new file mode 100644 index 00000000000..efac82240c4 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProvider.kt @@ -0,0 +1,39 @@ +package com.mapbox.navigation.ui.androidauto.deeplink + +import com.mapbox.bindgen.Expected +import com.mapbox.bindgen.ExpectedFactory +import com.mapbox.geojson.Point +import com.mapbox.navigation.core.geodeeplink.GeoDeeplink +import com.mapbox.navigation.ui.androidauto.location.CarLocationProvider +import com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapProvider +import com.mapbox.navigation.ui.androidauto.search.GetPlacesError +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord +import com.mapbox.navigation.ui.androidauto.search.PlaceRecordMapper + +internal class GeoDeeplinkPlacesListOnMapProvider( + private val geoDeeplinkGeocoding: GeoDeeplinkGeocoding, + private val geoDeeplink: GeoDeeplink, +) : PlacesListOnMapProvider { + + override suspend fun getPlaces(): Expected> { + // Wait for an origin location + val origin = CarLocationProvider.getRegisteredInstance().validLocation() + .run { Point.fromLngLat(longitude, latitude) } + ?: return ExpectedFactory.createError( + GetPlacesError("Did not find current location.", null), + ) + + // Request places from the origin to the deeplink place + val result = geoDeeplinkGeocoding.requestPlaces(geoDeeplink, origin) + ?: return ExpectedFactory.createError( + GetPlacesError("Error getting geo deeplink places.", null), + ) + return ExpectedFactory.createValue( + result.features().map(PlaceRecordMapper::fromCarmenFeature), + ) + } + + override fun cancel() { + geoDeeplinkGeocoding.cancel() + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackOptions.kt similarity index 85% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackOptions.kt index d9f57d6bc64..73129265571 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackOptions.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.core +package com.mapbox.navigation.ui.androidauto.feedback.core import com.mapbox.navigation.core.telemetry.events.BitmapEncodeOptions @@ -6,14 +6,14 @@ import com.mapbox.navigation.core.telemetry.events.BitmapEncodeOptions * Modify the car feedback. */ class CarFeedbackOptions private constructor( - val bitmapEncodeOptions: BitmapEncodeOptions + val bitmapEncodeOptions: BitmapEncodeOptions, ) { class Builder { private val bitmapEncodeOptions: BitmapEncodeOptions? = null fun build(): CarFeedbackOptions { return CarFeedbackOptions( - bitmapEncodeOptions = bitmapEncodeOptions ?: defaultBitmapEncodeOptions + bitmapEncodeOptions = bitmapEncodeOptions ?: defaultBitmapEncodeOptions, ) } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackPollProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackPollProvider.kt similarity index 95% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackPollProvider.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackPollProvider.kt index 73f933be3da..98512838f4c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackPollProvider.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackPollProvider.kt @@ -1,14 +1,14 @@ -package com.mapbox.androidauto.feedback.core +package com.mapbox.navigation.ui.androidauto.feedback.core import androidx.annotation.DrawableRes import androidx.car.app.CarContext import androidx.car.app.model.CarIcon import androidx.core.graphics.drawable.IconCompat -import com.mapbox.androidauto.R -import com.mapbox.androidauto.feedback.ui.CarFeedbackIcon -import com.mapbox.androidauto.feedback.ui.CarFeedbackOption -import com.mapbox.androidauto.feedback.ui.CarFeedbackPoll import com.mapbox.navigation.core.telemetry.events.FeedbackEvent +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackIcon +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackOption +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll import com.mapbox.search.analytics.FeedbackEvent.FeedbackReason /** @@ -93,7 +93,7 @@ open class CarFeedbackPollProvider { CarFeedbackOption( title = carContext.getString(R.string.car_feedback_negative_road_closed), icon = carContext.getCarIcon(R.drawable.mapbox_car_ic_feedback_road_closure), - type = FeedbackEvent.ROAD_CLOSED + type = FeedbackEvent.ROAD_CLOSED, ), CarFeedbackOption( title = carContext.getString(R.string.car_feedback_negative_positioning_issue), @@ -163,7 +163,7 @@ open class CarFeedbackPollProvider { val options = listOf( CarFeedbackOption( title = carContext.getString( - R.string.car_feedback_arrival_positive + R.string.car_feedback_arrival_positive, ), icon = carContext.getCarIcon(R.drawable.mapbox_car_ic_feedback_positive), type = FeedbackEvent.ARRIVAL_FEEDBACK_GOOD, diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackScreenFactory.kt similarity index 77% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackScreenFactory.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackScreenFactory.kt index 6217cead3ca..2e6bca88173 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackScreenFactory.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackScreenFactory.kt @@ -1,12 +1,12 @@ -package com.mapbox.androidauto.feedback.core +package com.mapbox.navigation.ui.androidauto.feedback.core import androidx.car.app.CarContext import androidx.car.app.Screen -import com.mapbox.androidauto.MapboxCarContext -import com.mapbox.androidauto.feedback.ui.CarFeedbackPoll -import com.mapbox.androidauto.feedback.ui.CarGridFeedbackScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenFactory import com.mapbox.navigation.core.telemetry.events.FeedbackHelper +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarGridFeedbackScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory abstract class CarFeedbackScreenFactory( private val mapboxCarContext: MapboxCarContext, diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackSender.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackSender.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackSender.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackSender.kt index bcb38ea089f..d18ea546958 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/core/CarFeedbackSender.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/core/CarFeedbackSender.kt @@ -1,13 +1,13 @@ -package com.mapbox.androidauto.feedback.core +package com.mapbox.navigation.ui.androidauto.feedback.core import androidx.annotation.Keep import androidx.annotation.UiThread import com.google.gson.Gson -import com.mapbox.androidauto.feedback.ui.CarFeedbackItem import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.telemetry.events.FeedbackEvent import com.mapbox.navigation.core.telemetry.events.FeedbackMetadata +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackItem @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) internal class CarFeedbackSender { @@ -18,7 +18,7 @@ internal class CarFeedbackSender { fun send( selectedItem: CarFeedbackItem, encodedSnapshot: String?, - sourceScreenSimpleName: String + sourceScreenSimpleName: String, ) { val mapboxNavigation = MapboxNavigationApp.current() val feedbackMetadata = mapboxNavigation?.provideFeedbackMetadataWrapper()?.get() @@ -46,8 +46,8 @@ internal class CarFeedbackSender { sourceScreen = sourceScreenSimpleName, carFeedbackItem = selectedItem, encodedSnapshot = encodedSnapshot, - feedbackMetadata = feedbackMetadata - ) + feedbackMetadata = feedbackMetadata, + ), ) } @@ -67,5 +67,5 @@ internal data class CarFeedbackHistoryEvent( val sourceScreen: String, val carFeedbackItem: CarFeedbackItem? = null, val encodedSnapshot: String? = null, - val feedbackMetadata: FeedbackMetadata? = null + val feedbackMetadata: FeedbackMetadata? = null, ) diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackAction.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackAction.kt new file mode 100644 index 00000000000..4c39a39e740 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackAction.kt @@ -0,0 +1,39 @@ +package com.mapbox.navigation.ui.androidauto.feedback.ui + +import androidx.car.app.Screen +import androidx.car.app.model.Action +import androidx.car.app.model.CarIcon +import androidx.core.graphics.drawable.IconCompat +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager + +/** + * Add an action button that represents feedback, when pressed the screen will be changed to + * [carFeedbackScreen] + * + * @param carFeedbackScreen [MapboxScreen.Key] used when the action is selected. + */ +class CarFeedbackAction( + @MapboxScreen.Key + private val carFeedbackScreen: String, +) { + + /** + * Build the [Action]. + */ + fun getAction(screen: Screen): Action { + return buildSnapshotAction(screen) + } + + private fun buildSnapshotAction(screen: Screen) = Action.Builder() + .setIcon( + CarIcon.Builder( + IconCompat.createWithResource(screen.carContext, R.drawable.mapbox_car_ic_feedback), + ).build(), + ) + .setOnClickListener { + MapboxScreenManager.push(carFeedbackScreen) + } + .build() +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackIcon.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackIcon.kt similarity index 82% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackIcon.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackIcon.kt index b1b39d7def8..4c53a2a545f 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackIcon.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackIcon.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.ui +package com.mapbox.navigation.ui.androidauto.feedback.ui import android.net.Uri import androidx.car.app.model.CarIcon diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackIconDownloader.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackIconDownloader.kt similarity index 97% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackIconDownloader.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackIconDownloader.kt index 8a1b565a7ad..ae88c9a27eb 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackIconDownloader.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackIconDownloader.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.ui +package com.mapbox.navigation.ui.androidauto.feedback.ui import android.graphics.drawable.Drawable import android.net.Uri diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackItem.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackItem.kt similarity index 90% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackItem.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackItem.kt index 557930455ac..d63fab15614 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackItem.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackItem.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.ui +package com.mapbox.navigation.ui.androidauto.feedback.ui import androidx.annotation.Keep diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackOption.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackOption.kt similarity index 87% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackOption.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackOption.kt index 9ffb9510e33..764ed24202e 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackOption.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackOption.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.ui +package com.mapbox.navigation.ui.androidauto.feedback.ui /** * Represents one of the predefined categories users can select when providing feedback diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackPoll.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackPoll.kt similarity index 84% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackPoll.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackPoll.kt index 1c97d07f1cf..fdea0ad10dd 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarFeedbackPoll.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarFeedbackPoll.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.ui +package com.mapbox.navigation.ui.androidauto.feedback.ui /** * Represents a step in a feedback flow, where users select one of the predefined categories diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarGridFeedbackScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarGridFeedbackScreen.kt similarity index 88% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarGridFeedbackScreen.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarGridFeedbackScreen.kt index 60e875b943f..fb8d0b66a41 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/feedback/ui/CarGridFeedbackScreen.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/feedback/ui/CarGridFeedbackScreen.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.feedback.ui +package com.mapbox.navigation.ui.androidauto.feedback.ui import androidx.annotation.UiThread import androidx.car.app.CarToast @@ -8,10 +8,10 @@ import androidx.car.app.model.GridItem import androidx.car.app.model.GridTemplate import androidx.car.app.model.ItemList import androidx.car.app.model.Template -import com.mapbox.androidauto.MapboxCarContext -import com.mapbox.androidauto.R -import com.mapbox.androidauto.feedback.core.CarFeedbackSender -import com.mapbox.androidauto.internal.extensions.addBackPressedHandler +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackSender +import com.mapbox.navigation.ui.androidauto.internal.extensions.addBackPressedHandler /** * This screen allows the user to search for a destination. diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/freedrive/FreeDriveActionStrip.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/freedrive/FreeDriveActionStrip.kt similarity index 76% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/freedrive/FreeDriveActionStrip.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/freedrive/FreeDriveActionStrip.kt index 97ad2535dba..45e5d0a7a45 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/freedrive/FreeDriveActionStrip.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/freedrive/FreeDriveActionStrip.kt @@ -1,17 +1,17 @@ -package com.mapbox.androidauto.freedrive +package com.mapbox.navigation.ui.androidauto.freedrive import androidx.car.app.Screen import androidx.car.app.model.Action import androidx.car.app.model.ActionStrip import androidx.car.app.model.CarIcon import androidx.core.graphics.drawable.IconCompat -import com.mapbox.androidauto.R -import com.mapbox.androidauto.feedback.ui.CarFeedbackAction -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackAction +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager class FreeDriveActionStrip( - private val screen: Screen + private val screen: Screen, ) { /** * Build an action strip for free drive @@ -30,9 +30,9 @@ class FreeDriveActionStrip( CarIcon.Builder( IconCompat.createWithResource( screen.carContext, - R.drawable.ic_settings - ) - ).build() + R.drawable.ic_settings, + ), + ).build(), ) .setOnClickListener { MapboxScreenManager.push(MapboxScreen.SETTINGS) @@ -53,9 +53,9 @@ class FreeDriveActionStrip( CarIcon.Builder( IconCompat.createWithResource( screen.carContext, - R.drawable.ic_search_black36dp - ) - ).build() + R.drawable.ic_search_black36dp, + ), + ).build(), ) .setOnClickListener { MapboxScreenManager.push(MapboxScreen.SEARCH) diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/freedrive/FreeDriveCarScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/freedrive/FreeDriveCarScreen.kt new file mode 100644 index 00000000000..aa15f6a1372 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/freedrive/FreeDriveCarScreen.kt @@ -0,0 +1,79 @@ +package com.mapbox.navigation.ui.androidauto.freedrive + +import androidx.annotation.UiThread +import androidx.car.app.Screen +import androidx.car.app.model.CarColor +import androidx.car.app.model.Template +import androidx.car.app.navigation.model.NavigationTemplate +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.action.MapboxMapActionStrip +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.location.CarLocationRenderer +import com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera +import com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelRenderer +import com.mapbox.navigation.ui.androidauto.navigation.speedlimit.CarSpeedLimitRenderer +import com.mapbox.navigation.ui.androidauto.preview.CarRouteLineRenderer +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * When the app is launched from Android Auto + */ +internal class FreeDriveCarScreen @UiThread constructor( + private val mapboxCarContext: MapboxCarContext, +) : Screen(mapboxCarContext.carContext) { + + val carRouteLineRenderer = CarRouteLineRenderer() + val carLocationRenderer = CarLocationRenderer() + val carSpeedLimitRenderer = CarSpeedLimitRenderer(mapboxCarContext) + val carNavigationCamera = CarNavigationCamera( + initialCarCameraMode = CarCameraMode.FOLLOWING, + alternativeCarCameraMode = null, + ) + private val carRoadLabelRenderer = CarRoadLabelRenderer() + private val mapActionStripBuilder = MapboxMapActionStrip(this, carNavigationCamera) + + init { + logAndroidAuto("FreeDriveCarScreen constructor") + lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + logAndroidAuto("FreeDriveCarScreen onResume") + mapboxCarContext.mapboxCarMap.registerObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carRoadLabelRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.setGestureHandler( + carNavigationCamera.gestureHandler, + ) + } + + override fun onPause(owner: LifecycleOwner) { + logAndroidAuto("FreeDriveCarScreen onPause") + mapboxCarContext.mapboxCarMap.unregisterObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carRoadLabelRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.setGestureHandler(null) + } + }, + ) + } + + @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) + override fun onGetTemplate(): Template { + return NavigationTemplate.Builder() + .setBackgroundColor(CarColor.PRIMARY) + .setActionStrip( + mapboxCarContext.options.actionStripProvider + .getActionStrip(this, MapboxScreen.FREE_DRIVE), + ) + .setMapActionStrip(mapActionStripBuilder.build()) + .build() + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/AndroidAutoLog.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/AndroidAutoLog.kt similarity index 87% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/AndroidAutoLog.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/AndroidAutoLog.kt index d29a27e782e..6663c956ef2 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/AndroidAutoLog.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/AndroidAutoLog.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.internal +package com.mapbox.navigation.ui.androidauto.internal import com.mapbox.navigation.utils.internal.logE import com.mapbox.navigation.utils.internal.logI @@ -10,14 +10,14 @@ internal object AndroidAutoLog { fun logAndroidAuto(message: String) { logI( msg = "${Thread.currentThread().id}: $message", - LOG_CATEGORY + LOG_CATEGORY, ) } fun logAndroidAutoFailure(message: String, throwable: Throwable? = null) { logE( msg = "${Thread.currentThread().id}: $message throwable: $throwable", - LOG_CATEGORY + LOG_CATEGORY, ) } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/RendererUtils.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/RendererUtils.kt similarity index 88% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/RendererUtils.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/RendererUtils.kt index f3ae00b56ae..6518d8da260 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/RendererUtils.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/RendererUtils.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.internal +package com.mapbox.navigation.ui.androidauto.internal import android.content.Context diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/context/MapboxCarContextOwner.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/context/MapboxCarContextOwner.kt similarity index 95% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/context/MapboxCarContextOwner.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/context/MapboxCarContextOwner.kt index 86b5c69860a..afa2abbc14a 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/context/MapboxCarContextOwner.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/context/MapboxCarContextOwner.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.internal.context +package com.mapbox.navigation.ui.androidauto.internal.context import androidx.car.app.CarContext import androidx.car.app.Screen diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/context/MapboxCarServiceDelegate.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/context/MapboxCarServiceDelegate.kt similarity index 76% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/context/MapboxCarServiceDelegate.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/context/MapboxCarServiceDelegate.kt index 93aaa13257f..5429966aeb9 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/context/MapboxCarServiceDelegate.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/context/MapboxCarServiceDelegate.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.internal.context +package com.mapbox.navigation.ui.androidauto.internal.context import androidx.car.app.CarContext import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner -import com.mapbox.androidauto.MapboxCarContext import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver +import com.mapbox.navigation.ui.androidauto.MapboxCarContext import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty @@ -55,16 +55,18 @@ class MapboxCarServiceDelegate( private var value: T? = null init { - mapboxCarContext.lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onCreate(owner: LifecycleOwner) { - value = onCreate() - } - override fun onDestroy(owner: LifecycleOwner) { - super.onDestroy(owner) - value?.let { onDestroy(it) } - this@MapboxCarServiceDelegate.value = null - } - }) + mapboxCarContext.lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onCreate(owner: LifecycleOwner) { + value = onCreate() + } + override fun onDestroy(owner: LifecycleOwner) { + super.onDestroy(owner) + value?.let { onDestroy(it) } + this@MapboxCarServiceDelegate.value = null + } + }, + ) } override fun getValue(thisRef: Any, property: KProperty<*>): T { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/extensions/MapboxCarMapSurfaceExtensions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxCarMapSurfaceExtensions.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/extensions/MapboxCarMapSurfaceExtensions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxCarMapSurfaceExtensions.kt index 966c8262ade..48c1d78fe84 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/extensions/MapboxCarMapSurfaceExtensions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxCarMapSurfaceExtensions.kt @@ -1,6 +1,6 @@ @file:JvmName("MapboxCarMapSurfaceEx") -package com.mapbox.androidauto.internal.extensions +package com.mapbox.navigation.ui.androidauto.internal.extensions import com.mapbox.maps.Style import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxNavigationExtensions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxNavigationExtensions.kt new file mode 100644 index 00000000000..39263493a13 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxNavigationExtensions.kt @@ -0,0 +1,30 @@ +@file:JvmName("MapboxNavigationEx") + +package com.mapbox.navigation.ui.androidauto.internal.extensions + +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver + +/** + * This extension removes boilerplate from a class that needs to use [MapboxNavigation], and it + * makes your class appear as if it implements [MapboxNavigationObserver] without exposing the + * functions. + * + * ``` kotlin + * val navigationObserver = mapboxNavigationForward(this::onAttached, this::onDetached) + * private fun onAttached(mapboxNavigation: MapboxNavigation) + * private fun onDetached(mapboxNavigation: MapboxNavigation) + * ``` + */ +fun mapboxNavigationForward( + attach: (MapboxNavigation) -> Unit, + detach: (MapboxNavigation) -> Unit, +) = object : MapboxNavigationObserver { + override fun onAttached(mapboxNavigation: MapboxNavigation) { + attach(mapboxNavigation) + } + + override fun onDetached(mapboxNavigation: MapboxNavigation) { + detach(mapboxNavigation) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxScreenExtensions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxScreenExtensions.kt new file mode 100644 index 00000000000..a7bca60f44d --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/extensions/MapboxScreenExtensions.kt @@ -0,0 +1,37 @@ +@file:JvmName("MapboxScreenEx") + +package com.mapbox.navigation.ui.androidauto.internal.extensions + +import androidx.activity.OnBackPressedCallback +import androidx.car.app.Screen +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager + +/** + * When you push a [Screen] to the [MapboxScreenManager], you also need handle back pressed. + * + * ``` + * init { addBackPressedHandler { mapboxCarContext.mapboxScreenManager.goBack() } + * ``` + */ +fun Screen.addBackPressedHandler(callback: () -> Unit) { + val backPressCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + callback.invoke() + } + } + lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + carContext.onBackPressedDispatcher.addCallback( + backPressCallback, + ) + } + + override fun onPause(owner: LifecycleOwner) { + backPressCallback.remove() + } + }, + ) +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/CarPlaceSearch.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarPlaceSearch.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/CarPlaceSearch.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarPlaceSearch.kt index 72f6677fae1..45fd78e9888 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/CarPlaceSearch.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarPlaceSearch.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.internal.search +package com.mapbox.navigation.ui.androidauto.internal.search import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.search.result.SearchResult diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/CarPlaceSearchImpl.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarPlaceSearchImpl.kt similarity index 88% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/CarPlaceSearchImpl.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarPlaceSearchImpl.kt index bdd8b947b32..817968c6891 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/CarPlaceSearchImpl.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarPlaceSearchImpl.kt @@ -1,9 +1,9 @@ -package com.mapbox.androidauto.internal.search +package com.mapbox.navigation.ui.androidauto.internal.search -import com.mapbox.androidauto.MapboxCarOptions -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.internal.logAndroidAutoFailure import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.ui.androidauto.MapboxCarOptions +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAutoFailure import com.mapbox.search.ApiType import com.mapbox.search.ResponseInfo import com.mapbox.search.SearchEngine @@ -31,10 +31,8 @@ class CarPlaceSearchImpl( searchEngine = SearchEngine.createSearchEngineWithBuiltInDataProviders( apiType = ApiType.SBS, settings = SearchEngineSettings( - options.carPlaceSearchOptions.accessToken - ?: mapboxNavigation.navigationOptions.accessToken!!, locationProvider, - ) + ), ) } @@ -62,7 +60,7 @@ class CarPlaceSearchImpl( val searchCallback = object : SearchSuggestionsCallback { override fun onSuggestions( suggestions: List, - responseInfo: ResponseInfo + responseInfo: ResponseInfo, ) { logAndroidAuto("carLocationProvider result ${suggestions.size}") continuation.resume(Result.success(suggestions)) @@ -86,10 +84,11 @@ class CarPlaceSearchImpl( return suspendCancellableCoroutine { continuation -> val selectionCallback = object : SearchSelectionCallback { - override fun onCategoryResult( + + override fun onResults( suggestion: SearchSuggestion, results: List, - responseInfo: ResponseInfo + responseInfo: ResponseInfo, ) { continuation.resume(Result.success(results)) } @@ -101,14 +100,14 @@ class CarPlaceSearchImpl( override fun onResult( suggestion: SearchSuggestion, result: SearchResult, - responseInfo: ResponseInfo + responseInfo: ResponseInfo, ) { continuation.resume(Result.success(listOf(result))) } override fun onSuggestions( suggestions: List, - responseInfo: ResponseInfo + responseInfo: ResponseInfo, ) { logAndroidAutoFailure( """ @@ -129,7 +128,7 @@ class CarPlaceSearchImpl( val message = "SearchEngine is not available for place $source" logAndroidAutoFailure(message) return Result.failure( - IllegalStateException("SearchEngine is not available for place $source") + IllegalStateException("SearchEngine is not available for place $source"), ) } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarSearchLocationProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarSearchLocationProvider.kt new file mode 100644 index 00000000000..4372f843da9 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/CarSearchLocationProvider.kt @@ -0,0 +1,91 @@ +package com.mapbox.navigation.ui.androidauto.internal.search + +import android.os.Handler +import android.os.Looper +import com.mapbox.common.Cancelable +import com.mapbox.common.location.GetLocationCallback +import com.mapbox.common.location.Location +import com.mapbox.common.location.LocationProvider +import com.mapbox.geojson.Point +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver +import com.mapbox.navigation.core.trip.session.LocationMatcherResult +import com.mapbox.navigation.core.trip.session.LocationObserver +import java.util.concurrent.ConcurrentHashMap + +private typealias CommonLocationObserver = com.mapbox.common.location.LocationObserver + +class CarSearchLocationProvider : LocationProvider, MapboxNavigationObserver { + + var location: LocationMatcherResult? = null + private set + var point: Point? = null + get() = location?.let { + Point.fromLngLat( + it.enhancedLocation.longitude, + it.enhancedLocation.latitude, + ) + } + private set + + private val observers = ConcurrentHashMap() + + private val locationObserver = object : LocationObserver { + override fun onNewRawLocation(rawLocation: Location) { + // no op + } + + override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { + location = locationMatcherResult + observers.forEach { (callback, looper) -> + notifyCallback(locationMatcherResult, callback, looper) + } + } + } + + private fun notifyCallback( + locationMatcherResult: LocationMatcherResult, + observer: CommonLocationObserver, + looper: Looper?, + ) { + val func = { + observer.onLocationUpdateReceived(locationMatcherResult.keyPoints) + } + + if (looper != null) { + Handler(looper).post(func) + } else { + func() + } + } + + override fun addLocationObserver(observer: CommonLocationObserver) { + observers[observer] = null + } + + override fun addLocationObserver( + observer: com.mapbox.common.location.LocationObserver, + looper: Looper, + ) { + observers[observer] = looper + } + + override fun removeLocationObserver(observer: com.mapbox.common.location.LocationObserver) { + observers.remove(observer) + } + + override fun getLastLocation( + callback: GetLocationCallback, + ): Cancelable { + callback.run(location?.enhancedLocation) + return Cancelable {} + } + + override fun onAttached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.registerLocationObserver(locationObserver) + } + + override fun onDetached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.unregisterLocationObserver(locationObserver) + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/FavoritesApi.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/FavoritesApi.kt similarity index 84% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/FavoritesApi.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/FavoritesApi.kt index 0ccc255def4..ec325bf8c1d 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/internal/search/FavoritesApi.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/internal/search/FavoritesApi.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.internal.search +package com.mapbox.navigation.ui.androidauto.internal.search -import com.mapbox.androidauto.placeslistonmap.PlacesListOnMapProvider -import com.mapbox.androidauto.search.GetPlacesError -import com.mapbox.androidauto.search.PlaceRecord -import com.mapbox.androidauto.search.PlaceRecordMapper import com.mapbox.bindgen.Expected import com.mapbox.bindgen.ExpectedFactory +import com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapProvider +import com.mapbox.navigation.ui.androidauto.search.GetPlacesError +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord +import com.mapbox.navigation.ui.androidauto.search.PlaceRecordMapper import com.mapbox.search.common.AsyncOperationTask import com.mapbox.search.common.CompletionCallback import com.mapbox.search.record.FavoriteRecord @@ -14,7 +14,7 @@ import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine class FavoritesApi( - private val favoritesProvider: FavoritesDataProvider + private val favoritesProvider: FavoritesDataProvider, ) : PlacesListOnMapProvider { private var getAllTask: AsyncOperationTask? = null @@ -47,8 +47,8 @@ class FavoritesApi( override fun onError(e: Exception) { continuation.resume( ExpectedFactory.createError( - GetPlacesError(e.message ?: "Error getting favorites.", e) - ) + GetPlacesError(e.message ?: "Error getting favorites.", e), + ), ) } }, @@ -57,7 +57,7 @@ class FavoritesApi( } suspend fun addFavorite( - favoriteRecord: FavoriteRecord + favoriteRecord: FavoriteRecord, ): Expected { addFavoriteTask?.cancel() return suspendCoroutine { continuation -> @@ -71,8 +71,8 @@ class FavoritesApi( override fun onError(e: Exception) { continuation.resume( ExpectedFactory.createError( - GetPlacesError(e.message ?: "Error adding favorite.", e) - ) + GetPlacesError(e.message ?: "Error adding favorite.", e), + ), ) } }, @@ -93,8 +93,8 @@ class FavoritesApi( override fun onError(e: Exception) { continuation.resume( ExpectedFactory.createError( - GetPlacesError(e.message ?: "Error adding favorite.", e) - ) + GetPlacesError(e.message ?: "Error adding favorite.", e), + ), ) } }, diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/location/CarLocationProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationProvider.kt similarity index 90% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/location/CarLocationProvider.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationProvider.kt index 4a967081c4d..00885cf2836 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/location/CarLocationProvider.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationProvider.kt @@ -1,6 +1,6 @@ -package com.mapbox.androidauto.location +package com.mapbox.navigation.ui.androidauto.location -import android.location.Location +import com.mapbox.common.location.Location import com.mapbox.maps.plugin.locationcomponent.LocationConsumer import com.mapbox.maps.plugin.locationcomponent.LocationProvider import com.mapbox.navigation.core.MapboxNavigation @@ -9,6 +9,7 @@ import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.LocationMatcherResult import com.mapbox.navigation.core.trip.session.LocationObserver import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider +import com.mapbox.navigation.utils.internal.logD import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.first @@ -21,11 +22,12 @@ class CarLocationProvider private constructor() : MapboxNavigationObserver, Loca private val navigationLocationProvider = NavigationLocationProvider() private val mutableLocation = MutableSharedFlow( replay = 1, - onBufferOverflow = BufferOverflow.DROP_OLDEST + onBufferOverflow = BufferOverflow.DROP_OLDEST, ) private val locationObserver = object : LocationObserver { override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { + logD("YURY") { "onNewLocationMatcherResult: $locationMatcherResult" } navigationLocationProvider.changePosition( locationMatcherResult.enhancedLocation, locationMatcherResult.keyPoints, @@ -34,7 +36,7 @@ class CarLocationProvider private constructor() : MapboxNavigationObserver, Loca } override fun onNewRawLocation(rawLocation: Location) { - // no op + // no-op } } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationPuck.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationPuck.kt new file mode 100644 index 00000000000..224c2c9cc11 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationPuck.kt @@ -0,0 +1,26 @@ +package com.mapbox.navigation.ui.androidauto.location + +import com.mapbox.maps.ImageHolder +import com.mapbox.maps.plugin.LocationPuck2D +import com.mapbox.navigation.ui.androidauto.R + +object CarLocationPuck { + + fun navigationPuck2D() = LocationPuck2D( + bearingImage = ImageHolder.from(R.drawable.mapbox_navigation_puck_icon), + ) + + // Example 2d compass puck +// fun puck2D(carContext: CarContext) = LocationPuck2D( +// topImage = carContext.getDrawable(R.drawable.mapbox_user_icon), +// bearingImage = carContext.getDrawable(R.drawable.mapbox_user_bearing_icon), +// shadowImage = carContext.getDrawable(R.drawable.mapbox_user_stroke_icon), +// ) + + // TODO Add a 3d model as an example, to the `assets` directory +// private const val MODEL_SCALE = 0.2f +// val puck3D: LocationPuck = LocationPuck3D( +// modelUri = "asset://race_car_model.gltf", +// modelScale = listOf(MODEL_SCALE, MODEL_SCALE, MODEL_SCALE) +// ) +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationRenderer.kt new file mode 100644 index 00000000000..2fd6931f00e --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/location/CarLocationRenderer.kt @@ -0,0 +1,26 @@ +package com.mapbox.navigation.ui.androidauto.location + +import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver +import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface +import com.mapbox.maps.plugin.PuckBearing +import com.mapbox.maps.plugin.locationcomponent.location +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto + +/** + * Create a simple 3d location puck. This class is demonstrating how to + * create a renderer. To Create a new location experience, try creating a new class. + */ +class CarLocationRenderer : MapboxCarMapObserver { + + override fun onAttached(mapboxCarMapSurface: MapboxCarMapSurface) { + logAndroidAuto("CarLocationRenderer carMapSurface loaded") + mapboxCarMapSurface.mapSurface.location.apply { + locationPuck = CarLocationPuck.navigationPuck2D() + enabled = true + pulsingEnabled = true + puckBearingEnabled = true + puckBearing = PuckBearing.COURSE + setLocationProvider(CarLocationProvider.getRegisteredInstance()) + } + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/map/MapboxCarMapLoader.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/MapboxCarMapLoader.kt similarity index 91% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/map/MapboxCarMapLoader.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/MapboxCarMapLoader.kt index 9a98917a518..7a8462c8798 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/map/MapboxCarMapLoader.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/MapboxCarMapLoader.kt @@ -1,10 +1,7 @@ -package com.mapbox.androidauto.map +package com.mapbox.navigation.ui.androidauto.map import androidx.car.app.CarContext import androidx.car.app.Session -import com.mapbox.androidauto.internal.extensions.getStyle -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.internal.logAndroidAutoFailure import com.mapbox.maps.MapboxMap import com.mapbox.maps.extension.androidauto.MapboxCarMap import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver @@ -13,6 +10,9 @@ import com.mapbox.maps.extension.observable.eventdata.MapLoadingErrorEventData import com.mapbox.maps.extension.style.StyleContract import com.mapbox.maps.extension.style.style import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadErrorListener +import com.mapbox.navigation.ui.androidauto.internal.extensions.getStyle +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAutoFailure import com.mapbox.navigation.ui.maps.NavigationStyles /** @@ -44,7 +44,7 @@ class MapboxCarMapLoader : MapboxCarMapObserver { mapSurface.getMapboxMap().loadStyle( getStyleExtension(carContext.isDarkMode), onStyleLoaded = { logAndroidAuto("onAttached style loaded") }, - onMapLoadErrorListener = logMapError + onMapLoadErrorListener = logMapError, ) } } @@ -100,9 +100,9 @@ class MapboxCarMapLoader : MapboxCarMapObserver { onStyleLoaded = { style -> logAndroidAuto("updateMapStyle styleAvailable ${style.styleURI}") }, - onMapLoadErrorListener = logMapError + onMapLoadErrorListener = logMapError, ) ?: logAndroidAuto( - "onCarConfigurationChanged did not load the map because the map is not attached" + "onCarConfigurationChanged did not load the map because the map is not attached", ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/map/compass/CarCompassRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/compass/CarCompassRenderer.kt similarity index 75% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/map/compass/CarCompassRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/compass/CarCompassRenderer.kt index 657bb037eb9..1ab599b4891 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/map/compass/CarCompassRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/compass/CarCompassRenderer.kt @@ -1,18 +1,18 @@ -package com.mapbox.androidauto.map.compass +package com.mapbox.navigation.ui.androidauto.map.compass +import com.mapbox.maps.CameraChangedCallback import com.mapbox.maps.MapboxExperimental import com.mapbox.maps.MapboxMap import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.maps.extension.androidauto.widgets.CompassWidget -import com.mapbox.maps.plugin.delegates.listeners.OnCameraChangeListener @OptIn(MapboxExperimental::class) class CarCompassRenderer : MapboxCarMapObserver { private var mapboxMap: MapboxMap? = null private var compassWidget: CompassWidget? = null - private val onCameraChangeListener = OnCameraChangeListener { _ -> + private val onCameraChangeListener = CameraChangedCallback { _ -> mapboxMap?.cameraState?.bearing?.toFloat()?.let { compassWidget?.setRotation(-it) } } @@ -22,12 +22,10 @@ class CarCompassRenderer : MapboxCarMapObserver { val mapboxMap = mapboxCarMapSurface.mapSurface.getMapboxMap().also { mapboxMap = it } this.compassWidget = compassWidget mapboxCarMapSurface.mapSurface.addWidget(compassWidget) - mapboxMap.addOnCameraChangeListener(onCameraChangeListener) + mapboxMap.subscribeCameraChanged(onCameraChangeListener) } override fun onDetached(mapboxCarMapSurface: MapboxCarMapSurface) { - mapboxCarMapSurface.mapSurface.getMapboxMap() - .removeOnCameraChangeListener(onCameraChangeListener) compassWidget?.let { mapboxCarMapSurface.mapSurface.removeWidget(it) } compassWidget = null mapboxMap = null diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/logo/CarLogoRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/logo/CarLogoRenderer.kt new file mode 100644 index 00000000000..4c9cc61f562 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/map/logo/CarLogoRenderer.kt @@ -0,0 +1,49 @@ +package com.mapbox.navigation.ui.androidauto.map.logo + +import android.graphics.Rect +import com.mapbox.maps.EdgeInsets +import com.mapbox.maps.MapboxExperimental +import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver +import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface +import com.mapbox.maps.extension.androidauto.widgets.LogoWidget +import com.mapbox.maps.renderer.widget.WidgetPosition + +@OptIn(MapboxExperimental::class) +class CarLogoRenderer : MapboxCarMapObserver { + + private var logoWidget: LogoWidget? = null + + private companion object { + private const val MARGIN_X = 26f + private const val MARGIN_Y = 10f + } + + override fun onAttached(mapboxCarMapSurface: MapboxCarMapSurface) { + // todo logo constructor ignore offsets https://mapbox.atlassian.net/browse/MAPSAND-1544 + val logoWidget = LogoWidget( + mapboxCarMapSurface.carContext, + WidgetPosition { + horizontalAlignment = WidgetPosition.Horizontal.RIGHT + verticalAlignment = WidgetPosition.Vertical.BOTTOM + }, + marginX = MARGIN_X, + marginY = MARGIN_Y, + ).also { logoWidget = it } + mapboxCarMapSurface.mapSurface.addWidget(logoWidget) + } + + override fun onDetached(mapboxCarMapSurface: MapboxCarMapSurface) { + logoWidget?.let { mapboxCarMapSurface.mapSurface.removeWidget(it) } + logoWidget = null + } + + override fun onVisibleAreaChanged(visibleArea: Rect, edgeInsets: EdgeInsets) { + val currentPosition = logoWidget?.getPosition() ?: return + logoWidget?.setPosition( + currentPosition.toBuilder().apply { + offsetX = -MARGIN_X - edgeInsets.right.toFloat() + offsetY = -MARGIN_Y - edgeInsets.bottom.toFloat() + }.build(), + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/ActiveGuidanceScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/ActiveGuidanceScreen.kt new file mode 100644 index 00000000000..4b64ab40fca --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/ActiveGuidanceScreen.kt @@ -0,0 +1,90 @@ +package com.mapbox.navigation.ui.androidauto.navigation + +import androidx.car.app.Screen +import androidx.car.app.model.CarColor +import androidx.car.app.model.Template +import androidx.car.app.navigation.model.NavigationTemplate +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.action.MapboxMapActionStrip +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.location.CarLocationRenderer +import com.mapbox.navigation.ui.androidauto.navigation.roadlabel.CarRoadLabelRenderer +import com.mapbox.navigation.ui.androidauto.navigation.speedlimit.CarSpeedLimitRenderer +import com.mapbox.navigation.ui.androidauto.preview.CarRouteLineRenderer +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * After a route has been selected. This view gives turn-by-turn instructions + * for completing the route. + */ +internal class ActiveGuidanceScreen constructor( + private val mapboxCarContext: MapboxCarContext, +) : Screen(mapboxCarContext.carContext) { + + val carRouteLineRenderer = CarRouteLineRenderer() + val carLocationRenderer = CarLocationRenderer() + val carSpeedLimitRenderer = CarSpeedLimitRenderer(mapboxCarContext) + val carNavigationCamera = CarNavigationCamera( + initialCarCameraMode = CarCameraMode.FOLLOWING, + alternativeCarCameraMode = CarCameraMode.OVERVIEW, + ) + private val carRoadLabelRenderer = CarRoadLabelRenderer() + private val navigationInfoProvider = CarNavigationInfoProvider() + .invalidateOnChange(this) + private val carActiveGuidanceMarkers = CarActiveGuidanceMarkers() + private val mapActionStripBuilder = MapboxMapActionStrip(this, carNavigationCamera) + private val carArrivalTrigger = CarArrivalTrigger() + + init { + logAndroidAuto("ActiveGuidanceScreen constructor") + lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onResume(owner: LifecycleOwner) { + logAndroidAuto("ActiveGuidanceScreen onResume") + mapboxCarContext.mapboxCarMap.registerObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carRoadLabelRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.setGestureHandler( + carNavigationCamera.gestureHandler, + ) + mapboxCarContext.mapboxCarMap.registerObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carActiveGuidanceMarkers) + mapboxCarContext.mapboxCarMap.registerObserver(navigationInfoProvider) + MapboxNavigationApp.registerObserver(carArrivalTrigger) + } + + override fun onPause(owner: LifecycleOwner) { + logAndroidAuto("ActiveGuidanceScreen onPause") + mapboxCarContext.mapboxCarMap.unregisterObserver(carRoadLabelRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.setGestureHandler(null) + mapboxCarContext.mapboxCarMap.unregisterObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carActiveGuidanceMarkers) + mapboxCarContext.mapboxCarMap.unregisterObserver(navigationInfoProvider) + MapboxNavigationApp.unregisterObserver(carArrivalTrigger) + } + }, + ) + } + + @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) + override fun onGetTemplate(): Template { + logAndroidAuto("ActiveGuidanceScreen onGetTemplate") + return NavigationTemplate.Builder() + .setBackgroundColor(CarColor.PRIMARY) + .setActionStrip( + mapboxCarContext.options.actionStripProvider + .getActionStrip(this, MapboxScreen.ACTIVE_GUIDANCE), + ) + .setMapActionStrip(mapActionStripBuilder.build()) + .apply { navigationInfoProvider.setNavigationInfo(this) } + .build() + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarActiveGuidanceMarkers.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarActiveGuidanceMarkers.kt similarity index 75% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarActiveGuidanceMarkers.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarActiveGuidanceMarkers.kt index 428820187b2..8b8bf63e99a 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarActiveGuidanceMarkers.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarActiveGuidanceMarkers.kt @@ -1,21 +1,20 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation -import com.mapbox.androidauto.internal.extensions.getStyle -import com.mapbox.androidauto.internal.extensions.styleFlow -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.placeslistonmap.PlacesListOnMapLayerUtil -import com.mapbox.androidauto.routes.CarRoutesProvider -import com.mapbox.androidauto.routes.NavigationCarRoutesProvider import com.mapbox.geojson.Feature import com.mapbox.geojson.FeatureCollection import com.mapbox.maps.Style import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.ui.androidauto.internal.extensions.getStyle +import com.mapbox.navigation.ui.androidauto.internal.extensions.styleFlow +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapLayerUtil +import com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider +import com.mapbox.navigation.ui.androidauto.routes.NavigationCarRoutesProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @@ -28,7 +27,7 @@ class CarActiveGuidanceMarkers( private fun updateMarkers(style: Style, routes: List) { val features = routes.take(1) - .mapNotNull { it.routeOptions.coordinatesList().lastOrNull() } + .mapNotNull { it.directionsRoute.routeOptions()?.coordinatesList()?.lastOrNull() } .map { Feature.fromGeometry(it) } placesLayerUtil.updatePlacesListOnMapLayer(style, FeatureCollection.fromFeatures(features)) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarArrivalTrigger.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarArrivalTrigger.kt similarity index 85% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarArrivalTrigger.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarArrivalTrigger.kt index 77287e11035..cca39918757 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarArrivalTrigger.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarArrivalTrigger.kt @@ -1,14 +1,14 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.navigation.base.trip.model.RouteLegProgress import com.mapbox.navigation.base.trip.model.RouteProgress import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.arrival.ArrivalObserver import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager /** * When attached this will observe when the final destination is reached and change the car app diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarCameraMode.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarCameraMode.kt new file mode 100644 index 00000000000..60e71be6398 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarCameraMode.kt @@ -0,0 +1,7 @@ +package com.mapbox.navigation.ui.androidauto.navigation + +enum class CarCameraMode { + IDLE, + FOLLOWING, + OVERVIEW, +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarDistanceFormatter.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatter.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarDistanceFormatter.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatter.kt index 32afd4b5a5a..742bb013b25 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarDistanceFormatter.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatter.kt @@ -1,17 +1,17 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import android.text.SpannableString import androidx.car.app.model.Distance import androidx.car.app.model.Template import androidx.car.app.navigation.model.RoutingInfo import androidx.car.app.navigation.model.TravelEstimate -import com.mapbox.androidauto.internal.extensions.mapboxNavigationForward import com.mapbox.navigation.base.formatter.DistanceFormatter import com.mapbox.navigation.base.formatter.DistanceFormatterOptions import com.mapbox.navigation.base.options.NavigationOptions import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.internal.extensions.mapboxNavigationForward /** * Object for formatting distances. Set the [DistanceFormatterOptions] through the diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarDistanceFormatterDelegate.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatterDelegate.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarDistanceFormatterDelegate.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatterDelegate.kt index eebfe769eb9..5faed8fdf69 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarDistanceFormatterDelegate.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatterDelegate.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.annotation.VisibleForTesting import androidx.car.app.model.Distance @@ -17,7 +17,7 @@ internal class CarDistanceFormatterDelegate( ) { fun carDistance( - distanceMeters: Double + distanceMeters: Double, ): Distance = when (unitType) { UnitType.IMPERIAL -> carDistanceImperial(distanceMeters, roundingIncrement) UnitType.METRIC -> carDistanceMetric(distanceMeters, roundingIncrement) @@ -32,7 +32,7 @@ internal class CarDistanceFormatterDelegate( val roundedDistance = formatDistanceAndSuffixForSmallUnit( distanceMeters, roundingIncrement, - TurfConstants.UNIT_FEET + TurfConstants.UNIT_FEET, ) Distance.create(roundedDistance.toDouble(), Distance.UNIT_FEET) } @@ -54,7 +54,7 @@ internal class CarDistanceFormatterDelegate( val roundedDistance = formatDistanceAndSuffixForSmallUnit( distanceMeters, roundingIncrement, - TurfConstants.UNIT_METERS + TurfConstants.UNIT_METERS, ) Distance.create(roundedDistance.toDouble(), Distance.UNIT_METERS) } @@ -70,7 +70,7 @@ internal class CarDistanceFormatterDelegate( private fun formatDistanceAndSuffixForSmallUnit( distance: Double, roundingIncrement: Int, - roundingDistanceUnit: String + roundingDistanceUnit: String, ): Int { if (distance < 0) { return 0 @@ -79,7 +79,7 @@ internal class CarDistanceFormatterDelegate( val distanceUnit = TurfConversion.convertLength( distance, TurfConstants.UNIT_METERS, - roundingDistanceUnit + roundingDistanceUnit, ) val roundedValue = if (roundingIncrement > 0) { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarLocationsOverviewCamera.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarLocationsOverviewCamera.kt similarity index 92% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarLocationsOverviewCamera.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarLocationsOverviewCamera.kt index 9d9abf7becf..e9a64231090 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarLocationsOverviewCamera.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarLocationsOverviewCamera.kt @@ -1,9 +1,8 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import android.graphics.Rect -import android.location.Location import androidx.annotation.UiThread -import com.mapbox.androidauto.internal.logAndroidAuto +import com.mapbox.common.location.Location import com.mapbox.geojson.Point import com.mapbox.maps.CameraOptions import com.mapbox.maps.EdgeInsets @@ -15,6 +14,7 @@ import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.LocationMatcherResult import com.mapbox.navigation.core.trip.session.LocationObserver +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto import com.mapbox.navigation.ui.maps.camera.NavigationCamera import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSource import com.mapbox.navigation.ui.maps.camera.transition.NavigationCameraTransitionOptions @@ -22,7 +22,7 @@ import com.mapbox.navigation.ui.maps.camera.transition.NavigationCameraTransitio class CarLocationsOverviewCamera( private val initialCameraOptions: CameraOptions = CameraOptions.Builder() .zoom(DEFAULT_INITIAL_ZOOM) - .build() + .build(), ) : MapboxCarMapObserver { internal var mapboxCarMapSurface: MapboxCarMapSurface? = null @@ -38,7 +38,7 @@ class CarLocationsOverviewCamera( private val locationObserver = object : LocationObserver { override fun onNewRawLocation(rawLocation: Location) { - // not handled + // no-op } override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { @@ -54,7 +54,7 @@ class CarLocationsOverviewCamera( .build() navigationCamera.requestNavigationCameraToOverview( - stateTransitionOptions = instantTransition + stateTransitionOptions = instantTransition, ) } } @@ -79,12 +79,12 @@ class CarLocationsOverviewCamera( it.setCamera(initialCameraOptions) } viewportDataSource = MapboxNavigationViewportDataSource( - mapboxCarMapSurface.mapSurface.getMapboxMap() + mapboxCarMapSurface.mapSurface.getMapboxMap(), ) navigationCamera = NavigationCamera( mapboxMap, mapboxCarMapSurface.mapSurface.camera, - viewportDataSource + viewportDataSource, ) MapboxNavigationApp.registerObserver(navigationObserver) @@ -98,7 +98,7 @@ class CarLocationsOverviewCamera( edgeInsets.top + OVERVIEW_PADDING, edgeInsets.left + OVERVIEW_PADDING, edgeInsets.bottom + OVERVIEW_PADDING, - edgeInsets.right + OVERVIEW_PADDING + edgeInsets.right + OVERVIEW_PADDING, ) viewportDataSource.evaluate() diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationCamera.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationCamera.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationCamera.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationCamera.kt index 57bc6d2b908..a8f0f8e5324 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationCamera.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationCamera.kt @@ -1,12 +1,7 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import android.graphics.Rect -import android.location.Location import androidx.annotation.UiThread -import com.mapbox.androidauto.internal.RendererUtils.dpToPx -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.routes.CarRoutesProvider -import com.mapbox.androidauto.routes.NavigationCarRoutesProvider import com.mapbox.maps.CameraOptions import com.mapbox.maps.EdgeInsets import com.mapbox.maps.ScreenCoordinate @@ -22,6 +17,10 @@ import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.LocationMatcherResult import com.mapbox.navigation.core.trip.session.LocationObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver +import com.mapbox.navigation.ui.androidauto.internal.RendererUtils.dpToPx +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider +import com.mapbox.navigation.ui.androidauto.routes.NavigationCarRoutesProvider import com.mapbox.navigation.ui.maps.camera.NavigationCamera import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSource import com.mapbox.navigation.ui.maps.camera.transition.NavigationCameraTransitionOptions @@ -30,7 +29,6 @@ import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlin.properties.Delegates @@ -51,7 +49,7 @@ class CarNavigationCamera( private val carRoutesProvider: CarRoutesProvider = NavigationCarRoutesProvider(), private val initialCameraOptions: CameraOptions? = CameraOptions.Builder() .zoom(DEFAULT_INITIAL_ZOOM) - .build() + .build(), ) : MapboxCarMapObserver { private var mapboxCarMapSurface: MapboxCarMapSurface? = null @@ -77,8 +75,8 @@ class CarNavigationCamera( private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - // not handled + override fun onNewRawLocation(rawLocation: com.mapbox.common.location.Location) { + // no-op } override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { @@ -96,6 +94,7 @@ class CarNavigationCamera( CarCameraMode.FOLLOWING -> navigationCamera.requestNavigationCameraToFollowing( stateTransitionOptions = instantTransition, ) + CarCameraMode.OVERVIEW -> navigationCamera.requestNavigationCameraToOverview( stateTransitionOptions = instantTransition, ) @@ -129,7 +128,7 @@ class CarNavigationCamera( mapboxCarMapSurface: MapboxCarMapSurface, visibleCenter: ScreenCoordinate, distanceX: Float, - distanceY: Float + distanceY: Float, ) { updateCameraMode(CarCameraMode.IDLE) super.onScroll(mapboxCarMapSurface, visibleCenter, distanceX, distanceY) @@ -139,7 +138,7 @@ class CarNavigationCamera( mapboxCarMapSurface: MapboxCarMapSurface, focusX: Float, focusY: Float, - scaleFactor: Float + scaleFactor: Float, ) { updateCameraMode(CarCameraMode.IDLE) val fromZoom = mapboxCarMapSurface.mapSurface.getMapboxMap().cameraState.zoom @@ -156,7 +155,7 @@ class CarNavigationCamera( coroutineScope = MainScope() this.mapboxCarMapSurface = mapboxCarMapSurface this.followingPaddingPx = mapboxCarMapSurface.carContext.dpToPx( - FOLLOWING_OVERVIEW_PADDING_DP + FOLLOWING_OVERVIEW_PADDING_DP, ) this.overviewPaddingPx = mapboxCarMapSurface.carContext.dpToPx(OVERVIEW_PADDING_DP) logAndroidAuto("CarNavigationCamera loaded $mapboxCarMapSurface") @@ -164,12 +163,12 @@ class CarNavigationCamera( val mapboxMap = mapboxCarMapSurface.mapSurface.getMapboxMap() initialCameraOptions?.let { mapboxMap.setCamera(it) } viewportDataSource = MapboxNavigationViewportDataSource( - mapboxCarMapSurface.mapSurface.getMapboxMap() + mapboxCarMapSurface.mapSurface.getMapboxMap(), ) navigationCamera = NavigationCamera( mapboxMap, mapboxCarMapSurface.mapSurface.camera, - viewportDataSource + viewportDataSource, ) MapboxNavigationApp.registerObserver(navigationObserver) @@ -194,7 +193,7 @@ class CarNavigationCamera( edgeInsets.top + overviewPaddingPx, edgeInsets.left + overviewPaddingPx, edgeInsets.bottom + overviewPaddingPx, - edgeInsets.right + overviewPaddingPx + edgeInsets.right + overviewPaddingPx, ) val visibleHeight = visibleArea.bottom - visibleArea.top @@ -202,7 +201,7 @@ class CarNavigationCamera( edgeInsets.top + followingPaddingPx, edgeInsets.left + followingPaddingPx, edgeInsets.bottom + visibleHeight * BOTTOM_FOLLOWING_FRACTION, - edgeInsets.right + followingPaddingPx + edgeInsets.right + followingPaddingPx, ) viewportDataSource.evaluate() diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationEtaMapper.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationEtaMapper.kt similarity index 84% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationEtaMapper.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationEtaMapper.kt index 997bf168d57..cc51b7e4b94 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationEtaMapper.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationEtaMapper.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.car.app.model.CarColor import androidx.car.app.model.DateTimeWithZone import androidx.car.app.navigation.model.TravelEstimate import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.ui.tripprogress.api.MapboxTripProgressApi -import com.mapbox.navigation.ui.tripprogress.model.TripProgressUpdateValue +import com.mapbox.navigation.tripdata.progress.api.MapboxTripProgressApi +import com.mapbox.navigation.tripdata.progress.model.TripProgressUpdateValue import java.util.TimeZone import java.util.concurrent.TimeUnit diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfo.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfo.kt similarity index 91% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfo.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfo.kt index 9cc1d1bebde..c3682f50496 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfo.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfo.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.car.app.navigation.model.NavigationTemplate import androidx.car.app.navigation.model.TravelEstimate diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfoMapper.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoMapper.kt similarity index 76% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfoMapper.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoMapper.kt index 58071b71271..3c5815fcbf8 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfoMapper.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoMapper.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import android.content.Context import android.text.SpannableStringBuilder @@ -7,23 +7,23 @@ import androidx.car.app.navigation.model.NavigationTemplate import androidx.car.app.navigation.model.RoutingInfo import androidx.car.app.navigation.model.Step import androidx.core.graphics.drawable.IconCompat -import com.mapbox.androidauto.navigation.lanes.CarLanesImageRenderer -import com.mapbox.androidauto.navigation.lanes.useMapboxLaneGuidance -import com.mapbox.androidauto.navigation.maneuver.CarManeuverIconRenderer -import com.mapbox.androidauto.navigation.maneuver.CarManeuverInstructionRenderer -import com.mapbox.androidauto.navigation.maneuver.CarManeuverMapper import com.mapbox.bindgen.Expected import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.ui.maneuver.model.Component -import com.mapbox.navigation.ui.maneuver.model.Maneuver -import com.mapbox.navigation.ui.maneuver.model.ManeuverError -import com.mapbox.navigation.ui.maneuver.model.ManeuverExitOptions -import com.mapbox.navigation.ui.maneuver.model.ManeuverPrimaryOptions -import com.mapbox.navigation.ui.maneuver.model.ManeuverSecondaryOptions -import com.mapbox.navigation.ui.maneuver.model.ManeuverSubOptions -import com.mapbox.navigation.ui.maneuver.view.MapboxExitText +import com.mapbox.navigation.tripdata.maneuver.model.Component +import com.mapbox.navigation.tripdata.maneuver.model.Maneuver +import com.mapbox.navigation.tripdata.maneuver.model.ManeuverError +import com.mapbox.navigation.tripdata.shield.model.RouteShield +import com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImageRenderer +import com.mapbox.navigation.ui.androidauto.navigation.lanes.useMapboxLaneGuidance +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconRenderer +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverInstructionRenderer +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverMapper +import com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverExitOptions +import com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverPrimaryOptions +import com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSecondaryOptions +import com.mapbox.navigation.ui.androidauto.ui.maneuver.model.ManeuverSubOptions +import com.mapbox.navigation.ui.androidauto.ui.maneuver.view.MapboxExitText import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionValue -import com.mapbox.navigation.ui.shield.model.RouteShield /** * The car library provides an [NavigationTemplate.NavigationInfo] interface to show @@ -34,7 +34,7 @@ class CarNavigationInfoMapper( private val context: Context, private val carManeuverInstructionRenderer: CarManeuverInstructionRenderer, private val carManeuverIconRenderer: CarManeuverIconRenderer, - private val carLanesImageGenerator: CarLanesImageRenderer + private val carLanesImageGenerator: CarLanesImageRenderer, ) { private val primaryExitOptions = ManeuverPrimaryOptions.Builder().build().exitOptions @@ -46,7 +46,7 @@ class CarNavigationInfoMapper( expectedManeuvers: Expected>, routeShields: List, routeProgress: RouteProgress, - junctionValue: JunctionValue? = null + junctionValue: JunctionValue? = null, ): NavigationTemplate.NavigationInfo? { val currentStepProgress = routeProgress.currentLegProgress?.currentStepProgress val distanceRemaining = currentStepProgress?.distanceRemaining ?: return null @@ -60,7 +60,7 @@ class CarNavigationInfoMapper( primary.componentList, routeShields, primaryExitOptions, - primary.modifier + primary.modifier, ) val instruction = SpannableStringBuilder.valueOf(primaryInstruction) maneuver.secondary?.let { secondary -> @@ -69,7 +69,7 @@ class CarNavigationInfoMapper( secondary.componentList, routeShields, secondaryExitOptions, - secondary.modifier + secondary.modifier, ) instruction.append(System.lineSeparator()) instruction.append(secondaryInstruction) @@ -89,11 +89,11 @@ class CarNavigationInfoMapper( } private fun RoutingInfo.Builder.withOptionalJunctionImage( - junctionValue: JunctionValue? + junctionValue: JunctionValue?, ) = apply { junctionValue?.also { val carIcon = CarIcon.Builder( - IconCompat.createWithBitmap(it.bitmap) + IconCompat.createWithBitmap(it.bitmap), ).build() setJunctionImage(carIcon) } @@ -101,7 +101,7 @@ class CarNavigationInfoMapper( private fun RoutingInfo.Builder.withOptionalNextStep( maneuver: Maneuver, - routeShields: List + routeShields: List, ) = apply { maneuver.sub?.let { subManeuver -> val nextCarManeuver = @@ -113,7 +113,7 @@ class CarNavigationInfoMapper( subManeuver.componentList, routeShields, subExitOptions, - subManeuver.modifier + subManeuver.modifier, ) val nextStep = Step.Builder(instruction) .setManeuver(nextCarManeuver.build()) @@ -137,7 +137,7 @@ class CarNavigationInfoMapper( shields, exitView, modifier, - IMAGE_HEIGHT + IMAGE_HEIGHT, ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfoProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoProvider.kt similarity index 91% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfoProvider.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoProvider.kt index cf87782c7aa..b7c789d5cfc 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/CarNavigationInfoProvider.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoProvider.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.annotation.VisibleForTesting import androidx.car.app.CarContext @@ -6,8 +6,6 @@ import androidx.car.app.Screen import androidx.car.app.navigation.model.NavigationTemplate import androidx.car.app.navigation.model.TravelEstimate import androidx.lifecycle.lifecycleScope -import com.mapbox.androidauto.internal.extensions.mapboxNavigationForward -import com.mapbox.androidauto.internal.logAndroidAuto import com.mapbox.api.directions.v5.models.BannerInstructions import com.mapbox.bindgen.Expected import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver @@ -17,12 +15,14 @@ import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maneuver.model.Maneuver -import com.mapbox.navigation.ui.maneuver.model.ManeuverError +import com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.tripdata.maneuver.model.Maneuver +import com.mapbox.navigation.tripdata.maneuver.model.ManeuverError +import com.mapbox.navigation.tripdata.shield.model.RouteShield +import com.mapbox.navigation.ui.androidauto.internal.extensions.mapboxNavigationForward +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto import com.mapbox.navigation.ui.maps.guidance.junction.api.MapboxJunctionApi import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionValue -import com.mapbox.navigation.ui.shield.model.RouteShield import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -39,7 +39,7 @@ import kotlinx.coroutines.flow.onEach class CarNavigationInfoProvider @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) internal constructor( - private val services: CarNavigationInfoServices + private val services: CarNavigationInfoServices, ) : MapboxCarMapObserver { /** * Public constructor and the internal constructor is for unit testing. @@ -125,7 +125,7 @@ internal constructor( private fun onAttached(mapboxNavigation: MapboxNavigation) { val carContext = carContext!! maneuverApi = services.maneuverApi(mapboxNavigation) - junctionApi = services.junctionApi(mapboxNavigation) + junctionApi = services.junctionApi() navigationEtaMapper = services.carNavigationEtaMapper(carContext) navigationInfoMapper = services.carNavigationInfoMapper(carContext, mapboxNavigation) mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) @@ -153,7 +153,6 @@ internal constructor( maneuverApi?.getRoadShields( mapUserStyleObserver.userId, mapUserStyleObserver.styleId, - MapboxNavigationApp.current()?.navigationOptions?.accessToken, maneuvers, ) { shieldResult -> val newShields = shieldResult.mapNotNull { it.value?.shield } @@ -179,7 +178,7 @@ internal constructor( navigationInfo = navigationInfoMapper ?.mapNavigationInfo(maneuvers, currentShields, routeProgress, currentJunctionValue), destinationTravelEstimate = navigationEtaMapper - ?.getDestinationTravelEstimate(routeProgress) + ?.getDestinationTravelEstimate(routeProgress), ) } } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoServices.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoServices.kt new file mode 100644 index 00000000000..05371239211 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoServices.kt @@ -0,0 +1,54 @@ +package com.mapbox.navigation.ui.androidauto.navigation + +import androidx.car.app.CarContext +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter +import com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.tripdata.progress.api.MapboxTripProgressApi +import com.mapbox.navigation.tripdata.progress.model.TripProgressUpdateFormatter +import com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImageRenderer +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconOptions +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconRenderer +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverInstructionRenderer +import com.mapbox.navigation.ui.maps.guidance.junction.api.MapboxJunctionApi + +/** + * This class helps with unit testing. + */ +internal class CarNavigationInfoServices { + + fun carNavigationEtaMapper( + carContext: CarContext, + ): CarNavigationEtaMapper { + val mapboxTripProgressApi = mapboxTripProgressApi(carContext) + return CarNavigationEtaMapper(mapboxTripProgressApi) + } + + fun carNavigationInfoMapper( + carContext: CarContext, + mapboxNavigation: MapboxNavigation, + ): CarNavigationInfoMapper { + return CarNavigationInfoMapper( + mapboxNavigation.navigationOptions.applicationContext, + CarManeuverInstructionRenderer(), + CarManeuverIconRenderer(CarManeuverIconOptions.Builder(carContext).build()), + CarLanesImageRenderer(carContext), + ) + } + + fun maneuverApi(mapboxNavigation: MapboxNavigation): MapboxManeuverApi { + val options = mapboxNavigation.navigationOptions.distanceFormatterOptions + val distanceFormatter = MapboxDistanceFormatter(options) + return MapboxManeuverApi(distanceFormatter) + } + + fun junctionApi(): MapboxJunctionApi { + return MapboxJunctionApi() + } + + fun mapUserStyleObserver() = MapUserStyleObserver() + + private fun mapboxTripProgressApi(carContext: CarContext): MapboxTripProgressApi { + return MapboxTripProgressApi(TripProgressUpdateFormatter.Builder(carContext).build()) + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/MapUserStyleObserver.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/MapUserStyleObserver.kt similarity index 96% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/MapUserStyleObserver.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/MapUserStyleObserver.kt index 438cfe246fb..a2d6debd7c4 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/MapUserStyleObserver.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/MapUserStyleObserver.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/MapboxCarNavigationManager.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/MapboxCarNavigationManager.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/MapboxCarNavigationManager.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/MapboxCarNavigationManager.kt index 6220d6e8f18..7298d527fa0 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/MapboxCarNavigationManager.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/MapboxCarNavigationManager.kt @@ -1,22 +1,22 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.car.app.CarContext import androidx.car.app.navigation.NavigationManager import androidx.car.app.navigation.NavigationManagerCallback import androidx.car.app.navigation.model.Trip -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.internal.logAndroidAutoFailure -import com.mapbox.androidauto.navigation.maneuver.CarManeuverMapper -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager -import com.mapbox.androidauto.telemetry.MapboxCarTelemetry import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.directions.session.RoutesObserver import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAutoFailure +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverMapper +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager +import com.mapbox.navigation.ui.androidauto.telemetry.MapboxCarTelemetry import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -26,7 +26,7 @@ import kotlinx.coroutines.flow.StateFlow * This is needed to keep the vehicle cluster display updated. */ class MapboxCarNavigationManager internal constructor( - carContext: CarContext + carContext: CarContext, ) : MapboxNavigationObserver { private val navigationManager: NavigationManager by lazy { @@ -85,7 +85,7 @@ class MapboxCarNavigationManager internal constructor( this.mapboxNavigation = mapboxNavigation carTelemetry.onAttached(mapboxNavigation) val distanceFormatter = MapboxDistanceFormatter( - mapboxNavigation.navigationOptions.distanceFormatterOptions + mapboxNavigation.navigationOptions.distanceFormatterOptions, ) maneuverApi = MapboxManeuverApi(distanceFormatter) navigationManager.setNavigationManagerCallback(navigationManagerCallback) @@ -115,7 +115,7 @@ class MapboxCarNavigationManager internal constructor( if (e.message == UPDATE_TRIP_NAVIGATION_NOT_STARTED) { logAndroidAuto( "$LOG_CATEGORY calling NavigationManager.navigationStarted(). Use " + - "MapboxNavigation.stopTripSession in order to stop navigation." + "MapboxNavigation.stopTripSession in order to stop navigation.", ) navigationManager.navigationStarted() navigationManager.updateTrip(trip) diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/audioguidance/AppAudioGuidanceUi.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/audioguidance/AppAudioGuidanceUi.kt new file mode 100644 index 00000000000..2113490b5b4 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/audioguidance/AppAudioGuidanceUi.kt @@ -0,0 +1,32 @@ +package com.mapbox.navigation.ui.androidauto.navigation.audioguidance + +import androidx.annotation.UiThread +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import com.mapbox.navigation.voice.api.MapboxAudioGuidance +import com.mapbox.navigation.voice.api.MapboxAudioGuidanceState + +/** + * Use this function to mute the audio guidance for a lifecycle. + */ +@UiThread +fun Lifecycle.muteAudioGuidance() { + addObserver( + object : DefaultLifecycleObserver { + lateinit var initialState: MapboxAudioGuidanceState + override fun onResume(owner: LifecycleOwner) { + with(MapboxAudioGuidance.getRegisteredInstance()) { + initialState = stateFlow().value + mute() + } + } + + override fun onPause(owner: LifecycleOwner) { + if (!initialState.isMuted) { + MapboxAudioGuidance.getRegisteredInstance().unmute() + } + } + }, + ) +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/audioguidance/CarAudioGuidanceAction.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/audioguidance/CarAudioGuidanceAction.kt similarity index 90% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/audioguidance/CarAudioGuidanceAction.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/audioguidance/CarAudioGuidanceAction.kt index 0b3994f369e..a8cd3d33a33 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/audioguidance/CarAudioGuidanceAction.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/audioguidance/CarAudioGuidanceAction.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.audioguidance +package com.mapbox.navigation.ui.androidauto.navigation.audioguidance import androidx.annotation.DrawableRes import androidx.car.app.Screen @@ -6,10 +6,9 @@ import androidx.car.app.model.Action import androidx.car.app.model.CarIcon import androidx.core.graphics.drawable.IconCompat import androidx.lifecycle.coroutineScope -import com.mapbox.androidauto.R -import com.mapbox.navigation.ui.voice.api.MapboxAudioGuidance +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.voice.api.MapboxAudioGuidance import kotlinx.coroutines.Job -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.drop import kotlinx.coroutines.flow.take @@ -61,12 +60,12 @@ class CarAudioGuidanceAction { private fun buildIconAction( screen: Screen, @DrawableRes icon: Int, - onClick: () -> Unit + onClick: () -> Unit, ) = Action.Builder() .setIcon( CarIcon.Builder( - IconCompat.createWithResource(screen.carContext, icon) - ).build() + IconCompat.createWithResource(screen.carContext, icon), + ).build(), ) .setOnClickListener { onClick() } .build() diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIcon.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIcon.kt new file mode 100644 index 00000000000..ba46b8e3386 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIcon.kt @@ -0,0 +1,8 @@ +package com.mapbox.navigation.ui.androidauto.navigation.lanes + +import com.mapbox.navigation.tripdata.maneuver.model.LaneIcon + +data class CarLaneIcon( + val laneIcon: LaneIcon, + val isActive: Boolean, +) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneIconOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIconOptions.kt similarity index 92% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneIconOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIconOptions.kt index 2d910a0cb11..765d8ee8067 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneIconOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIconOptions.kt @@ -1,17 +1,17 @@ -package com.mapbox.androidauto.navigation.lanes +package com.mapbox.navigation.ui.androidauto.navigation.lanes import android.content.Context import android.content.res.Resources import androidx.annotation.StyleRes import androidx.appcompat.view.ContextThemeWrapper -import com.mapbox.androidauto.R +import com.mapbox.navigation.ui.androidauto.R /** * Modify the look and feel of the car lanes. */ class CarLaneIconOptions private constructor( val activeTheme: Resources.Theme, - val notActiveTheme: Resources.Theme + val notActiveTheme: Resources.Theme, ) { /** @@ -54,7 +54,7 @@ class CarLaneIconOptions private constructor( activeTheme = activeTheme ?: defaultTheme(context, DEFAULT_ACTIVE_THEME), notActiveTheme = notActiveTheme - ?: defaultTheme(context, DEFAULT_NOT_ACTIVE_THEME) + ?: defaultTheme(context, DEFAULT_NOT_ACTIVE_THEME), ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneIconRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIconRenderer.kt similarity index 90% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneIconRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIconRenderer.kt index e75de5fd578..381ba0b8b9c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneIconRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneIconRenderer.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.lanes +package com.mapbox.navigation.ui.androidauto.navigation.lanes import android.content.Context import android.graphics.Bitmap @@ -9,7 +9,7 @@ import androidx.car.app.model.CarIcon import androidx.car.app.navigation.model.Step import androidx.core.graphics.drawable.IconCompat import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat -import com.mapbox.androidauto.internal.RendererUtils.dpToPx +import com.mapbox.navigation.ui.androidauto.internal.RendererUtils.dpToPx /** * This class will take multiple [CarLaneIcon] objects which were created from @@ -17,7 +17,7 @@ import com.mapbox.androidauto.internal.RendererUtils.dpToPx * android auto's [Step.Builder.setLanesImage] and [Step.Builder.addLane]. */ internal class CarLaneIconRenderer( - private val context: Context + private val context: Context, ) { private val widthPx by lazy { context.dpToPx(LANE_IMAGE_WIDTH) } private val heightPx by lazy { context.dpToPx(LANE_IMAGE_HEIGHT) } @@ -32,7 +32,7 @@ internal class CarLaneIconRenderer( fun renderLanesIcons( carLaneIcons: List, @ColorInt background: Int, - options: CarLaneIconOptions + options: CarLaneIconOptions, ): CarIcon { carLaneBitmap.eraseColor(background) @@ -41,7 +41,7 @@ internal class CarLaneIconRenderer( val vectorDrawable = VectorDrawableCompat.create( context.resources, laneIcon.laneIcon.drawableResId, - options.theme(laneIcon.isActive) + options.theme(laneIcon.isActive), )!! val iconBounds = calculateBounds(index, carLaneIcons.size) vectorDrawable.bounds = iconBounds @@ -53,7 +53,7 @@ internal class CarLaneIconRenderer( } return CarIcon.Builder( - IconCompat.createWithBitmap(carLaneBitmap) + IconCompat.createWithBitmap(carLaneBitmap), ).build() } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneMapper.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneMapper.kt similarity index 84% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneMapper.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneMapper.kt index 4dbe2b60fd9..aa31c3ba537 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLaneMapper.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneMapper.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.navigation.lanes +package com.mapbox.navigation.ui.androidauto.navigation.lanes import androidx.car.app.navigation.model.Lane import androidx.car.app.navigation.model.LaneDirection internal class CarLaneMapper { - fun mapLanes(laneGuidance: com.mapbox.navigation.ui.maneuver.model.Lane): List { + fun mapLanes(laneGuidance: com.mapbox.navigation.tripdata.maneuver.model.Lane): List { return laneGuidance.allLanes.map { laneIndicator -> val laneBuilder = Lane.Builder() laneIndicator.directions.forEach { indicator -> @@ -28,7 +28,7 @@ internal class CarLaneMapper { "right" to LaneDirection.SHAPE_NORMAL_RIGHT, "slight right" to LaneDirection.SHAPE_SLIGHT_RIGHT, "sharp right" to LaneDirection.SHAPE_SHARP_RIGHT, - "uturn" to LaneDirection.SHAPE_U_TURN_LEFT + "uturn" to LaneDirection.SHAPE_U_TURN_LEFT, ) } } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImage.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImage.kt new file mode 100644 index 00000000000..39c284be7ab --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImage.kt @@ -0,0 +1,12 @@ +package com.mapbox.navigation.ui.androidauto.navigation.lanes + +import androidx.car.app.model.CarIcon +import androidx.car.app.navigation.model.Lane + +/** + * Represents everything that the android auto library needs to show lane guidance. + */ +class CarLanesImage internal constructor( + val lanes: List, + val carIcon: CarIcon, +) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLanesImageRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImageRenderer.kt similarity index 84% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLanesImageRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImageRenderer.kt index 84565024943..2d82e2852e5 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/lanes/CarLanesImageRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLanesImageRenderer.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.lanes +package com.mapbox.navigation.ui.androidauto.navigation.lanes import android.content.Context import android.graphics.Color @@ -6,9 +6,8 @@ import android.util.LruCache import androidx.annotation.ColorInt import androidx.car.app.model.CarIcon import androidx.car.app.navigation.model.Step -import com.mapbox.navigation.ui.maneuver.api.MapboxLaneIconsApi -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maneuver.model.Lane +import com.mapbox.navigation.tripdata.maneuver.api.MapboxLaneIconsApi +import com.mapbox.navigation.tripdata.maneuver.model.Lane /** * This class generates a [CarLanesImage] needed for the lane guidance in android auto. @@ -17,7 +16,7 @@ class CarLanesImageRenderer( context: Context, @ColorInt val background: Int = Color.TRANSPARENT, - val options: CarLaneIconOptions = CarLaneIconOptions.Builder().build(context) + val options: CarLaneIconOptions = CarLaneIconOptions.Builder().build(context), ) { private val carLaneIconRenderer = CarLaneIconRenderer(context) private val laneIconsApi = MapboxLaneIconsApi() @@ -38,7 +37,7 @@ class CarLanesImageRenderer( val img = CarLanesImage( lanes = carLaneIconMapper.mapLanes(lane), - carIcon = lanesCarIcon(lane) + carIcon = lanesCarIcon(lane), ) cache.put(lane, img) img @@ -50,13 +49,13 @@ class CarLanesImageRenderer( val laneIcon = laneIconsApi.getTurnLane(laneIndicator) CarLaneIcon( laneIcon, - laneIndicator.isActive + laneIndicator.isActive, ) } return carLaneIconRenderer.renderLanesIcons( carLaneIcons, background, - options + options, ) } } @@ -66,7 +65,7 @@ class CarLanesImageRenderer( */ fun Step.Builder.useMapboxLaneGuidance( imageGenerator: CarLanesImageRenderer, - laneGuidance: Lane? + laneGuidance: Lane?, ) = apply { val lanesImage = imageGenerator.renderLanesImage(laneGuidance) if (lanesImage != null) { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconOptions.kt similarity index 92% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconOptions.kt index 07407a62b5f..8a5a4ca9abd 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconOptions.kt @@ -1,10 +1,10 @@ -package com.mapbox.androidauto.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import android.content.Context import android.graphics.Color import androidx.annotation.ColorInt import androidx.annotation.StyleRes -import com.mapbox.androidauto.R +import com.mapbox.navigation.ui.androidauto.R /** * Modify the look of the maneuver icon. @@ -14,7 +14,7 @@ class CarManeuverIconOptions private constructor( @ColorInt val background: Int = Color.TRANSPARENT, @StyleRes - val styleRes: Int + val styleRes: Int, ) { /** @@ -68,7 +68,7 @@ class CarManeuverIconOptions private constructor( * @param context optional Context for applying default themes. */ class Builder( - private val context: Context + private val context: Context, ) { @ColorInt private var background: Int? = null @@ -97,7 +97,7 @@ class CarManeuverIconOptions private constructor( return CarManeuverIconOptions( context = context, background = background ?: DEFAULT_BACKGROUND, - styleRes = styleRes ?: DEFAULT_THEME + styleRes = styleRes ?: DEFAULT_THEME, ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconRenderer.kt similarity index 80% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconRenderer.kt index f5680193f13..09a653f128c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconRenderer.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import android.graphics.Bitmap import android.graphics.Canvas @@ -7,18 +7,18 @@ import androidx.appcompat.view.ContextThemeWrapper import androidx.car.app.model.CarIcon import androidx.core.graphics.drawable.IconCompat import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat -import com.mapbox.androidauto.internal.RendererUtils.dpToPx -import com.mapbox.androidauto.internal.logAndroidAutoFailure -import com.mapbox.navigation.ui.maneuver.api.MapboxTurnIconsApi -import com.mapbox.navigation.ui.maneuver.model.PrimaryManeuver -import com.mapbox.navigation.ui.maneuver.model.SubManeuver -import com.mapbox.navigation.ui.maneuver.model.TurnIconResources +import com.mapbox.navigation.tripdata.maneuver.api.MapboxTurnIconsApi +import com.mapbox.navigation.tripdata.maneuver.model.PrimaryManeuver +import com.mapbox.navigation.tripdata.maneuver.model.SubManeuver +import com.mapbox.navigation.tripdata.maneuver.model.TurnIconResources +import com.mapbox.navigation.ui.androidauto.internal.RendererUtils.dpToPx +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAutoFailure /** * Create icons from the Mapbox navigation maneuvers. */ class CarManeuverIconRenderer( - private val options: CarManeuverIconOptions + private val options: CarManeuverIconOptions, ) { private var turnIconResources = TurnIconResources.Builder().build() private val turnIconsApi = MapboxTurnIconsApi(turnIconResources) @@ -28,7 +28,7 @@ class CarManeuverIconRenderer( maneuver.type, maneuver.degrees, maneuver.modifier, - maneuver.drivingSide + maneuver.drivingSide, ) } @@ -37,7 +37,7 @@ class CarManeuverIconRenderer( maneuver.type, maneuver.degrees, maneuver.modifier, - maneuver.drivingSide + maneuver.drivingSide, ) } @@ -45,13 +45,13 @@ class CarManeuverIconRenderer( type: String?, degrees: Double?, modifier: String?, - drivingSide: String? + drivingSide: String?, ): CarIcon? { val maneuverTurnIcon = turnIconsApi.generateTurnIcon(type, degrees?.toFloat(), modifier, drivingSide) .onError { logAndroidAutoFailure( - "CarManeuverIconRenderer renderManeuverIcon error ${it.errorMessage}" + "CarManeuverIconRenderer renderManeuverIcon error ${it.errorMessage}", ) } .value @@ -64,7 +64,7 @@ class CarManeuverIconRenderer( val vectorDrawable = VectorDrawableCompat.create( options.context.resources, drawableId, - ContextThemeWrapper(options.context, options.styleRes).theme + ContextThemeWrapper(options.context, options.styleRes).theme, )!! val px = options.context.dpToPx(CAR_ICON_DIMEN_DP) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverInstructionRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverInstructionRenderer.kt similarity index 82% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverInstructionRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverInstructionRenderer.kt index 3102cdf3181..303b4344540 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverInstructionRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverInstructionRenderer.kt @@ -1,17 +1,17 @@ -package com.mapbox.androidauto.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import android.text.SpannableStringBuilder import android.text.Spanned import androidx.car.app.model.CarIcon import androidx.car.app.model.CarIconSpan import androidx.core.graphics.drawable.IconCompat -import com.mapbox.navigation.ui.maneuver.model.Component -import com.mapbox.navigation.ui.maneuver.model.DelimiterComponentNode -import com.mapbox.navigation.ui.maneuver.model.ExitNumberComponentNode -import com.mapbox.navigation.ui.maneuver.model.RoadShieldComponentNode -import com.mapbox.navigation.ui.maneuver.model.TextComponentNode -import com.mapbox.navigation.ui.maneuver.view.MapboxExitText -import com.mapbox.navigation.ui.shield.model.RouteShield +import com.mapbox.navigation.tripdata.maneuver.model.Component +import com.mapbox.navigation.tripdata.maneuver.model.DelimiterComponentNode +import com.mapbox.navigation.tripdata.maneuver.model.ExitNumberComponentNode +import com.mapbox.navigation.tripdata.maneuver.model.RoadShieldComponentNode +import com.mapbox.navigation.tripdata.maneuver.model.TextComponentNode +import com.mapbox.navigation.tripdata.shield.model.RouteShield +import com.mapbox.navigation.ui.androidauto.ui.maneuver.view.MapboxExitText import com.mapbox.navigation.ui.utils.internal.SvgUtil import java.io.ByteArrayInputStream @@ -53,8 +53,8 @@ class CarManeuverInstructionRenderer { getRenderedShield( node.text, desiredHeight, - getShieldToRender(node, shields) - ) + getShieldToRender(node, shields), + ), ).append(" ") } is DelimiterComponentNode -> { @@ -80,7 +80,7 @@ class CarManeuverInstructionRenderer { private fun getShieldToRender( node: RoadShieldComponentNode, - roadShields: List + roadShields: List, ): RouteShield? { return node.mapboxShield?.let { shield -> roadShields.find { it is RouteShield.MapboxDesignedShield && it.compareWith(shield) } @@ -92,7 +92,7 @@ class CarManeuverInstructionRenderer { private fun getRenderedShield( shieldText: String, desiredHeight: Int, - shield: RouteShield? + shield: RouteShield?, ): CharSequence { val roadShieldBuilder = SpannableStringBuilder(shieldText) val shieldIcon = shield?.byteArray @@ -105,7 +105,7 @@ class CarManeuverInstructionRenderer { carIconSpan, 0, shieldText.length, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE, ) } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverMapper.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverMapper.kt similarity index 80% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverMapper.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverMapper.kt index 0c092ba1478..2262261023f 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverMapper.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverMapper.kt @@ -1,17 +1,17 @@ -package com.mapbox.androidauto.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import androidx.car.app.model.DateTimeWithZone import androidx.car.app.navigation.model.Maneuver import androidx.car.app.navigation.model.Step import androidx.car.app.navigation.model.TravelEstimate import androidx.car.app.navigation.model.Trip -import com.mapbox.androidauto.navigation.CarDistanceFormatter import com.mapbox.api.directions.v5.models.ManeuverModifier import com.mapbox.api.directions.v5.models.StepManeuver import com.mapbox.bindgen.Expected import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maneuver.model.ManeuverError +import com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.tripdata.maneuver.model.ManeuverError +import com.mapbox.navigation.ui.androidauto.navigation.CarDistanceFormatter import java.util.Calendar import java.util.TimeZone @@ -19,7 +19,7 @@ object CarManeuverMapper { fun from( routeProgress: RouteProgress, - maneuverApi: MapboxManeuverApi + maneuverApi: MapboxManeuverApi, ): Trip { val etaAsCalendar = Calendar.getInstance().also { it.add(Calendar.SECOND, routeProgress.durationRemaining.toInt()) @@ -27,7 +27,7 @@ object CarManeuverMapper { val eta = TravelEstimate.Builder( CarDistanceFormatter.carDistance(routeProgress.distanceRemaining.toDouble()), - DateTimeWithZone.create(etaAsCalendar.timeInMillis, TimeZone.getDefault()) + DateTimeWithZone.create(etaAsCalendar.timeInMillis, TimeZone.getDefault()), ).build() val maneuvers = maneuverApi.getManeuvers(routeProgress) val maneuver = from(maneuvers).build() @@ -36,28 +36,28 @@ object CarManeuverMapper { } fun from( - expected: Expected> + exp: Expected>, ): Maneuver.Builder { - return expected.mapValue { + return exp.mapValue { when (it.isEmpty()) { true -> Maneuver.Builder(Maneuver.TYPE_UNKNOWN) false -> from( it.first().primary.type, it.first().primary.modifier, - it.first().primary.degrees + it.first().primary.degrees, ) } }.fold({ Maneuver.Builder(Maneuver.TYPE_UNKNOWN) }, { it - }) + },) } fun from( maneuverType: String?, maneuverModifier: String?, - degrees: Double? = null + degrees: Double? = null, ): Maneuver.Builder { return when (maneuverType) { StepManeuver.TURN -> mapTurn(maneuverModifier) @@ -73,7 +73,8 @@ object CarManeuverMapper { StepManeuver.EXIT_ROTARY, StepManeuver.EXIT_ROUNDABOUT, StepManeuver.ROUNDABOUT_TURN, - StepManeuver.ROUNDABOUT -> mapRoundabout(maneuverModifier, degrees) + StepManeuver.ROUNDABOUT, + -> mapRoundabout(maneuverModifier, degrees) StepManeuver.NOTIFICATION -> mapEmptyManeuverType(maneuverModifier) else -> mapEmptyManeuverType(maneuverModifier) } @@ -113,10 +114,12 @@ object CarManeuverMapper { ManeuverModifier.STRAIGHT -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_STRAIGHT) ManeuverModifier.RIGHT, ManeuverModifier.SLIGHT_RIGHT, - ManeuverModifier.SHARP_RIGHT -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_RIGHT) + ManeuverModifier.SHARP_RIGHT, + -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_RIGHT) ManeuverModifier.LEFT, ManeuverModifier.SLIGHT_LEFT, - ManeuverModifier.SHARP_LEFT -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_LEFT) + ManeuverModifier.SHARP_LEFT, + -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_LEFT) else -> Maneuver.Builder(Maneuver.TYPE_UNKNOWN) } } @@ -124,13 +127,16 @@ object CarManeuverMapper { private fun mapMerge(maneuverModifier: String?): Maneuver.Builder { return when (maneuverModifier) { ManeuverModifier.UTURN, - ManeuverModifier.STRAIGHT -> Maneuver.Builder(Maneuver.TYPE_MERGE_SIDE_UNSPECIFIED) + ManeuverModifier.STRAIGHT, + -> Maneuver.Builder(Maneuver.TYPE_MERGE_SIDE_UNSPECIFIED) ManeuverModifier.RIGHT, ManeuverModifier.SLIGHT_RIGHT, - ManeuverModifier.SHARP_RIGHT -> Maneuver.Builder(Maneuver.TYPE_MERGE_RIGHT) + ManeuverModifier.SHARP_RIGHT, + -> Maneuver.Builder(Maneuver.TYPE_MERGE_RIGHT) ManeuverModifier.LEFT, ManeuverModifier.SLIGHT_LEFT, - ManeuverModifier.SHARP_LEFT -> Maneuver.Builder(Maneuver.TYPE_MERGE_LEFT) + ManeuverModifier.SHARP_LEFT, + -> Maneuver.Builder(Maneuver.TYPE_MERGE_LEFT) else -> Maneuver.Builder(Maneuver.TYPE_MERGE_SIDE_UNSPECIFIED) } } @@ -138,7 +144,8 @@ object CarManeuverMapper { private fun mapOnRamp(maneuverModifier: String?): Maneuver.Builder { return when (maneuverModifier) { ManeuverModifier.UTURN, - ManeuverModifier.STRAIGHT -> Maneuver.Builder(Maneuver.TYPE_STRAIGHT) + ManeuverModifier.STRAIGHT, + -> Maneuver.Builder(Maneuver.TYPE_STRAIGHT) ManeuverModifier.RIGHT -> Maneuver.Builder(Maneuver.TYPE_ON_RAMP_NORMAL_RIGHT) ManeuverModifier.SLIGHT_RIGHT -> Maneuver.Builder(Maneuver.TYPE_ON_RAMP_SLIGHT_RIGHT) ManeuverModifier.SHARP_RIGHT -> Maneuver.Builder(Maneuver.TYPE_ON_RAMP_SHARP_RIGHT) @@ -154,10 +161,12 @@ object CarManeuverMapper { ManeuverModifier.UTURN, ManeuverModifier.STRAIGHT, ManeuverModifier.RIGHT, - ManeuverModifier.SHARP_RIGHT -> Maneuver.Builder(Maneuver.TYPE_OFF_RAMP_NORMAL_RIGHT) + ManeuverModifier.SHARP_RIGHT, + -> Maneuver.Builder(Maneuver.TYPE_OFF_RAMP_NORMAL_RIGHT) ManeuverModifier.SLIGHT_RIGHT -> Maneuver.Builder(Maneuver.TYPE_OFF_RAMP_SLIGHT_RIGHT) ManeuverModifier.LEFT, - ManeuverModifier.SHARP_LEFT -> Maneuver.Builder(Maneuver.TYPE_OFF_RAMP_NORMAL_LEFT) + ManeuverModifier.SHARP_LEFT, + -> Maneuver.Builder(Maneuver.TYPE_OFF_RAMP_NORMAL_LEFT) ManeuverModifier.SLIGHT_LEFT -> Maneuver.Builder(Maneuver.TYPE_OFF_RAMP_SLIGHT_LEFT) else -> Maneuver.Builder(Maneuver.TYPE_UNKNOWN) } @@ -169,10 +178,12 @@ object CarManeuverMapper { ManeuverModifier.STRAIGHT, ManeuverModifier.RIGHT, ManeuverModifier.SLIGHT_RIGHT, - ManeuverModifier.SHARP_RIGHT -> Maneuver.Builder(Maneuver.TYPE_FORK_RIGHT) + ManeuverModifier.SHARP_RIGHT, + -> Maneuver.Builder(Maneuver.TYPE_FORK_RIGHT) ManeuverModifier.LEFT, ManeuverModifier.SLIGHT_LEFT, - ManeuverModifier.SHARP_LEFT -> Maneuver.Builder(Maneuver.TYPE_FORK_LEFT) + ManeuverModifier.SHARP_LEFT, + -> Maneuver.Builder(Maneuver.TYPE_FORK_LEFT) else -> Maneuver.Builder(Maneuver.TYPE_UNKNOWN) } } @@ -180,13 +191,16 @@ object CarManeuverMapper { private fun mapEndOfRoad(maneuverModifier: String?): Maneuver.Builder { return when (maneuverModifier) { ManeuverModifier.UTURN, - ManeuverModifier.STRAIGHT -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_STRAIGHT) + ManeuverModifier.STRAIGHT, + -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_STRAIGHT) ManeuverModifier.RIGHT, ManeuverModifier.SLIGHT_RIGHT, - ManeuverModifier.SHARP_RIGHT -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_RIGHT) + ManeuverModifier.SHARP_RIGHT, + -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_RIGHT) ManeuverModifier.LEFT, ManeuverModifier.SLIGHT_LEFT, - ManeuverModifier.SHARP_LEFT -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_LEFT) + ManeuverModifier.SHARP_LEFT, + -> Maneuver.Builder(Maneuver.TYPE_DESTINATION_LEFT) else -> Maneuver.Builder(Maneuver.TYPE_UNKNOWN) } } @@ -200,7 +214,8 @@ object CarManeuverMapper { ManeuverModifier.SHARP_RIGHT, ManeuverModifier.LEFT, ManeuverModifier.SLIGHT_LEFT, - ManeuverModifier.SHARP_LEFT -> { + ManeuverModifier.SHARP_LEFT, + -> { // TODO fix hardcoded roundabout exit number https://github.com/mapbox/mapbox-navigation-android/issues/4855 if (degrees != null) { Maneuver.Builder(Maneuver.TYPE_ROUNDABOUT_ENTER_AND_EXIT_CCW_WITH_ANGLE) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelBitmapRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelBitmapRenderer.kt similarity index 95% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelBitmapRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelBitmapRenderer.kt index 4a4785337a7..dc2b008b047 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelBitmapRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelBitmapRenderer.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.roadlabel +package com.mapbox.navigation.ui.androidauto.navigation.roadlabel import android.content.res.Resources import android.graphics.Bitmap @@ -6,7 +6,7 @@ import android.graphics.Canvas import android.graphics.Paint import android.graphics.Rect import com.mapbox.navigation.base.road.model.RoadComponent -import com.mapbox.navigation.ui.shield.model.RouteShield +import com.mapbox.navigation.tripdata.shield.model.RouteShield import kotlin.math.roundToInt /** @@ -21,7 +21,7 @@ internal class CarRoadLabelBitmapRenderer { resources: Resources, road: List, shields: List, - options: CarRoadLabelOptions = CarRoadLabelOptions.default + options: CarRoadLabelOptions = CarRoadLabelOptions.default, ): Bitmap? { if (road.isEmpty()) return null textPaint.color = options.textColor @@ -42,7 +42,7 @@ internal class CarRoadLabelBitmapRenderer { val bitmap = Bitmap.createBitmap( width + TEXT_PADDING * 2, height + TEXT_PADDING * 2, - Bitmap.Config.ARGB_8888 + Bitmap.Config.ARGB_8888, ) val textBaselineY = TEXT_PADDING + (height - textPaint.descent() - textPaint.ascent()) / 2 val shieldCenterY = TEXT_PADDING + height / 2f @@ -57,7 +57,7 @@ internal class CarRoadLabelBitmapRenderer { private fun measureRoadLabel( resources: Resources, road: List, - shields: List + shields: List, ): List { return road.map { component -> getShieldBitmap(resources, component, shields) @@ -101,7 +101,7 @@ internal class CarRoadLabelBitmapRenderer { cardHeight, LABEL_RADIUS, LABEL_RADIUS, - labelPaint + labelPaint, ) } @@ -118,10 +118,11 @@ internal class CarRoadLabelBitmapRenderer { component.value, x + component.rect.width() / 2f, textBaselineY, - textPaint + textPaint, ) component.rect.width() } + is Component.Shield -> { val shieldY = shieldCenterY - component.bitmap.height / 2f drawBitmap(component.bitmap, x.toFloat(), shieldY, null) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelOptions.kt similarity index 95% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelOptions.kt index e8c9d135a28..403ccc9b5d2 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelOptions.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.roadlabel +package com.mapbox.navigation.ui.androidauto.navigation.roadlabel import android.graphics.Color import androidx.annotation.ColorInt @@ -14,7 +14,7 @@ class CarRoadLabelOptions private constructor( @ColorInt val shadowColor: Int?, @ColorInt - val textColor: Int + val textColor: Int, ) { /** @@ -73,7 +73,7 @@ class CarRoadLabelOptions private constructor( backgroundColor = backgroundColor, roundedLabelColor = roundedLabelColor, shadowColor = shadowColor, - textColor = textColor + textColor = textColor, ) } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelRenderer.kt similarity index 79% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelRenderer.kt index 93ff2fd5e20..774cde8046e 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadLabelRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadLabelRenderer.kt @@ -1,13 +1,10 @@ -package com.mapbox.androidauto.navigation.roadlabel +package com.mapbox.navigation.ui.androidauto.navigation.roadlabel import android.graphics.Bitmap import android.graphics.Color import android.graphics.Rect import androidx.car.app.CarContext import androidx.car.app.Screen -import com.mapbox.androidauto.internal.extensions.styleFlow -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.navigation.MapUserStyleObserver import com.mapbox.maps.EdgeInsets import com.mapbox.maps.MapboxExperimental import com.mapbox.maps.extension.androidauto.MapboxCarMap @@ -17,8 +14,11 @@ import com.mapbox.maps.renderer.widget.BitmapWidget import com.mapbox.maps.renderer.widget.WidgetPosition import com.mapbox.navigation.base.road.model.RoadComponent import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp -import com.mapbox.navigation.ui.shield.api.MapboxRouteShieldApi -import com.mapbox.navigation.ui.shield.model.RouteShield +import com.mapbox.navigation.tripdata.shield.api.MapboxRouteShieldApi +import com.mapbox.navigation.tripdata.shield.model.RouteShield +import com.mapbox.navigation.ui.androidauto.internal.extensions.styleFlow +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.navigation.MapUserStyleObserver import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel @@ -47,8 +47,11 @@ class CarRoadLabelRenderer : MapboxCarMapObserver { super.onAttached(mapboxCarMapSurface) val roadLabelWidget = BitmapWidget( EMPTY_BITMAP, - WidgetPosition(WidgetPosition.Horizontal.CENTER, WidgetPosition.Vertical.BOTTOM), - marginY = 10f, + WidgetPosition { + horizontalAlignment = WidgetPosition.Horizontal.CENTER + verticalAlignment = WidgetPosition.Vertical.BOTTOM + offsetY = -MARGIN_Y + }, ).also { roadLabelWidget = it } mapboxCarMapSurface.mapSurface.addWidget(roadLabelWidget) val carContext = mapboxCarMapSurface.carContext @@ -66,7 +69,7 @@ class CarRoadLabelRenderer : MapboxCarMapObserver { carContext.resources, roadNameObserver.currentRoad, roadNameObserver.currentShields, - roadLabelOptions(carContext) + roadLabelOptions(carContext), ) roadLabelWidget.updateBitmap(bitmap ?: EMPTY_BITMAP) }.launchIn(scope) @@ -88,8 +91,16 @@ class CarRoadLabelRenderer : MapboxCarMapObserver { } override fun onVisibleAreaChanged(visibleArea: Rect, edgeInsets: EdgeInsets) { - val translationX = (edgeInsets.left - edgeInsets.right) / 2 - roadLabelWidget?.setTranslation(translationX.toFloat(), -edgeInsets.bottom.toFloat()) + val currentPosition = roadLabelWidget?.getPosition() ?: return + val transitOffsetX = (edgeInsets.left - edgeInsets.right) / 2 + roadLabelWidget?.setPosition( + currentPosition.toBuilder() + .apply { + offsetX = transitOffsetX.toFloat() + offsetY = -MARGIN_Y - edgeInsets.bottom.toFloat() + } + .build(), + ) } private fun roadLabelOptions(carContext: CarContext): CarRoadLabelOptions = @@ -100,6 +111,7 @@ class CarRoadLabelRenderer : MapboxCarMapObserver { } private companion object { + private const val MARGIN_Y = 10f private val DARK_OPTIONS = CarRoadLabelOptions.Builder() .shadowColor(null) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadNameObserver.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadNameObserver.kt similarity index 78% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadNameObserver.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadNameObserver.kt index b933eca5153..b85239ea890 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/roadlabel/CarRoadNameObserver.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/roadlabel/CarRoadNameObserver.kt @@ -1,19 +1,18 @@ -package com.mapbox.androidauto.navigation.roadlabel +package com.mapbox.navigation.ui.androidauto.navigation.roadlabel -import android.location.Location -import com.mapbox.androidauto.navigation.MapUserStyleObserver import com.mapbox.navigation.base.road.model.RoadComponent import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.LocationMatcherResult import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.ui.shield.api.MapboxRouteShieldApi -import com.mapbox.navigation.ui.shield.model.RouteShield -import com.mapbox.navigation.ui.shield.model.RouteShieldCallback +import com.mapbox.navigation.tripdata.shield.api.MapboxRouteShieldApi +import com.mapbox.navigation.tripdata.shield.model.RouteShield +import com.mapbox.navigation.tripdata.shield.model.RouteShieldCallback +import com.mapbox.navigation.ui.androidauto.navigation.MapUserStyleObserver internal abstract class CarRoadNameObserver( private val routeShieldApi: MapboxRouteShieldApi, - private val mapUserStyleObserver: MapUserStyleObserver + private val mapUserStyleObserver: MapUserStyleObserver, ) : MapboxNavigationObserver { var currentRoad = emptyList() @@ -31,8 +30,8 @@ internal abstract class CarRoadNameObserver( private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - // Do nothing + override fun onNewRawLocation(rawLocation: com.mapbox.common.location.Location) { + // no-op } override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { @@ -44,7 +43,6 @@ internal abstract class CarRoadNameObserver( locationMatcherResult.road, mapUserStyleObserver.userId, mapUserStyleObserver.styleId, - mapboxNavigation?.navigationOptions?.accessToken, roadNameShieldsCallback, ) } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitRenderer.kt new file mode 100644 index 00000000000..2afe15b6dd3 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitRenderer.kt @@ -0,0 +1,182 @@ +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit + +import android.graphics.Rect +import androidx.annotation.VisibleForTesting +import com.mapbox.maps.EdgeInsets +import com.mapbox.maps.MapboxExperimental +import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver +import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface +import com.mapbox.navigation.base.formatter.DistanceFormatterOptions +import com.mapbox.navigation.base.formatter.UnitType +import com.mapbox.navigation.base.speed.model.SpeedLimitSign +import com.mapbox.navigation.base.speed.model.SpeedUnit +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.core.trip.session.LocationMatcherResult +import com.mapbox.navigation.core.trip.session.LocationObserver +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarOptions +import com.mapbox.navigation.ui.androidauto.internal.extensions.mapboxNavigationForward +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlin.math.roundToInt + +/** + * Create a speed limit sign. This class is demonstrating how to create a renderer. + * To Create a new speed limit sign experience, try creating a new class. + */ +@OptIn(MapboxExperimental::class) +class CarSpeedLimitRenderer +@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) +internal constructor( + private val services: CarSpeedLimitServices, + private val options: MapboxCarOptions, +) : MapboxCarMapObserver { + + /** + * Public constructor and the internal constructor is for unit testing. + */ + constructor(mapboxCarContext: MapboxCarContext) : this( + CarSpeedLimitServices(), + mapboxCarContext.options, + ) + + @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) + internal var speedLimitWidget: SpeedLimitWidget? = null + + private var distanceFormatterOptions: DistanceFormatterOptions? = null + private val navigationObserver = mapboxNavigationForward(this::onAttached, this::onDetached) + + private val locationObserver = object : LocationObserver { + override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { + updateSpeed(locationMatcherResult) + } + + override fun onNewRawLocation(rawLocation: com.mapbox.common.location.Location) { + // no op + } + } + + private lateinit var scope: CoroutineScope + + private fun onAttached(mapboxNavigation: MapboxNavigation) { + distanceFormatterOptions = mapboxNavigation + .navigationOptions.distanceFormatterOptions + mapboxNavigation.registerLocationObserver(locationObserver) + } + + private fun onDetached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.unregisterLocationObserver(locationObserver) + distanceFormatterOptions = null + } + + private fun updateSpeed(locationMatcherResult: LocationMatcherResult) { + val speedLimitOptions = options.speedLimitOptions.value + val signFormat = speedLimitOptions.forcedSignFormat + ?: locationMatcherResult.speedLimitInfo.sign + val threshold = speedLimitOptions.warningThreshold + when (distanceFormatterOptions!!.unitType) { + UnitType.IMPERIAL -> { + val speedLimit = when (locationMatcherResult.speedLimitInfo.unit) { + SpeedUnit.MILES_PER_HOUR -> + locationMatcherResult.speedLimitInfo.speed?.toDouble() + + SpeedUnit.KILOMETERS_PER_HOUR -> + locationMatcherResult.speedLimitInfo.speed?.toDouble()?.kmphToMph() + + SpeedUnit.METERS_PER_SECOND -> + locationMatcherResult.speedLimitInfo.speed?.toDouble()?.mtpsToMph() + } + speedLimitWidget?.update( + speedLimit = speedLimit?.roundToInt(), + speed = locationMatcherResult.enhancedLocation.speed + ?.mtpsToMph() + ?.roundToInt() + ?: 0, + signFormat = signFormat, + threshold = threshold, + ) + } + + UnitType.METRIC -> { + val speedLimit = when (locationMatcherResult.speedLimitInfo.unit) { + SpeedUnit.MILES_PER_HOUR -> + locationMatcherResult.speedLimitInfo.speed?.toDouble()?.mphToKmph() + + SpeedUnit.KILOMETERS_PER_HOUR -> + locationMatcherResult.speedLimitInfo.speed?.toDouble() + + SpeedUnit.METERS_PER_SECOND -> + locationMatcherResult.speedLimitInfo.speed?.toDouble()?.mtpsToKmph() + }?.roundToInt() + speedLimitWidget?.update( + speedLimit = speedLimit, + speed = locationMatcherResult.enhancedLocation.speed + ?.mtpsToKmph() + ?.roundToInt() + ?: 0, + signFormat = signFormat, + threshold = threshold, + ) + } + } + } + + override fun onAttached(mapboxCarMapSurface: MapboxCarMapSurface) { + logAndroidAuto("CarSpeedLimitRenderer carMapSurface loaded") + val signFormat = options.speedLimitOptions.value.forcedSignFormat + ?: SpeedLimitSign.MUTCD + val speedLimitWidget = services.speedLimitWidget(signFormat).also { speedLimitWidget = it } + mapboxCarMapSurface.mapSurface.addWidget(speedLimitWidget) + MapboxNavigationApp.registerObserver(navigationObserver) + scope = MainScope() + options.speedLimitOptions + .onEach { speedLimitWidget.update(it.forcedSignFormat, it.warningThreshold) } + .launchIn(scope) + } + + override fun onDetached(mapboxCarMapSurface: MapboxCarMapSurface) { + logAndroidAuto("CarSpeedLimitRenderer carMapSurface detached") + MapboxNavigationApp.unregisterObserver(navigationObserver) + speedLimitWidget?.let { mapboxCarMapSurface.mapSurface.removeWidget(it) } + speedLimitWidget = null + scope.cancel() + } + + override fun onVisibleAreaChanged(visibleArea: Rect, edgeInsets: EdgeInsets) { + val currentPosition = speedLimitWidget?.getPosition() ?: return + speedLimitWidget?.setPosition( + currentPosition.toBuilder() + .apply { + offsetX = -SpeedLimitWidget.MARGIN_X - edgeInsets.right.toFloat() + offsetY = -SpeedLimitWidget.MARGIN_Y - edgeInsets.bottom.toFloat() + }.build(), + ) + } + + private companion object { + /** + * Convert meters per second to kilometers per hour. + */ + private fun Double.mtpsToKmph(): Double = this * 3.6 + + /** + * Convert meters per second to miles per hour. + */ + private fun Double.mtpsToMph(): Double = this * 2.23694 + + /** + * Convert kilometers per hour to miles per hour. + */ + private fun Double.kmphToMph(): Double = this / 1.60934 + + /** + * Convert miles per hour to kilometers per hour. + */ + private fun Double.mphToKmph(): Double = this * 1.60934 + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/CarSpeedLimitServices.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitServices.kt similarity index 83% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/CarSpeedLimitServices.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitServices.kt index 450218dc816..c7b351b0534 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/CarSpeedLimitServices.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitServices.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import com.mapbox.maps.MapboxExperimental import com.mapbox.navigation.base.speed.model.SpeedLimitSign diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/MutcdSpeedLimitDrawable.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/MutcdSpeedLimitDrawable.kt similarity index 98% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/MutcdSpeedLimitDrawable.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/MutcdSpeedLimitDrawable.kt index 2ce969d8b8c..f2f0337c9b4 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/MutcdSpeedLimitDrawable.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/MutcdSpeedLimitDrawable.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import android.graphics.Canvas import android.graphics.Color diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitBitmapRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitBitmapRenderer.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitBitmapRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitBitmapRenderer.kt index 85a97783675..ac76452faca 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitBitmapRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitBitmapRenderer.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import android.graphics.Bitmap import android.graphics.Canvas @@ -9,7 +9,7 @@ internal class SpeedLimitBitmapRenderer { private val mutcdDrawable: SpeedLimitDrawable = MutcdSpeedLimitDrawable() private val viennaDrawable: SpeedLimitDrawable = ViennaSpeedLimitDrawable() private val bitmapPool: LruBitmapPool = LruBitmapPool( - MutcdSpeedLimitDrawable.BITMAP_BYTE_SIZE + ViennaSpeedLimitDrawable.BITMAP_BYTE_SIZE + MutcdSpeedLimitDrawable.BITMAP_BYTE_SIZE + ViennaSpeedLimitDrawable.BITMAP_BYTE_SIZE, ) fun getBitmap( @@ -37,12 +37,12 @@ internal class SpeedLimitBitmapRenderer { SpeedLimitSign.MUTCD -> get( MutcdSpeedLimitDrawable.WIDTH, MutcdSpeedLimitDrawable.HEIGHT, - Bitmap.Config.ARGB_8888 + Bitmap.Config.ARGB_8888, ) SpeedLimitSign.VIENNA -> get( ViennaSpeedLimitDrawable.WIDTH, ViennaSpeedLimitDrawable.HEIGHT, - Bitmap.Config.ARGB_8888 + Bitmap.Config.ARGB_8888, ) } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitDrawable.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitDrawable.kt similarity index 97% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitDrawable.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitDrawable.kt index b64670e78cc..e91d4438745 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitDrawable.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitDrawable.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import android.graphics.Color import android.graphics.ColorFilter diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitOptions.kt similarity index 95% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitOptions.kt index 0f8d8090e01..69b8ceae49b 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitOptions.kt @@ -1,6 +1,5 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit -import com.mapbox.navigation.base.speed.model.SpeedLimit import com.mapbox.navigation.base.speed.model.SpeedLimitSign /** diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitWidget.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitWidget.kt similarity index 81% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitWidget.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitWidget.kt index 2c6362f5e1b..0f3dc9d7605 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitWidget.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitWidget.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import com.mapbox.maps.MapboxExperimental import com.mapbox.maps.renderer.widget.BitmapWidget @@ -13,20 +13,19 @@ class SpeedLimitWidget private constructor( initialSignFormat: SpeedLimitSign, private val bitmapRenderer: SpeedLimitBitmapRenderer, position: WidgetPosition, - marginX: Float, - marginY: Float ) : BitmapWidget( bitmap = bitmapRenderer.getBitmap(initialSignFormat), - position, - marginX, - marginY + originalPosition = position, ) { constructor(initialSignFormat: SpeedLimitSign = SpeedLimitSign.MUTCD) : this( initialSignFormat = initialSignFormat, bitmapRenderer = SpeedLimitBitmapRenderer(), - position = WidgetPosition(WidgetPosition.Horizontal.RIGHT, WidgetPosition.Vertical.BOTTOM), - marginX = 14f, - marginY = 30f, + position = WidgetPosition { + horizontalAlignment = WidgetPosition.Horizontal.RIGHT + verticalAlignment = WidgetPosition.Vertical.BOTTOM + offsetX = -MARGIN_X + offsetY = -MARGIN_Y + }, ) private var lastSpeedLimit: Int? = null @@ -34,6 +33,11 @@ class SpeedLimitWidget private constructor( private var lastSignFormat = initialSignFormat private var lastWarn = false + internal companion object { + internal const val MARGIN_X = 14f + internal const val MARGIN_Y = 30f + } + fun update(speedLimit: Int?, speed: Int, signFormat: SpeedLimitSign?, threshold: Int) { val newSignFormat = signFormat ?: lastSignFormat val warn = speedLimit != null && speed - threshold >= speedLimit diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/ViennaSpeedLimitDrawable.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/ViennaSpeedLimitDrawable.kt similarity index 98% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/ViennaSpeedLimitDrawable.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/ViennaSpeedLimitDrawable.kt index fedf3957e3e..8653c00e2f7 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/navigation/speedlimit/ViennaSpeedLimitDrawable.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/ViennaSpeedLimitDrawable.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import android.graphics.Canvas diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/ActiveGuidanceExtenderUpdater.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/ActiveGuidanceExtenderUpdater.kt similarity index 98% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/ActiveGuidanceExtenderUpdater.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/ActiveGuidanceExtenderUpdater.kt index cfc068967cb..bd077e5b536 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/ActiveGuidanceExtenderUpdater.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/ActiveGuidanceExtenderUpdater.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import android.content.Context import android.graphics.Bitmap @@ -11,7 +11,6 @@ import android.text.TextUtils import android.text.format.DateFormat import androidx.car.app.notification.CarAppExtender import androidx.core.content.ContextCompat -import com.mapbox.androidauto.R import com.mapbox.api.directions.v5.models.BannerInstructions import com.mapbox.api.directions.v5.models.ManeuverModifier import com.mapbox.api.directions.v5.models.StepManeuver @@ -21,6 +20,7 @@ import com.mapbox.navigation.base.internal.maneuver.TurnIconHelper import com.mapbox.navigation.base.internal.time.TimeFormatter import com.mapbox.navigation.base.internal.trip.notification.NotificationTurnIconResources import com.mapbox.navigation.base.trip.model.RouteProgress +import com.mapbox.navigation.ui.androidauto.R import java.util.Calendar internal class ActiveGuidanceExtenderUpdater(private val context: Context) { diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/CarPendingIntentFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/CarPendingIntentFactory.kt new file mode 100644 index 00000000000..2933f7056c1 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/CarPendingIntentFactory.kt @@ -0,0 +1,27 @@ +package com.mapbox.navigation.ui.androidauto.notification + +import android.app.PendingIntent +import android.content.ComponentName +import android.content.Intent +import androidx.car.app.CarAppService +import androidx.car.app.CarContext +import androidx.car.app.notification.CarPendingIntent + +/** + * Created for unit tests. + */ +internal object CarPendingIntentFactory { + fun create( + carContext: CarContext, + carStartAppClass: Class, + ): PendingIntent { + return CarPendingIntent.getCarApp( + carContext, + 0, + Intent(Intent.ACTION_VIEW).setComponent( + ComponentName(carContext, carStartAppClass), + ), + PendingIntent.FLAG_UPDATE_CURRENT, + ) + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/FreeDriveExtenderUpdater.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/FreeDriveExtenderUpdater.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/FreeDriveExtenderUpdater.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/FreeDriveExtenderUpdater.kt index bd5070128e5..4dccfcb150a 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/FreeDriveExtenderUpdater.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/FreeDriveExtenderUpdater.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import androidx.car.app.notification.CarAppExtender import androidx.core.content.ContextCompat -import com.mapbox.androidauto.R +import com.mapbox.navigation.ui.androidauto.R internal class FreeDriveExtenderUpdater(private val context: Context) { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/IdleExtenderUpdater.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/IdleExtenderUpdater.kt similarity index 75% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/IdleExtenderUpdater.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/IdleExtenderUpdater.kt index 73cdb77ed7c..74d64e2ec04 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/IdleExtenderUpdater.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/IdleExtenderUpdater.kt @@ -1,8 +1,8 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import android.content.Context import androidx.car.app.notification.CarAppExtender -import com.mapbox.androidauto.R +import com.mapbox.navigation.ui.androidauto.R internal class IdleExtenderUpdater(private val context: Context) { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/MapboxCarNotification.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotification.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/MapboxCarNotification.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotification.kt index be99587e4ce..ca38c859e2e 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/MapboxCarNotification.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotification.kt @@ -1,11 +1,9 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import androidx.car.app.CarContext import androidx.car.app.model.CarColor import androidx.car.app.notification.CarAppExtender import androidx.core.app.NotificationCompat -import com.mapbox.androidauto.MapboxCarOptions -import com.mapbox.androidauto.R import com.mapbox.navigation.base.TimeFormat import com.mapbox.navigation.base.formatter.DistanceFormatter import com.mapbox.navigation.base.trip.model.RouteProgress @@ -16,6 +14,7 @@ import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.trip.session.NavigationSessionState import com.mapbox.navigation.core.trip.session.NavigationSessionStateObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver +import com.mapbox.navigation.ui.androidauto.MapboxCarOptions /** * Register this observer using [MapboxNavigationApp.registerObserver]. As long as it is @@ -44,7 +43,9 @@ class MapboxCarNotification internal constructor( mapboxNavigation.registerNavigationSessionStateObserver(navigationSessionStateObserver) mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) mapboxNavigation.setTripNotificationInterceptor { notificationBuilder -> - val color = carContext.getColor(R.color.mapbox_notification_blue) + val color = carContext.getColor( + com.mapbox.navigation.base.R.color.mapbox_notification_blue, + ) val formatterOptions = mapboxNavigation.navigationOptions.distanceFormatterOptions val extenderBuilder = getExtenderBuilder( MapboxDistanceFormatter(formatterOptions), @@ -71,7 +72,7 @@ class MapboxCarNotification internal constructor( ): CarAppExtender.Builder { val extenderBuilder = CarAppExtender.Builder() .setColor(color) - .setSmallIcon(R.drawable.mapbox_ic_navigation) + .setSmallIcon(com.mapbox.navigation.ui.base.R.drawable.mapbox_ic_navigation) val carStartAppClass = options.notificationOptions.startAppService if (carStartAppClass != null) { diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/MapboxCarNotificationOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationOptions.kt similarity index 93% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/MapboxCarNotificationOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationOptions.kt index 668f684d918..598ac57823a 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/notification/MapboxCarNotificationOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationOptions.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import androidx.car.app.CarAppService @@ -8,7 +8,7 @@ import androidx.car.app.CarAppService * @param startAppService [CarAppService] */ class MapboxCarNotificationOptions private constructor( - val startAppService: Class? + val startAppService: Class?, ) { /** diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/permissions/NeedsLocationPermissionsScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/permissions/NeedsLocationPermissionsScreen.kt similarity index 80% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/permissions/NeedsLocationPermissionsScreen.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/permissions/NeedsLocationPermissionsScreen.kt index bc51593c2bc..ccd28e9755a 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/permissions/NeedsLocationPermissionsScreen.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/permissions/NeedsLocationPermissionsScreen.kt @@ -1,29 +1,29 @@ -package com.mapbox.androidauto.permissions +package com.mapbox.navigation.ui.androidauto.permissions import androidx.car.app.CarContext import androidx.car.app.Screen import androidx.car.app.model.Action import androidx.car.app.model.MessageTemplate import androidx.car.app.model.Template -import com.mapbox.androidauto.R +import com.mapbox.navigation.ui.androidauto.R /** * Provides instructions for accepting location permissions. */ internal class NeedsLocationPermissionsScreen( - carContext: CarContext + carContext: CarContext, ) : Screen(carContext) { override fun onGetTemplate(): Template { return MessageTemplate.Builder( - carContext.getString(R.string.car_message_location_permissions) + carContext.getString(R.string.car_message_location_permissions), ).setTitle( - carContext.getString(R.string.car_message_location_permissions_title) + carContext.getString(R.string.car_message_location_permissions_title), ).addAction( Action.Builder() .setTitle(carContext.getString(R.string.car_label_ok)) .setOnClickListener { carContext.finishCarApp() - }.build() + }.build(), ).build() } } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlaceMarkerRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlaceMarkerRenderer.kt similarity index 83% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlaceMarkerRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlaceMarkerRenderer.kt index 9f508349932..c20d0651bad 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlaceMarkerRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlaceMarkerRenderer.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.placeslistonmap +package com.mapbox.navigation.ui.androidauto.placeslistonmap import android.content.Context import android.graphics.Bitmap @@ -9,8 +9,8 @@ import androidx.appcompat.view.ContextThemeWrapper import androidx.car.app.model.CarIcon import androidx.core.graphics.drawable.IconCompat import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat -import com.mapbox.androidauto.R -import com.mapbox.androidauto.internal.RendererUtils.dpToPx +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.internal.RendererUtils.dpToPx /** * Render bitmaps that can be shown as markers on the map. @@ -18,12 +18,12 @@ import com.mapbox.androidauto.internal.RendererUtils.dpToPx class PlaceMarkerRenderer( private val context: Context, @ColorInt - private val background: Int = Color.TRANSPARENT + private val background: Int = Color.TRANSPARENT, ) { var bitmap: Bitmap? = null fun renderMarker() = CarIcon.Builder( - IconCompat.createWithBitmap(bitmap()) + IconCompat.createWithBitmap(bitmap()), ).build() private fun bitmap(): Bitmap { @@ -34,7 +34,7 @@ class PlaceMarkerRenderer( val vectorDrawable = VectorDrawableCompat.create( context.resources, MARKER_RESOURCE, - ContextThemeWrapper(context, R.style.CarAppTheme).theme + ContextThemeWrapper(context, R.style.CarAppTheme).theme, )!! val px = context.dpToPx(MARKER_ICON_DIMEN_DP) diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemClickListener.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemClickListener.kt new file mode 100644 index 00000000000..5d746cc7f9a --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemClickListener.kt @@ -0,0 +1,9 @@ +package com.mapbox.navigation.ui.androidauto.placeslistonmap + +import androidx.annotation.UiThread +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord + +@UiThread +interface PlacesListItemClickListener { + fun onItemClick(placeRecord: PlaceRecord) +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListItemMapper.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemMapper.kt similarity index 82% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListItemMapper.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemMapper.kt index 1c3e75b8f17..808e804fc79 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListItemMapper.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemMapper.kt @@ -1,6 +1,5 @@ -package com.mapbox.androidauto.placeslistonmap +package com.mapbox.navigation.ui.androidauto.placeslistonmap -import android.location.Location import android.text.SpannableString import android.text.Spanned import androidx.car.app.model.CarColor @@ -14,21 +13,22 @@ import androidx.car.app.model.Metadata import androidx.car.app.model.Place import androidx.car.app.model.PlaceMarker import androidx.car.app.model.Row -import com.mapbox.androidauto.search.PlaceRecord +import com.mapbox.common.location.Location import com.mapbox.geojson.Point import com.mapbox.navigation.base.formatter.UnitType +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord import com.mapbox.turf.TurfConstants import com.mapbox.turf.TurfMeasurement class PlacesListItemMapper( private val placeMarkerRenderer: PlaceMarkerRenderer, - private val unitType: UnitType + private val unitType: UnitType, ) { fun mapToItemList( anchorLocation: Location, places: List, - itemClickListener: PlacesListItemClickListener? + itemClickListener: PlacesListItemClickListener?, ): ItemList { val listBuilder = ItemList.Builder() places.filter { it.coordinate != null }.forEach { placeRecord -> @@ -36,7 +36,7 @@ class PlacesListItemMapper( val distance: Double = TurfMeasurement.distance( Point.fromLngLat(anchorLocation.longitude, anchorLocation.latitude), placeRecord.coordinate!!, - distanceUnits.second + distanceUnits.second, ) // fixme this was a copy/paste from a sample it should be improved for MB @@ -45,13 +45,13 @@ class PlacesListItemMapper( DistanceSpan.create(Distance.create(distance, distanceUnits.first)), 0, 1, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE, ) description.setSpan( ForegroundCarColorSpan.create(CarColor.BLUE), 0, 1, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE, ) val isBrowsable = false @@ -64,22 +64,22 @@ class PlacesListItemMapper( .setPlace( Place.Builder( CarLocation.create( - Location("").also { + android.location.Location("").also { it.latitude = placeRecord.coordinate.latitude() it.longitude = placeRecord.coordinate.longitude() - } - ) + }, + ), ).setMarker( PlaceMarker.Builder() .setIcon(getCarIcon(), PlaceMarker.TYPE_IMAGE) - .build() - ).build() + .build(), + ).build(), ) - .build() + .build(), ) .setOnClickListener { itemClickListener?.onItemClick(placeRecord) } .setBrowsable(isBrowsable) - .build() + .build(), ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapLayerUtil.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapLayerUtil.kt similarity index 91% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapLayerUtil.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapLayerUtil.kt index 5bd88de00e8..334f86d17cd 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapLayerUtil.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapLayerUtil.kt @@ -1,9 +1,8 @@ -package com.mapbox.androidauto.placeslistonmap +package com.mapbox.navigation.ui.androidauto.placeslistonmap import android.content.res.Resources import android.graphics.BitmapFactory import androidx.annotation.UiThread -import com.mapbox.androidauto.R import com.mapbox.geojson.FeatureCollection import com.mapbox.maps.Style import com.mapbox.maps.extension.style.layers.addLayer @@ -12,6 +11,7 @@ import com.mapbox.maps.extension.style.layers.properties.generated.IconRotationA import com.mapbox.maps.extension.style.sources.generated.GeoJsonSource import com.mapbox.maps.extension.style.sources.generated.geoJsonSource import com.mapbox.maps.extension.style.sources.getSource +import com.mapbox.navigation.ui.androidauto.R @UiThread class PlacesListOnMapLayerUtil { @@ -22,8 +22,8 @@ class PlacesListOnMapLayerUtil { GENERIC_LOCATION_ICON, BitmapFactory.decodeResource( resources, - R.drawable.marker_icon_20px_red // todo replace this hardcoded icon - ) + R.drawable.marker_icon_20px_red, // todo replace this hardcoded icon + ), ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapManager.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapManager.kt similarity index 88% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapManager.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapManager.kt index ebe6d8b0792..6edf4abb30c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapManager.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapManager.kt @@ -1,12 +1,6 @@ -package com.mapbox.androidauto.placeslistonmap +package com.mapbox.navigation.ui.androidauto.placeslistonmap import androidx.car.app.model.ItemList -import com.mapbox.androidauto.internal.extensions.getStyle -import com.mapbox.androidauto.internal.extensions.mapboxNavigationForward -import com.mapbox.androidauto.internal.extensions.styleFlow -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.location.CarLocationProvider -import com.mapbox.androidauto.search.PlaceRecord import com.mapbox.geojson.Feature import com.mapbox.geojson.FeatureCollection import com.mapbox.geojson.Point @@ -15,6 +9,12 @@ import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.internal.extensions.getStyle +import com.mapbox.navigation.ui.androidauto.internal.extensions.mapboxNavigationForward +import com.mapbox.navigation.ui.androidauto.internal.extensions.styleFlow +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.location.CarLocationProvider +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.MainScope @@ -22,7 +22,6 @@ import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -82,7 +81,7 @@ class PlacesListOnMapManager( mapboxNavigation .navigationOptions .distanceFormatterOptions - .unitType + .unitType, ) coroutineScope.launch { @@ -92,7 +91,7 @@ class PlacesListOnMapManager( placesListItemMapper.mapToItemList( currentLocation, placeRecords, - placeClickListener + placeClickListener, ) } ?: ItemList.Builder().build() } @@ -107,7 +106,7 @@ class PlacesListOnMapManager( _placeRecords.value = expectedPlaceRecords.fold( { logAndroidAuto( - "PlacesListOnMapScreen ${it.errorMessage}, ${it.throwable?.stackTrace}" + "PlacesListOnMapScreen ${it.errorMessage}, ${it.throwable?.stackTrace}", ) emptyList() }, diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapProvider.kt new file mode 100644 index 00000000000..e3b051e9d08 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapProvider.kt @@ -0,0 +1,10 @@ +package com.mapbox.navigation.ui.androidauto.placeslistonmap + +import com.mapbox.bindgen.Expected +import com.mapbox.navigation.ui.androidauto.search.GetPlacesError +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord + +interface PlacesListOnMapProvider { + suspend fun getPlaces(): Expected> + fun cancel() +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapScreen.kt new file mode 100644 index 00000000000..96ec686df74 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapScreen.kt @@ -0,0 +1,145 @@ +package com.mapbox.navigation.ui.androidauto.placeslistonmap + +import androidx.annotation.StringRes +import androidx.annotation.UiThread +import androidx.annotation.VisibleForTesting +import androidx.car.app.Screen +import androidx.car.app.model.Action +import androidx.car.app.model.ItemList +import androidx.car.app.model.Template +import androidx.car.app.navigation.model.PlaceListNavigationTemplate +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.internal.extensions.addBackPressedHandler +import com.mapbox.navigation.ui.androidauto.location.CarLocationRenderer +import com.mapbox.navigation.ui.androidauto.navigation.CarLocationsOverviewCamera +import com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRequestCallback +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord +import com.mapbox.navigation.ui.androidauto.search.SearchCarContext +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.launch + +internal class PlacesListOnMapScreen @UiThread constructor( + private val searchCarContext: SearchCarContext, + placesProvider: PlacesListOnMapProvider, + @MapboxScreen.Key private val mapboxScreenKey: String, +) : Screen(searchCarContext.carContext) { + + @VisibleForTesting + var itemList = buildErrorItemList(R.string.car_search_no_results) + + private val carNavigationCamera = CarLocationsOverviewCamera() + private var carLocationRenderer = CarLocationRenderer() + private val placesListOnMapManager = PlacesListOnMapManager(placesProvider) + + init { + addBackPressedHandler { + searchCarContext.mapboxScreenManager.goBack() + } + repeatOnResumed { + placesListOnMapManager.placeRecords.collect { placeRecords -> + onPlaceRecordsChanged(placeRecords) + } + } + repeatOnResumed { + placesListOnMapManager.placeSelected.filterNotNull().collect { placeRecord -> + onPlaceRecordSelected(placeRecord) + } + } + repeatOnResumed { + placesListOnMapManager.itemList.collect { invalidate() } + } + lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onCreate(owner: LifecycleOwner) { + MapboxNavigationApp.registerObserver(searchCarContext.routePreviewRequest) + } + + override fun onDestroy(owner: LifecycleOwner) { + MapboxNavigationApp.unregisterObserver(searchCarContext.routePreviewRequest) + } + + override fun onResume(owner: LifecycleOwner) { + searchCarContext.mapboxCarMap + .registerObserver(carNavigationCamera) + .registerObserver(carLocationRenderer) + .registerObserver(placesListOnMapManager) + } + + override fun onPause(owner: LifecycleOwner) { + super.onPause(owner) + searchCarContext.mapboxCarMap + .unregisterObserver(carNavigationCamera) + .unregisterObserver(carLocationRenderer) + .unregisterObserver(placesListOnMapManager) + } + }, + ) + } + + @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) + override fun onGetTemplate(): Template { + val placesItemList = placesListOnMapManager.itemList.value + return PlaceListNavigationTemplate.Builder() + .setItemList(placesItemList) + .setHeaderAction(Action.BACK) + .setActionStrip( + searchCarContext.mapboxCarContext.options.actionStripProvider + .getActionStrip(this, mapboxScreenKey), + ) + .build() + } + + private fun onPlaceRecordsChanged(placeRecords: List) { + invalidate() + val coordinates = placeRecords.mapNotNull { it.coordinate } + carNavigationCamera.updateWithLocations(coordinates) + } + + private fun onPlaceRecordSelected(placeRecord: PlaceRecord) { + val carRouteRequestCallback = object : CarRoutePreviewRequestCallback { + override fun onRoutesReady(placeRecord: PlaceRecord, routes: List) { + MapboxScreenManager.push(MapboxScreen.ROUTE_PREVIEW) + } + + override fun onUnknownCurrentLocation() { + onErrorItemList(R.string.car_search_unknown_current_location) + } + + override fun onDestinationLocationUnknown() { + onErrorItemList(R.string.car_search_unknown_search_location) + } + + override fun onNoRoutesFound() { + onErrorItemList(R.string.car_search_no_results) + } + } + searchCarContext.routePreviewRequest.request(placeRecord, carRouteRequestCallback) + } + + private fun onErrorItemList(@StringRes stringRes: Int) { + itemList = buildErrorItemList(stringRes) + invalidate() + } + + private fun buildErrorItemList(@StringRes stringRes: Int) = ItemList.Builder() + .setNoItemsMessage(carContext.getString(stringRes)) + .build() + + private fun repeatOnResumed(block: suspend () -> Unit) { + lifecycleScope.launch { + lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { + block() + } + } + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRouteLineRenderer.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRouteLineRenderer.kt similarity index 83% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRouteLineRenderer.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRouteLineRenderer.kt index c02449c687e..027791f4247 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRouteLineRenderer.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRouteLineRenderer.kt @@ -1,11 +1,6 @@ -package com.mapbox.androidauto.preview +package com.mapbox.navigation.ui.androidauto.preview import androidx.car.app.CarContext -import com.mapbox.androidauto.internal.extensions.mapboxNavigationForward -import com.mapbox.androidauto.internal.extensions.styleFlow -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.routes.CarRoutesProvider -import com.mapbox.androidauto.routes.NavigationCarRoutesProvider import com.mapbox.maps.Style import com.mapbox.maps.extension.androidauto.MapboxCarMapObserver import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface @@ -15,19 +10,23 @@ import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.trip.session.RouteProgressObserver +import com.mapbox.navigation.ui.androidauto.internal.extensions.mapboxNavigationForward +import com.mapbox.navigation.ui.androidauto.internal.extensions.styleFlow +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider +import com.mapbox.navigation.ui.androidauto.routes.NavigationCarRoutesProvider import com.mapbox.navigation.ui.maps.route.RouteLayerConstants.TOP_LEVEL_ROUTE_LINE_LAYER_ID import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions +import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineApiOptions +import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineViewOptions import com.mapbox.navigation.ui.maps.route.line.model.RouteLineColorResources -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch @@ -38,19 +37,13 @@ import kotlinx.coroutines.launch * Anything for rendering the car's route line, is handled here at this point. */ class CarRouteLineRenderer( - private val carRoutesProvider: CarRoutesProvider = NavigationCarRoutesProvider() + private val carRoutesProvider: CarRoutesProvider = NavigationCarRoutesProvider(), ) : MapboxCarMapObserver { private val routeLineColorResources by lazy { RouteLineColorResources.Builder().build() } - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder() - .routeLineColorResources(routeLineColorResources) - .build() - } - private var style: Style? = null private lateinit var routeLineView: MapboxRouteLineView @@ -83,10 +76,11 @@ class CarRouteLineRenderer( coroutineScope.launch { mapboxCarMapSurface.styleFlow().collectLatest { style -> val carContext = mapboxCarMapSurface.carContext - val routeLineOptions = getMapboxRouteLineOptions(carContext, style) - routeLineView = MapboxRouteLineView(routeLineOptions) + routeLineView = MapboxRouteLineView( + getMapboxRouteLineViewOptions(carContext, style), + ) routeLineView.initializeLayers(style) - routeLineApi = MapboxRouteLineApi(routeLineOptions) + routeLineApi = MapboxRouteLineApi(getMapboxRouteLineApiOptions(style)) routeArrowApi = MapboxRouteArrowApi() routeArrowView = MapboxRouteArrowView( RouteArrowOptions.Builder(carContext) @@ -119,14 +113,21 @@ class CarRouteLineRenderer( mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) } - private fun getMapboxRouteLineOptions( + private fun getMapboxRouteLineApiOptions( + style: Style, + ): MapboxRouteLineApiOptions { + return MapboxRouteLineApiOptions.Builder() + .vanishingRouteLineEnabled(true) + .build() + } + + private fun getMapboxRouteLineViewOptions( carContext: CarContext, - style: Style - ): MapboxRouteLineOptions { - return MapboxRouteLineOptions.Builder(carContext) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId(findRoadLabelsLayerId(style)) - .withVanishingRouteLineEnabled(true) + style: Style, + ): MapboxRouteLineViewOptions { + return MapboxRouteLineViewOptions.Builder(carContext) + .routeLineColorResources(routeLineColorResources) + .routeLineBelowLayerId(findRoadLabelsLayerId(style)) .build() } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRouteOptionsInterceptor.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRouteOptionsInterceptor.kt similarity index 88% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRouteOptionsInterceptor.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRouteOptionsInterceptor.kt index a20e8d4f26e..5effc68c881 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRouteOptionsInterceptor.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRouteOptionsInterceptor.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.preview +package com.mapbox.navigation.ui.androidauto.preview import com.mapbox.api.directions.v5.models.RouteOptions diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRoutePreviewRepository.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewRepository.kt similarity index 81% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRoutePreviewRepository.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewRepository.kt index 1e7c3046037..3a1e2986369 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRoutePreviewRepository.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewRepository.kt @@ -1,8 +1,8 @@ -package com.mapbox.androidauto.preview +package com.mapbox.navigation.ui.androidauto.preview -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.search.PlaceRecord import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRoutePreviewRequest.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewRequest.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRoutePreviewRequest.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewRequest.kt index 620ab808b25..4838a6db652 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/CarRoutePreviewRequest.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewRequest.kt @@ -1,11 +1,6 @@ -package com.mapbox.androidauto.preview +package com.mapbox.navigation.ui.androidauto.preview import androidx.annotation.UiThread -import com.mapbox.androidauto.MapboxCarOptions -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.internal.logAndroidAutoFailure -import com.mapbox.androidauto.location.CarLocationProvider -import com.mapbox.androidauto.search.PlaceRecord import com.mapbox.api.directions.v5.DirectionsCriteria import com.mapbox.api.directions.v5.models.RouteOptions import com.mapbox.geojson.Point @@ -13,11 +8,14 @@ import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions import com.mapbox.navigation.base.formatter.UnitType import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.base.route.NavigationRouterCallback -import com.mapbox.navigation.base.route.RouterCallback import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver +import com.mapbox.navigation.ui.androidauto.MapboxCarOptions +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAutoFailure +import com.mapbox.navigation.ui.androidauto.location.CarLocationProvider +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord /** * This is a view interface. Each callback function represents a view that will be @@ -81,7 +79,7 @@ class CarRoutePreviewRequest internal constructor( else -> { currentRequestId = mapboxNavigation.requestRoutes( mapboxNavigation.carRouteOptions(origin, placeRecord.coordinate), - carCallbackTransformer(placeRecord, callback) + carCallbackTransformer(placeRecord, callback), ) } } @@ -97,7 +95,7 @@ class CarRoutePreviewRequest internal constructor( */ private fun MapboxNavigation.carRouteOptions( origin: Point, - destination: Point + destination: Point, ) = RouteOptions.builder() .applyDefaultNavigationOptions() .language(navigationOptions.distanceFormatterOptions.locale.language) @@ -121,18 +119,11 @@ class CarRoutePreviewRequest internal constructor( */ private fun carCallbackTransformer( placeRecord: PlaceRecord, - callback: CarRoutePreviewRequestCallback + callback: CarRoutePreviewRequestCallback, ): NavigationRouterCallback { return object : NavigationRouterCallback { - override fun onRoutesReady(routes: List, routerOrigin: RouterOrigin) { - currentRequestId = null - logAndroidAuto("CarRoutePreview.onRoutesReady ${routes.size}") - repository?.setRoutePreview(placeRecord, routes) - callback.onRoutesReady(placeRecord, routes) - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { + override fun onCanceled(routeOptions: RouteOptions, routerOrigin: String) { currentRequestId = null logAndroidAutoFailure("CarRoutePreview.onRequestCanceled $routeOptions") @@ -145,6 +136,14 @@ class CarRoutePreviewRequest internal constructor( logAndroidAutoFailure("CarRoutePreview.onFailure $routeOptions $reasons") callback.onNoRoutesFound() } + + override fun onRoutesReady(routes: List, routerOrigin: String) { + currentRequestId = null + + logAndroidAuto("CarRoutePreview.onRoutesReady ${routes.size}") + repository?.setRoutePreview(placeRecord, routes) + callback.onRoutesReady(placeRecord, routes) + } } } } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewScreen.kt new file mode 100644 index 00000000000..af852ff52be --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewScreen.kt @@ -0,0 +1,136 @@ +package com.mapbox.navigation.ui.androidauto.preview + +import android.text.SpannableString +import androidx.annotation.UiThread +import androidx.car.app.Screen +import androidx.car.app.model.Action +import androidx.car.app.model.DurationSpan +import androidx.car.app.model.ItemList +import androidx.car.app.model.Row +import androidx.car.app.model.Template +import androidx.car.app.navigation.model.RoutePreviewNavigationTemplate +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.internal.extensions.addBackPressedHandler +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.location.CarLocationRenderer +import com.mapbox.navigation.ui.androidauto.navigation.CarActiveGuidanceMarkers +import com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode +import com.mapbox.navigation.ui.androidauto.navigation.CarDistanceFormatter +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera +import com.mapbox.navigation.ui.androidauto.navigation.audioguidance.muteAudioGuidance +import com.mapbox.navigation.ui.androidauto.navigation.speedlimit.CarSpeedLimitRenderer +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord + +/** + * After a destination has been selected. This view previews the route and lets + * you select alternatives. From here, you can start turn-by-turn navigation. + */ +internal class CarRoutePreviewScreen @UiThread constructor( + private val mapboxCarContext: MapboxCarContext, + private val placeRecord: PlaceRecord, + private val navigationRoutes: List, +) : Screen(mapboxCarContext.carContext) { + + private val carRoutesProvider = PreviewCarRoutesProvider(navigationRoutes) + private var selectedIndex = 0 + private val carRouteLineRenderer = CarRouteLineRenderer(carRoutesProvider) + private val carLocationRenderer = CarLocationRenderer() + private val carSpeedLimitRenderer = CarSpeedLimitRenderer(mapboxCarContext) + private val carNavigationCamera = CarNavigationCamera( + initialCarCameraMode = CarCameraMode.OVERVIEW, + alternativeCarCameraMode = CarCameraMode.FOLLOWING, + carRoutesProvider = carRoutesProvider, + ) + private val carMarkers = CarActiveGuidanceMarkers(carRoutesProvider) + + init { + logAndroidAuto("CarRoutePreviewScreen constructor") + addBackPressedHandler { + logAndroidAuto("CarRoutePreviewScreen onBackPressed") + mapboxCarContext.mapboxScreenManager.goBack() + } + lifecycle.muteAudioGuidance() + lifecycle.addObserver( + object : DefaultLifecycleObserver { + + override fun onResume(owner: LifecycleOwner) { + logAndroidAuto("CarRoutePreviewScreen onResume") + mapboxCarContext.mapboxCarMap.registerObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.registerObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carMarkers) + } + + override fun onPause(owner: LifecycleOwner) { + logAndroidAuto("CarRoutePreviewScreen onPause") + mapboxCarContext.mapboxCarMap.unregisterObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.unregisterObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carMarkers) + } + }, + ) + } + + @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) + override fun onGetTemplate(): Template { + val listBuilder = ItemList.Builder() + navigationRoutes.forEach { navigationRoute -> + val route = navigationRoute.directionsRoute + val title = route.legs()?.first()?.summary() ?: placeRecord.name + val routeSpannableString = SpannableString(" $title") + val span = DurationSpan.create(route.duration().toLong()) + routeSpannableString.setSpan(span, 0, 1, 0) + + val distance = CarDistanceFormatter.formatDistance(route.distance()) + val item = Row.Builder().setTitle(routeSpannableString).addText(distance).build() + listBuilder.addItem(item) + } + if (navigationRoutes.isNotEmpty()) { + listBuilder.setSelectedIndex(selectedIndex) + listBuilder.setOnSelectedListener { index -> + val newRouteOrder = navigationRoutes.toMutableList() + selectedIndex = index + if (index > 0) { + val swap = newRouteOrder[0] + newRouteOrder[0] = newRouteOrder[index] + newRouteOrder[index] = swap + carRoutesProvider.updateRoutes(newRouteOrder) + } else { + carRoutesProvider.updateRoutes(navigationRoutes) + } + } + } + + return RoutePreviewNavigationTemplate.Builder() + .setItemList(listBuilder.build()) + .setTitle(carContext.getString(R.string.car_action_preview_title)) + .setActionStrip( + mapboxCarContext.options.actionStripProvider + .getActionStrip(this, MapboxScreen.ROUTE_PREVIEW), + ) + .setHeaderAction(Action.BACK) + .setNavigateAction( + Action.Builder() + .setTitle(carContext.getString(R.string.car_action_preview_navigate_button)) + .setOnClickListener { + MapboxNavigationApp.current()!!.setNavigationRoutes( + carRoutesProvider.navigationRoutes.value, + ) + MapboxScreenManager.replaceTop(MapboxScreen.ACTIVE_GUIDANCE) + } + .build(), + ) + .build() + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewScreen2.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewScreen2.kt new file mode 100644 index 00000000000..5e43c3fc3fe --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/CarRoutePreviewScreen2.kt @@ -0,0 +1,146 @@ +package com.mapbox.navigation.ui.androidauto.preview + +import android.text.SpannableString +import androidx.annotation.UiThread +import androidx.car.app.Screen +import androidx.car.app.model.Action +import androidx.car.app.model.DurationSpan +import androidx.car.app.model.ItemList +import androidx.car.app.model.Row +import androidx.car.app.model.Template +import androidx.car.app.navigation.model.RoutePreviewNavigationTemplate +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.core.preview.RoutesPreview +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.internal.extensions.addBackPressedHandler +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.location.CarLocationRenderer +import com.mapbox.navigation.ui.androidauto.navigation.CarActiveGuidanceMarkers +import com.mapbox.navigation.ui.androidauto.navigation.CarCameraMode +import com.mapbox.navigation.ui.androidauto.navigation.CarDistanceFormatter +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera +import com.mapbox.navigation.ui.androidauto.navigation.audioguidance.muteAudioGuidance +import com.mapbox.navigation.ui.androidauto.navigation.speedlimit.CarSpeedLimitRenderer +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager +import kotlinx.coroutines.launch + +/** + * After a destination has been selected. This view previews the route and lets + * you select alternatives. From here, you can start turn-by-turn navigation. + * The difference between [CarRoutePreviewScreen] and this class is that + * the latter uses the experimental route preview state in Navigation SDK. + */ +@ExperimentalPreviewMapboxNavigationAPI +internal class CarRoutePreviewScreen2 @UiThread constructor( + private val mapboxCarContext: MapboxCarContext, +) : Screen(mapboxCarContext.carContext) { + + private var routesPreview: RoutesPreview? = null + set(value) { + field = value + invalidate() + } + + private val carRoutesProvider = PreviewCarRoutesProvider2() + private val carRouteLineRenderer = CarRouteLineRenderer(carRoutesProvider) + private val carLocationRenderer = CarLocationRenderer() + private val carSpeedLimitRenderer = CarSpeedLimitRenderer(mapboxCarContext) + private val carNavigationCamera = CarNavigationCamera( + initialCarCameraMode = CarCameraMode.OVERVIEW, + alternativeCarCameraMode = CarCameraMode.FOLLOWING, + carRoutesProvider = carRoutesProvider, + ) + private val carMarkers = CarActiveGuidanceMarkers(carRoutesProvider) + + init { + logAndroidAuto("CarRoutePreviewScreen2 constructor") + addBackPressedHandler { + logAndroidAuto("CarRoutePreviewScreen2 onBackPressed") + mapboxCarContext.mapboxScreenManager.goBack() + MapboxNavigationApp.current()!!.setRoutesPreview(emptyList()) + } + lifecycleScope.launch { + lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { + carRoutesProvider.routesPreview.collect { routesPreview = it } + } + } + lifecycle.muteAudioGuidance() + lifecycle.addObserver( + object : DefaultLifecycleObserver { + + override fun onResume(owner: LifecycleOwner) { + logAndroidAuto("CarRoutePreviewScreen2 onResume") + mapboxCarContext.mapboxCarMap.registerObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.registerObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.registerObserver(carMarkers) + } + + override fun onPause(owner: LifecycleOwner) { + logAndroidAuto("CarRoutePreviewScreen2 onPause") + mapboxCarContext.mapboxCarMap.unregisterObserver(carLocationRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carSpeedLimitRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carNavigationCamera) + mapboxCarContext.mapboxCarMap.unregisterObserver(carRouteLineRenderer) + mapboxCarContext.mapboxCarMap.unregisterObserver(carMarkers) + } + }, + ) + } + + override fun onGetTemplate(): Template { + val templateBuilder = RoutePreviewNavigationTemplate.Builder() + val routesPreview = routesPreview + val originalRoutesList = routesPreview?.originalRoutesList + if (originalRoutesList.isNullOrEmpty()) { + templateBuilder.setLoading(true) + } else { + val listBuilder = ItemList.Builder() + for (navigationRoute in originalRoutesList) { + val route = navigationRoute.directionsRoute + val title = route.legs()?.first()?.summary()?.let { " $it" } ?: " " + val routeSpannableString = SpannableString(title) + val span = DurationSpan.create(route.duration().toLong()) + routeSpannableString.setSpan(span, 0, 1, 0) + + val distance = CarDistanceFormatter.formatDistance(route.distance()) + val item = Row.Builder().setTitle(routeSpannableString).addText(distance).build() + listBuilder.addItem(item) + } + listBuilder.setSelectedIndex(routesPreview.primaryRouteIndex) + listBuilder.setOnSelectedListener { index -> + carRoutesProvider.updateSelectedRoute(index) + } + templateBuilder.setItemList(listBuilder.build()) + templateBuilder.setNavigateAction( + Action.Builder() + .setTitle(carContext.getString(R.string.car_action_preview_navigate_button)) + .setOnClickListener { + MapboxNavigationApp.current()!!.setNavigationRoutes( + routesPreview.routesList, + ) + MapboxScreenManager.replaceTop(MapboxScreen.ACTIVE_GUIDANCE) + } + .build(), + ) + } + + return templateBuilder + .setTitle(carContext.getString(R.string.car_action_preview_title)) + .setActionStrip( + mapboxCarContext.options.actionStripProvider + .getActionStrip(screen = this, MapboxScreen.ROUTE_PREVIEW), + ) + .setHeaderAction(Action.BACK) + .build() + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/PreviewCarRoutesProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/PreviewCarRoutesProvider.kt similarity index 79% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/PreviewCarRoutesProvider.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/PreviewCarRoutesProvider.kt index de876d9c1a5..d42f3b4a7fe 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/PreviewCarRoutesProvider.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/PreviewCarRoutesProvider.kt @@ -1,8 +1,8 @@ -package com.mapbox.androidauto.preview +package com.mapbox.navigation.ui.androidauto.preview -import com.mapbox.androidauto.navigation.CarNavigationCamera -import com.mapbox.androidauto.routes.CarRoutesProvider import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera +import com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/PreviewCarRoutesProvider2.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/PreviewCarRoutesProvider2.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/PreviewCarRoutesProvider2.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/PreviewCarRoutesProvider2.kt index 49550e93d6a..171d847a9bb 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/preview/PreviewCarRoutesProvider2.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/preview/PreviewCarRoutesProvider2.kt @@ -1,13 +1,12 @@ -package com.mapbox.androidauto.preview +package com.mapbox.navigation.ui.androidauto.preview -import com.mapbox.androidauto.navigation.CarNavigationCamera -import com.mapbox.androidauto.routes.CarRoutesProvider import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver import com.mapbox.navigation.core.preview.RoutesPreviewObserver -import kotlinx.coroutines.ExperimentalCoroutinesApi +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera +import com.mapbox.navigation.ui.androidauto.routes.CarRoutesProvider import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.callbackFlow import kotlinx.coroutines.flow.map @@ -16,7 +15,6 @@ import kotlinx.coroutines.flow.map * Gives the [CarRoutePreviewScreen] the ability to control the selected route rendered * by the [CarRouteLineRenderer] and [CarNavigationCamera]. */ -@OptIn(ExperimentalCoroutinesApi::class) @ExperimentalPreviewMapboxNavigationAPI class PreviewCarRoutesProvider2 : CarRoutesProvider { diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/routes/CarRoutesProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/routes/CarRoutesProvider.kt new file mode 100644 index 00000000000..22776bf42a3 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/routes/CarRoutesProvider.kt @@ -0,0 +1,19 @@ +package com.mapbox.navigation.ui.androidauto.routes + +import com.mapbox.navigation.base.route.NavigationRoute +import com.mapbox.navigation.ui.androidauto.navigation.CarNavigationCamera +import com.mapbox.navigation.ui.androidauto.preview.CarRouteLineRenderer +import kotlinx.coroutines.flow.Flow + +/** + * Gives you the ability to provide routes to different car route map components. + * + * @see [CarRouteLineRenderer] + * @see [CarNavigationCamera] + */ +interface CarRoutesProvider { + /** + * Provides navigation routes for active guidance or route preview. + */ + val navigationRoutes: Flow> +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/routes/NavigationCarRoutesProvider.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/routes/NavigationCarRoutesProvider.kt similarity index 97% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/routes/NavigationCarRoutesProvider.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/routes/NavigationCarRoutesProvider.kt index 4cbdd154ba3..0fb5ff88afc 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/routes/NavigationCarRoutesProvider.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/routes/NavigationCarRoutesProvider.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.routes +package com.mapbox.navigation.ui.androidauto.routes import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.core.MapboxNavigation diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreen.kt similarity index 98% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreen.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreen.kt index 7fe3d466adb..48d1514af6d 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreen.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreen.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.screenmanager +package com.mapbox.navigation.ui.androidauto.screenmanager import androidx.annotation.StringDef diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenEvent.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenEvent.kt similarity index 92% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenEvent.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenEvent.kt index 5b98bc093fb..f6d16ec065f 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenEvent.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenEvent.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.screenmanager +package com.mapbox.navigation.ui.androidauto.screenmanager /** * This class is observable but must be created by the [MapboxScreenManager]. @@ -10,7 +10,7 @@ class MapboxScreenEvent internal constructor( @MapboxScreen.Key val key: String, @MapboxScreenOperation.Type - val operation: String + val operation: String, ) { /** diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenFactory.kt similarity index 82% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenFactory.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenFactory.kt index e672452944e..41ae0189292 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenFactory.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenFactory.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.screenmanager +package com.mapbox.navigation.ui.androidauto.screenmanager import androidx.car.app.CarContext import androidx.car.app.Screen diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenGraph.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenGraph.kt new file mode 100644 index 00000000000..92db6c321a1 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenGraph.kt @@ -0,0 +1,83 @@ +@file:JvmName("MapboxScreenGraph") + +package com.mapbox.navigation.ui.androidauto.screenmanager + +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ACTIVE_GUIDANCE +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ACTIVE_GUIDANCE_FEEDBACK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ARRIVAL +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FAVORITES +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FAVORITES_FEEDBACK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FREE_DRIVE +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.FREE_DRIVE_FEEDBACK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.GEO_DEEPLINK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.GEO_DEEPLINK_FEEDBACK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.NEEDS_LOCATION_PERMISSION +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ROUTE_PREVIEW +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.ROUTE_PREVIEW_FEEDBACK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.SEARCH +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.SEARCH_FEEDBACK +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen.SETTINGS +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.ActiveGuidanceFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.ActiveGuidanceScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.ArrivalScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.FavoritesFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.FavoritesScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.FreeDriveFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.FreeDriveScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.GeoDeeplinkPlacesCarScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.GeoDeeplinkPlacesFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.NeedsLocationPermissionScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.RoutePreviewFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.RoutePreviewScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.RoutePreviewScreenFactory2 +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.SearchPlacesFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.SearchPlacesScreenFactory +import com.mapbox.navigation.ui.androidauto.screenmanager.factories.SettingsScreenFactory + +/** + * This is a predefined application that is designed to collect feedback from drivers. + * + * You can swap in your own [MapboxScreenFactory] to customize the experience. + */ +fun MapboxCarContext.prepareScreens() = apply { + val mapboxCarContext = this + mapboxScreenManager.putAll( + NEEDS_LOCATION_PERMISSION + to NeedsLocationPermissionScreenFactory(), + SETTINGS + to SettingsScreenFactory(mapboxCarContext), + FREE_DRIVE + to FreeDriveScreenFactory(mapboxCarContext), + FREE_DRIVE_FEEDBACK + to FreeDriveFeedbackScreenFactory(mapboxCarContext), + SEARCH + to SearchPlacesScreenFactory(mapboxCarContext), + SEARCH_FEEDBACK + to SearchPlacesFeedbackScreenFactory(mapboxCarContext), + FAVORITES + to FavoritesScreenFactory(mapboxCarContext), + FAVORITES_FEEDBACK + to FavoritesFeedbackScreenFactory(mapboxCarContext), + GEO_DEEPLINK + to GeoDeeplinkPlacesCarScreenFactory(mapboxCarContext), + GEO_DEEPLINK_FEEDBACK + to GeoDeeplinkPlacesFeedbackScreenFactory(mapboxCarContext), + ROUTE_PREVIEW + to RoutePreviewScreenFactory(mapboxCarContext), + ROUTE_PREVIEW_FEEDBACK + to RoutePreviewFeedbackScreenFactory(mapboxCarContext), + ACTIVE_GUIDANCE + to ActiveGuidanceScreenFactory(mapboxCarContext), + ACTIVE_GUIDANCE_FEEDBACK + to ActiveGuidanceFeedbackScreenFactory(mapboxCarContext), + ARRIVAL + to ArrivalScreenFactory(mapboxCarContext), + ) +} + +@ExperimentalPreviewMapboxNavigationAPI +fun MapboxCarContext.prepareExperimentalRoutePreviewScreen() = apply { + mapboxScreenManager[ROUTE_PREVIEW] = RoutePreviewScreenFactory2(mapboxCarContext = this) +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenManager.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenManager.kt similarity index 95% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenManager.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenManager.kt index e07f1834f6c..628c17a8556 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenManager.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenManager.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.screenmanager +package com.mapbox.navigation.ui.androidauto.screenmanager import androidx.annotation.UiThread import androidx.annotation.VisibleForTesting @@ -10,14 +10,13 @@ import androidx.car.app.model.Template import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope -import com.mapbox.androidauto.MapboxCarContext -import com.mapbox.androidauto.internal.context.MapboxCarContextOwner -import com.mapbox.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.internal.context.MapboxCarContextOwner +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow -import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import java.util.ArrayDeque import java.util.Deque @@ -67,7 +66,7 @@ import java.util.Deque * ``` */ class MapboxScreenManager internal constructor( - private val carContextOwner: MapboxCarContextOwner + private val carContextOwner: MapboxCarContextOwner, ) { private var screenManager: ScreenManager? = null private val screenFactoryMap = mutableMapOf() @@ -143,13 +142,13 @@ class MapboxScreenManager internal constructor( "back-stacks. ScreenManager top is not equal to ${newTop?.first}." } screenKeyMutable.tryEmit( - MapboxScreenEvent(newTop.first, MapboxScreenOperation.GO_BACK) + MapboxScreenEvent(newTop.first, MapboxScreenOperation.GO_BACK), ) true } else { logAndroidAuto( "$TAG goBack cannot remove the top because " + - "${screenManager.top::class.simpleName} is not the top of MapboxScreenManager." + "${screenManager.top::class.simpleName} is not the top of MapboxScreenManager.", ) false } @@ -211,7 +210,8 @@ class MapboxScreenManager internal constructor( MapboxScreenOperation.REPLACE_TOP -> onReplaceTop(event.key) MapboxScreenOperation.PUSH -> onPush(event.key) MapboxScreenOperation.GO_BACK, - MapboxScreenOperation.CREATED -> { + MapboxScreenOperation.CREATED, + -> { // Handled by goBack and createScreen functions. } } @@ -267,7 +267,7 @@ class MapboxScreenManager internal constructor( internal val screenKeyMutable by lazy { MutableSharedFlow( replay = REPLAY_CACHE, - onBufferOverflow = BufferOverflow.SUSPEND + onBufferOverflow = BufferOverflow.SUSPEND, ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenOperation.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenOperation.kt similarity index 96% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenOperation.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenOperation.kt index a186bbbdd83..f7b8b97e35c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/screenmanager/MapboxScreenOperation.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/MapboxScreenOperation.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.screenmanager +package com.mapbox.navigation.ui.androidauto.screenmanager import androidx.annotation.StringDef import androidx.car.app.Screen diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ActiveGuidanceFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ActiveGuidanceFeedbackScreenFactory.kt new file mode 100644 index 00000000000..6965c39c91c --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ActiveGuidanceFeedbackScreenFactory.kt @@ -0,0 +1,21 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * Default screen for [MapboxScreen.ACTIVE_GUIDANCE_FEEDBACK]. + */ +class ActiveGuidanceFeedbackScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.ACTIVE_GUIDANCE + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider + .getActiveGuidanceFeedbackPoll(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ActiveGuidanceScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ActiveGuidanceScreenFactory.kt new file mode 100644 index 00000000000..2fb2ebd62fc --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ActiveGuidanceScreenFactory.kt @@ -0,0 +1,19 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.navigation.ActiveGuidanceScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory + +/** + * Default screen for [MapboxScreen.ACTIVE_GUIDANCE]. + */ +class ActiveGuidanceScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + return ActiveGuidanceScreen(mapboxCarContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ArrivalScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ArrivalScreenFactory.kt new file mode 100644 index 00000000000..5c0965a9c43 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/ArrivalScreenFactory.kt @@ -0,0 +1,27 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager + +/** + * Default screen for [MapboxScreen.ARRIVAL]. + */ +class ArrivalScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.ARRIVAL + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider.getArrivalFeedbackPoll(carContext) + } + + override fun onFinish() { + MapboxNavigationApp.current()?.setNavigationRoutes(emptyList()) + MapboxScreenManager.replaceTop(MapboxScreen.FREE_DRIVE) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FavoritesFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FavoritesFeedbackScreenFactory.kt new file mode 100644 index 00000000000..33a9166b3cc --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FavoritesFeedbackScreenFactory.kt @@ -0,0 +1,21 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * Default screen for [MapboxScreen.FAVORITES_FEEDBACK]. + */ +class FavoritesFeedbackScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.FAVORITES + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider + .getSearchFeedbackPoll(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FavoritesScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FavoritesScreenFactory.kt new file mode 100644 index 00000000000..eef331f56c3 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FavoritesScreenFactory.kt @@ -0,0 +1,29 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.internal.search.FavoritesApi +import com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory +import com.mapbox.navigation.ui.androidauto.search.SearchCarContext +import com.mapbox.search.ServiceProvider + +/** + * Default screen for [MapboxScreen.FAVORITES]. + */ +class FavoritesScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + val searchDataProvider = ServiceProvider.INSTANCE.favoritesDataProvider() + val placesProvider = FavoritesApi(searchDataProvider) + + return PlacesListOnMapScreen( + SearchCarContext(mapboxCarContext), + placesProvider, + MapboxScreen.FAVORITES, + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FreeDriveFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FreeDriveFeedbackScreenFactory.kt new file mode 100644 index 00000000000..b0687b72aeb --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FreeDriveFeedbackScreenFactory.kt @@ -0,0 +1,20 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * Default screen for [MapboxScreen.FREE_DRIVE_FEEDBACK]. + */ +class FreeDriveFeedbackScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.FREE_DRIVE + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider.getFreeDriveFeedbackPoll(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FreeDriveScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FreeDriveScreenFactory.kt new file mode 100644 index 00000000000..0c688b4ee03 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/FreeDriveScreenFactory.kt @@ -0,0 +1,19 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.freedrive.FreeDriveCarScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory + +/** + * Default screen for [MapboxScreen.FREE_DRIVE]. + */ +class FreeDriveScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + return FreeDriveCarScreen(mapboxCarContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/GeoDeeplinkPlacesCarScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/GeoDeeplinkPlacesCarScreenFactory.kt new file mode 100644 index 00000000000..17102207621 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/GeoDeeplinkPlacesCarScreenFactory.kt @@ -0,0 +1,28 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.placeslistonmap.PlacesListOnMapScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory +import com.mapbox.navigation.ui.androidauto.search.SearchCarContext + +/** + * Default screen for [MapboxScreen.GEO_DEEPLINK]. + */ +class GeoDeeplinkPlacesCarScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + val placesProvider = mapboxCarContext.geoDeeplinkPlacesProvider + checkNotNull(placesProvider) { + "When a deep link is found the geoDeeplinkPlacesProvider needs to be set" + } + return PlacesListOnMapScreen( + SearchCarContext(mapboxCarContext), + placesProvider, + MapboxScreen.GEO_DEEPLINK, + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/GeoDeeplinkPlacesFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/GeoDeeplinkPlacesFeedbackScreenFactory.kt new file mode 100644 index 00000000000..628d7a946fe --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/GeoDeeplinkPlacesFeedbackScreenFactory.kt @@ -0,0 +1,21 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * Default screen for [MapboxScreen.GEO_DEEPLINK_FEEDBACK]. + */ +class GeoDeeplinkPlacesFeedbackScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.GEO_DEEPLINK + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider + .getSearchFeedbackPoll(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/NeedsLocationPermissionScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/NeedsLocationPermissionScreenFactory.kt new file mode 100644 index 00000000000..a323803263b --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/NeedsLocationPermissionScreenFactory.kt @@ -0,0 +1,16 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.permissions.NeedsLocationPermissionsScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory + +/** + * Default screen for [MapboxScreen.NEEDS_LOCATION_PERMISSION]. + */ +class NeedsLocationPermissionScreenFactory : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + return NeedsLocationPermissionsScreen(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewFeedbackScreenFactory.kt new file mode 100644 index 00000000000..11b9e220297 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewFeedbackScreenFactory.kt @@ -0,0 +1,21 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * Default screen for [MapboxScreen.ROUTE_PREVIEW_FEEDBACK]. + */ +class RoutePreviewFeedbackScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.ROUTE_PREVIEW + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider + .getRoutePreviewFeedbackPoll(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewScreenFactory.kt new file mode 100644 index 00000000000..73c7015f5ea --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewScreenFactory.kt @@ -0,0 +1,32 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.freedrive.FreeDriveCarScreen +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory + +/** + * Default screen for [MapboxScreen.ROUTE_PREVIEW]. + */ +class RoutePreviewScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + val repository = mapboxCarContext.routePreviewRequest.repository + val placeRecord = repository?.placeRecord?.value + val routes = repository?.routes?.value ?: emptyList() + return if (placeRecord == null || routes.isEmpty()) { + logAndroidAuto( + "Showing free drive screen because route preview can only be shown " + + "when there is a route. placeRecord=$placeRecord routes.size=${routes.size}", + ) + FreeDriveCarScreen(mapboxCarContext) + } else { + CarRoutePreviewScreen(mapboxCarContext, placeRecord, routes) + } + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewScreenFactory2.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewScreenFactory2.kt new file mode 100644 index 00000000000..da9f9a06ed3 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/RoutePreviewScreenFactory2.kt @@ -0,0 +1,28 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewScreen2 +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory + +/** + * Default screen for [MapboxScreen.ROUTE_PREVIEW]. + */ +@ExperimentalPreviewMapboxNavigationAPI +class RoutePreviewScreenFactory2( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + + override fun create(carContext: CarContext): Screen { + val repository = mapboxCarContext.routePreviewRequest.repository + val routes = repository?.routes?.value + if (!routes.isNullOrEmpty()) { + MapboxNavigationApp.current()!!.setRoutesPreview(routes) + } + return CarRoutePreviewScreen2(mapboxCarContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SearchPlacesFeedbackScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SearchPlacesFeedbackScreenFactory.kt new file mode 100644 index 00000000000..e2b57a461b5 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SearchPlacesFeedbackScreenFactory.kt @@ -0,0 +1,21 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.feedback.core.CarFeedbackScreenFactory +import com.mapbox.navigation.ui.androidauto.feedback.ui.CarFeedbackPoll +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen + +/** + * Default screen for [MapboxScreen.SEARCH_FEEDBACK]. + */ +class SearchPlacesFeedbackScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : CarFeedbackScreenFactory(mapboxCarContext) { + override fun getSourceName(): String = MapboxScreen.SEARCH + + override fun getCarFeedbackPoll(carContext: CarContext): CarFeedbackPoll { + return mapboxCarContext.options.feedbackPollProvider + .getSearchFeedbackPoll(carContext) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SearchPlacesScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SearchPlacesScreenFactory.kt new file mode 100644 index 00000000000..f3e90b8d57d --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SearchPlacesScreenFactory.kt @@ -0,0 +1,20 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory +import com.mapbox.navigation.ui.androidauto.search.PlaceSearchScreen +import com.mapbox.navigation.ui.androidauto.search.SearchCarContext + +/** + * Default screen for [MapboxScreen.SEARCH]. + */ +class SearchPlacesScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + return PlaceSearchScreen(SearchCarContext(mapboxCarContext)) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SettingsScreenFactory.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SettingsScreenFactory.kt new file mode 100644 index 00000000000..baa9ce1bd1c --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/screenmanager/factories/SettingsScreenFactory.kt @@ -0,0 +1,15 @@ +package com.mapbox.navigation.ui.androidauto.screenmanager.factories + +import androidx.car.app.CarContext +import androidx.car.app.Screen +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenFactory +import com.mapbox.navigation.ui.androidauto.settings.CarSettingsScreen + +class SettingsScreenFactory( + private val mapboxCarContext: MapboxCarContext, +) : MapboxScreenFactory { + override fun create(carContext: CarContext): Screen { + return CarSettingsScreen(mapboxCarContext) + } +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/CarPlaceSearchOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/CarPlaceSearchOptions.kt similarity index 97% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/CarPlaceSearchOptions.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/CarPlaceSearchOptions.kt index 2a838cb1ac5..a94faa02671 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/CarPlaceSearchOptions.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/CarPlaceSearchOptions.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.search +package com.mapbox.navigation.ui.androidauto.search import com.mapbox.navigation.base.options.NavigationOptions diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/GetPlacesError.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/GetPlacesError.kt new file mode 100644 index 00000000000..624dba3fce8 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/GetPlacesError.kt @@ -0,0 +1,6 @@ +package com.mapbox.navigation.ui.androidauto.search + +class GetPlacesError internal constructor( + val errorMessage: String, + val throwable: Throwable?, +) diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceRecord.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceRecord.kt similarity index 92% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceRecord.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceRecord.kt index 9222269fd48..0bced8ed1cf 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceRecord.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceRecord.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.search +package com.mapbox.navigation.ui.androidauto.search import com.mapbox.geojson.Point @@ -10,7 +10,7 @@ class PlaceRecord( val name: String, val coordinate: Point?, val description: String? = null, - val categories: List = listOf() + val categories: List = listOf(), ) { override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceRecordMapper.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceRecordMapper.kt similarity index 96% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceRecordMapper.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceRecordMapper.kt index df7222698d8..108060bbb93 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceRecordMapper.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceRecordMapper.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.search +package com.mapbox.navigation.ui.androidauto.search import com.mapbox.api.geocoding.v5.models.CarmenFeature import com.mapbox.search.record.FavoriteRecord @@ -24,7 +24,7 @@ internal object PlaceRecordMapper { coordinate = favoriteRecord.coordinate, description = favoriteRecord.descriptionText ?: mapDescriptionFromAddress(favoriteRecord.address), - categories = favoriteRecord.categories ?: emptyList() + categories = favoriteRecord.categories ?: emptyList(), ) } @@ -39,7 +39,7 @@ internal object PlaceRecordMapper { name = carmenFeature.text() ?: "", coordinate = carmenFeature.center(), description = carmenFeature.placeName(), - categories = carmenFeature.placeType() ?: emptyList() + categories = carmenFeature.placeType() ?: emptyList(), ) } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceSearchScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceSearchScreen.kt similarity index 76% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceSearchScreen.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceSearchScreen.kt index 47b56167b15..4e312a6348c 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/search/PlaceSearchScreen.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/PlaceSearchScreen.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.search +package com.mapbox.navigation.ui.androidauto.search import androidx.annotation.StringRes import androidx.annotation.UiThread @@ -12,17 +12,17 @@ import androidx.car.app.model.Template import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.lifecycleScope -import com.mapbox.androidauto.R -import com.mapbox.androidauto.internal.extensions.addBackPressedHandler -import com.mapbox.androidauto.internal.logAndroidAuto -import com.mapbox.androidauto.internal.logAndroidAutoFailure -import com.mapbox.androidauto.navigation.CarDistanceFormatter -import com.mapbox.androidauto.preview.CarRoutePreviewRequestCallback -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.base.route.NavigationRoute import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.internal.extensions.addBackPressedHandler +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAuto +import com.mapbox.navigation.ui.androidauto.internal.logAndroidAutoFailure +import com.mapbox.navigation.ui.androidauto.navigation.CarDistanceFormatter +import com.mapbox.navigation.ui.androidauto.preview.CarRoutePreviewRequestCallback +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager import com.mapbox.search.result.SearchSuggestion import kotlinx.coroutines.launch @@ -63,17 +63,19 @@ internal class PlaceSearchScreen @UiThread constructor( addBackPressedHandler { searchCarContext.mapboxScreenManager.goBack() } - lifecycle.addObserver(object : DefaultLifecycleObserver { - override fun onCreate(owner: LifecycleOwner) { - MapboxNavigationApp.registerObserver(searchCarContext.routePreviewRequest) - MapboxNavigationApp.registerObserver(searchCarContext.carPlaceSearch) - } + lifecycle.addObserver( + object : DefaultLifecycleObserver { + override fun onCreate(owner: LifecycleOwner) { + MapboxNavigationApp.registerObserver(searchCarContext.routePreviewRequest) + MapboxNavigationApp.registerObserver(searchCarContext.carPlaceSearch) + } - override fun onDestroy(owner: LifecycleOwner) { - MapboxNavigationApp.unregisterObserver(searchCarContext.routePreviewRequest) - MapboxNavigationApp.unregisterObserver(searchCarContext.carPlaceSearch) - } - }) + override fun onDestroy(owner: LifecycleOwner) { + MapboxNavigationApp.unregisterObserver(searchCarContext.routePreviewRequest) + MapboxNavigationApp.unregisterObserver(searchCarContext.carPlaceSearch) + } + }, + ) } @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) @@ -87,12 +89,12 @@ internal class PlaceSearchScreen @UiThread constructor( override fun onSearchSubmitted(searchTerm: String) { logAndroidAutoFailure("onSearchSubmitted not implemented $searchTerm") } - } + }, ) .setHeaderAction(Action.BACK) .setActionStrip( searchCarContext.mapboxCarContext.options.actionStripProvider - .getActionStrip(this, MapboxScreen.SEARCH) + .getActionStrip(this, MapboxScreen.SEARCH), ) .setShowKeyboardByDefault(false) .setItemList(itemList) @@ -136,7 +138,7 @@ internal class PlaceSearchScreen @UiThread constructor( if (searchResults.isNotEmpty()) { searchCarContext.routePreviewRequest.request( PlaceRecordMapper.fromSearchResult(searchResults.first()), - carRouteRequestCallback + carRouteRequestCallback, ) } } diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/SearchCarContext.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/SearchCarContext.kt new file mode 100644 index 00000000000..589c6277def --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/search/SearchCarContext.kt @@ -0,0 +1,25 @@ +package com.mapbox.navigation.ui.androidauto.search + +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.internal.search.CarPlaceSearch +import com.mapbox.navigation.ui.androidauto.internal.search.CarPlaceSearchImpl +import com.mapbox.navigation.ui.androidauto.internal.search.CarSearchLocationProvider + +/** + * Contains the dependencies for the search feature. + */ +internal class SearchCarContext( + val mapboxCarContext: MapboxCarContext, +) { + /** MapboxCarContext **/ + val carContext = mapboxCarContext.carContext + val mapboxScreenManager = mapboxCarContext.mapboxScreenManager + + /** SearchCarContext **/ + val mapboxCarMap = mapboxCarContext.mapboxCarMap + val routePreviewRequest = mapboxCarContext.routePreviewRequest + val carPlaceSearch: CarPlaceSearch = CarPlaceSearchImpl( + mapboxCarContext.options, + CarSearchLocationProvider(), + ) +} diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/settings/CarSettingsScreen.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/settings/CarSettingsScreen.kt similarity index 82% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/settings/CarSettingsScreen.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/settings/CarSettingsScreen.kt index 8969978f135..9677f5d6d33 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/settings/CarSettingsScreen.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/settings/CarSettingsScreen.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.settings +package com.mapbox.navigation.ui.androidauto.settings import androidx.car.app.Screen import androidx.car.app.model.Action @@ -7,15 +7,15 @@ import androidx.car.app.model.ListTemplate import androidx.car.app.model.Row import androidx.car.app.model.Template import androidx.car.app.model.Toggle -import com.mapbox.androidauto.MapboxCarContext -import com.mapbox.androidauto.R -import com.mapbox.androidauto.internal.extensions.addBackPressedHandler +import com.mapbox.navigation.ui.androidauto.MapboxCarContext +import com.mapbox.navigation.ui.androidauto.R +import com.mapbox.navigation.ui.androidauto.internal.extensions.addBackPressedHandler /** * Handle the android auto car app settings. */ internal class CarSettingsScreen( - private val mapboxCarContext: MapboxCarContext + private val mapboxCarContext: MapboxCarContext, ) : Screen(mapboxCarContext.carContext) { init { @@ -30,8 +30,8 @@ internal class CarSettingsScreen( .addItem( buildRowToggle( R.string.car_settings_toggle_place_holder, - R.string.car_settings_toggle_place_holder_key - ) + R.string.car_settings_toggle_place_holder_key, + ), ) .build(), ) @@ -52,7 +52,7 @@ internal class CarSettingsScreen( mapboxCarContext.mapboxCarStorage.writeSharedPref(key, value) } .setChecked(storage.readSharedPref(key, false)) - .build() + .build(), ) .build() } diff --git a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/settings/MapboxCarStorage.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/settings/MapboxCarStorage.kt similarity index 89% rename from libnavui-androidauto/src/main/java/com/mapbox/androidauto/settings/MapboxCarStorage.kt rename to androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/settings/MapboxCarStorage.kt index 1e5c3351912..4b0e25bd68b 100644 --- a/libnavui-androidauto/src/main/java/com/mapbox/androidauto/settings/MapboxCarStorage.kt +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/settings/MapboxCarStorage.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.settings +package com.mapbox.navigation.ui.androidauto.settings import android.content.Context import android.content.SharedPreferences import androidx.car.app.CarContext class MapboxCarStorage internal constructor( - val carContext: CarContext + val carContext: CarContext, ) { private val sharedPreferences: SharedPreferences = carContext.getSharedPreferences(CAR_SETTINGS_PREFERENCES_NAME, Context.MODE_PRIVATE) diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/telemetry/MapboxCarTelemetry.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/telemetry/MapboxCarTelemetry.kt new file mode 100644 index 00000000000..c3b270f391c --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/telemetry/MapboxCarTelemetry.kt @@ -0,0 +1,17 @@ +package com.mapbox.navigation.ui.androidauto.telemetry + +import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.core.internal.telemetry.AndroidAutoEvent +import com.mapbox.navigation.core.internal.telemetry.postAndroidAutoEvent +import com.mapbox.navigation.core.lifecycle.MapboxNavigationObserver + +internal class MapboxCarTelemetry : MapboxNavigationObserver { + + override fun onAttached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.postAndroidAutoEvent(AndroidAutoEvent.CONNECTED) + } + + override fun onDetached(mapboxNavigation: MapboxNavigation) { + mapboxNavigation.postAndroidAutoEvent(AndroidAutoEvent.DISCONNECTED) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverExitOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverExitOptions.kt new file mode 100644 index 00000000000..035800bab74 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverExitOptions.kt @@ -0,0 +1,127 @@ +package com.mapbox.navigation.ui.androidauto.ui.maneuver.model + +import androidx.annotation.StyleRes +import androidx.core.widget.TextViewCompat + +/** + * Specifies options for styling [MapboxExitText]. + * + * @param textAppearance change the text appearance of exit text. + * @see [TextViewCompat.setTextAppearance] + * @param mutcdExitProperties defines the appearance of the exit drawables for countries following + * MUTCD convention + * @param viennaExitProperties defines the appearance of the exit drawables for countries following + * VIENNA convention + */ +class ManeuverExitOptions private constructor( + @StyleRes val textAppearance: Int, + val mutcdExitProperties: MapboxExitProperties.PropertiesMutcd, + val viennaExitProperties: MapboxExitProperties.PropertiesVienna, +) { + + /** + * @return the [Builder] that created the [ManeuverExitOptions] + */ + fun toBuilder() = Builder() + .textAppearance(textAppearance) + .mutcdExitProperties(mutcdExitProperties) + .viennaExitProperties(viennaExitProperties) + + /** + * Regenerate whenever a change is made + */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ManeuverExitOptions + + if (textAppearance != other.textAppearance) return false + if (mutcdExitProperties != other.mutcdExitProperties) return false + if (viennaExitProperties != other.viennaExitProperties) return false + + return true + } + + /** + * Regenerate whenever a change is made + */ + override fun hashCode(): Int { + var result = textAppearance.hashCode() + result = 31 * result + mutcdExitProperties.hashCode() + result = 31 * result + viennaExitProperties.hashCode() + return result + } + + /** + * Regenerate whenever a change is made + */ + override fun toString(): String { + return "ManeuverExitOptions(" + + "textAppearance=$textAppearance, " + + "mutcdExitProperties=$mutcdExitProperties, " + + "viennaExitProperties=$viennaExitProperties" + + ")" + } + + /** + * Builder of [ManeuverExitOptions] + */ + class Builder { + + private var textAppearance = 0 + private var mutcdExitProperties = MapboxExitProperties.PropertiesMutcd() + private var viennaExitProperties = MapboxExitProperties.PropertiesVienna() + + /** + * Allows you to change the text appearance of [PrimaryManeuver], [SecondaryManeuver] + * and [SubManeuver]. + * + * @see [TextViewCompat.setTextAppearance] + * @param textAppearance text settings + * @return Builder + */ + fun textAppearance(@StyleRes textAppearance: Int): Builder = apply { + this.textAppearance = textAppearance + } + + /** + * Specify the drawables you wish to render for an [ExitComponentNode] component contained + * in a [Maneuver]. These properties would be applied to countries following MUTCD + * convention + * + * @param mutcdExitProperties settings to exit properties + * @return Builder + */ + fun mutcdExitProperties( + mutcdExitProperties: MapboxExitProperties.PropertiesMutcd, + ): Builder = apply { + this.mutcdExitProperties = mutcdExitProperties + } + + /** + * Specify the drawables you wish to render for an [ExitComponentNode] component contained + * in a [Maneuver]. These properties would be applied to countries following VIENNA + * convention + * + * @param viennaExitProperties settings to exit properties + * @return Builder + */ + fun viennaExitProperties( + viennaExitProperties: MapboxExitProperties.PropertiesVienna, + ): Builder = apply { + this.viennaExitProperties = viennaExitProperties + } + + /** + * Build a new instance of [ManeuverExitOptions] + * + * @return ManeuverExitOptions + */ + fun build() = ManeuverExitOptions( + textAppearance = textAppearance, + mutcdExitProperties = mutcdExitProperties, + viennaExitProperties = viennaExitProperties, + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverPrimaryOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverPrimaryOptions.kt new file mode 100644 index 00000000000..c2f2654270a --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverPrimaryOptions.kt @@ -0,0 +1,103 @@ +package com.mapbox.navigation.ui.androidauto.ui.maneuver.model + +import androidx.annotation.StyleRes +import androidx.core.widget.TextViewCompat +import com.mapbox.navigation.ui.androidauto.R + +/** + * Specifies options for styling [MapboxPrimaryManeuver]. + * + * @param textAppearance change the text appearance of primary maneuver. + * @see [TextViewCompat.setTextAppearance] + * @param exitOptions options to style [MapboxExitText] in [MapboxPrimaryManeuver] + */ +class ManeuverPrimaryOptions private constructor( + @StyleRes val textAppearance: Int, + val exitOptions: ManeuverExitOptions, +) { + + /** + * @return the [Builder] that created the [ManeuverPrimaryOptions] + */ + fun toBuilder(): Builder = Builder() + .textAppearance(textAppearance) + .exitOptions(exitOptions) + + /** + * Regenerate whenever a change is made + */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ManeuverPrimaryOptions + + if (textAppearance != other.textAppearance) return false + if (exitOptions != other.exitOptions) return false + + return true + } + + /** + * Regenerate whenever a change is made + */ + override fun hashCode(): Int { + var result = textAppearance.hashCode() + result = 31 * result + exitOptions.hashCode() + return result + } + + /** + * Regenerate whenever a change is made + */ + override fun toString(): String { + return "ManeuverPrimaryOptions(" + + "textAppearance=$textAppearance, " + + "exitOptions=$exitOptions" + + ")" + } + + /** + * Builder of [ManeuverPrimaryOptions] + */ + class Builder { + + private var textAppearance = R.style.MapboxStylePrimaryManeuver + private var exitOptions = ManeuverExitOptions + .Builder() + .textAppearance(R.style.MapboxStyleExitTextForPrimary) + .build() + + /** + * Allows you to change the text appearance of [PrimaryManeuver] + * + * @see [TextViewCompat.setTextAppearance] + * @param textAppearance text settings + * @return Builder + */ + fun textAppearance(@StyleRes textAppearance: Int): Builder = apply { + this.textAppearance = textAppearance + } + + /** + * Allows you to specify the options for styling of [MapboxExitText] in + * [MapboxPrimaryManeuver] + * + * @param exitOptions settings to exit properties + * @return Builder + */ + fun exitOptions(exitOptions: ManeuverExitOptions): Builder = apply { + this.exitOptions = exitOptions + } + + /** + * Build a new instance of [ManeuverPrimaryOptions] + * + * @return ManeuverPrimaryOptions + */ + fun build() = ManeuverPrimaryOptions( + textAppearance = textAppearance, + exitOptions = exitOptions, + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverSecondaryOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverSecondaryOptions.kt new file mode 100644 index 00000000000..40fa839b405 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverSecondaryOptions.kt @@ -0,0 +1,102 @@ +package com.mapbox.navigation.ui.androidauto.ui.maneuver.model + +import androidx.annotation.StyleRes +import androidx.core.widget.TextViewCompat +import com.mapbox.navigation.ui.androidauto.R + +/** + * Specifies options for styling [MapboxSecondaryManeuver]. + * + * @param textAppearance change the text appearance of secondary maneuver. + * @see [TextViewCompat.setTextAppearance] + * @param exitOptions options to style [MapboxExitText] in [MapboxSecondaryManeuver] + */ +class ManeuverSecondaryOptions private constructor( + @StyleRes val textAppearance: Int, + val exitOptions: ManeuverExitOptions, +) { + + /** + * @return the [Builder] that created the [ManeuverSecondaryOptions] + */ + fun toBuilder(): Builder = Builder() + .textAppearance(textAppearance) + .exitOptions(exitOptions) + + /** + * Regenerate whenever a change is made + */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ManeuverSecondaryOptions + + if (textAppearance != other.textAppearance) return false + if (exitOptions != other.exitOptions) return false + + return true + } + + /** + * Regenerate whenever a change is made + */ + override fun hashCode(): Int { + var result = textAppearance.hashCode() + result = 31 * result + exitOptions.hashCode() + return result + } + + /** + * Regenerate whenever a change is made + */ + override fun toString(): String { + return "ManeuverSecondaryOptions(" + + "textAppearance=$textAppearance, " + + "exitOptions=$exitOptions" + + ")" + } + + /** + * Builder of [ManeuverSecondaryOptions] + */ + class Builder { + + private var textAppearance = R.style.MapboxStyleSecondaryManeuver + private var exitOptions = ManeuverExitOptions.Builder() + .textAppearance(R.style.MapboxStyleExitTextForSecondary) + .build() + + /** + * Allows you to change the text appearance of [SecondaryManeuver] + * + * @see [TextViewCompat.setTextAppearance] + * @param textAppearance text settings + * @return Builder + */ + fun textAppearance(@StyleRes textAppearance: Int): Builder = apply { + this.textAppearance = textAppearance + } + + /** + * Allows you to specify the options for styling of [MapboxExitText] in + * [MapboxSecondaryManeuver] + * + * @param exitOptions settings to exit properties + * @return Builder + */ + fun exitOptions(exitOptions: ManeuverExitOptions): Builder = apply { + this.exitOptions = exitOptions + } + + /** + * Build a new instance of [ManeuverSecondaryOptions] + * + * @return ManeuverSecondaryOptions + */ + fun build() = ManeuverSecondaryOptions( + textAppearance = textAppearance, + exitOptions = exitOptions, + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverSubOptions.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverSubOptions.kt new file mode 100644 index 00000000000..3739ac9784a --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/ManeuverSubOptions.kt @@ -0,0 +1,101 @@ +package com.mapbox.navigation.ui.androidauto.ui.maneuver.model + +import androidx.annotation.StyleRes +import androidx.core.widget.TextViewCompat +import com.mapbox.navigation.ui.androidauto.R + +/** + * Specifies options for styling [MapboxSubManeuver]. + * + * @param textAppearance change the text appearance of sub maneuver. + * @see [TextViewCompat.setTextAppearance] + * @param exitOptions options to style [MapboxExitText] in [MapboxSubManeuver] + */ +class ManeuverSubOptions private constructor( + @StyleRes val textAppearance: Int, + val exitOptions: ManeuverExitOptions, +) { + + /** + * @return the [Builder] that created the [ManeuverSubOptions] + */ + fun toBuilder(): Builder = Builder() + .textAppearance(textAppearance) + .exitOptions(exitOptions) + + /** + * Regenerate whenever a change is made + */ + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ManeuverSubOptions + + if (textAppearance != other.textAppearance) return false + if (exitOptions != other.exitOptions) return false + + return true + } + + /** + * Regenerate whenever a change is made + */ + override fun hashCode(): Int { + var result = textAppearance.hashCode() + result = 31 * result + exitOptions.hashCode() + return result + } + + /** + * Regenerate whenever a change is made + */ + override fun toString(): String { + return "ManeuverSubOptions(" + + "textAppearance=$textAppearance, " + + "exitOptions=$exitOptions" + + ")" + } + + /** + * Builder of [ManeuverSubOptions] + */ + class Builder { + + private var textAppearance = R.style.MapboxStyleSubManeuver + private var exitOptions = ManeuverExitOptions.Builder() + .textAppearance(R.style.MapboxStyleExitTextForSub) + .build() + + /** + * Allows you to change the text appearance of [SubManeuver] + * + * @see [TextViewCompat.setTextAppearance] + * @param textAppearance text settings + * @return Builder + */ + fun textAppearance(@StyleRes textAppearance: Int): Builder = apply { + this.textAppearance = textAppearance + } + + /** + * Allows you to specify the options for styling of [MapboxExitText] in [MapboxSubManeuver] + * + * @param exitOptions settings to exit properties + * @return Builder + */ + fun exitOptions(exitOptions: ManeuverExitOptions): Builder = apply { + this.exitOptions = exitOptions + } + + /** + * Build a new instance of [ManeuverSubOptions] + * + * @return ManeuverSecondaryOptions + */ + fun build() = ManeuverSubOptions( + textAppearance = textAppearance, + exitOptions = exitOptions, + ) + } +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/MapboxExitProperties.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/MapboxExitProperties.kt new file mode 100644 index 00000000000..34c674fdcc5 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/model/MapboxExitProperties.kt @@ -0,0 +1,111 @@ +package com.mapbox.navigation.ui.androidauto.ui.maneuver.model + +import androidx.annotation.DrawableRes +import com.mapbox.api.directions.v5.models.ManeuverModifier +import com.mapbox.navigation.tripdata.R + +/** + * A class that allows you to define various properties you wish to use to render for [ExitComponentNode] + * of a given [PrimaryManeuver], [SecondaryManeuver] or [SubManeuver]. + * The priority of fallback is in the order: + * - shouldFallbackWithDrawable + * - shouldFallbackWithText + * If both are set to false, no fallback will be applied and only the exit text associated with the + * [Maneuver] will be rendered. + * + * @param shouldFallbackWithDrawable set to true if you want to use [fallbackDrawable] in case + * if the [Maneuver] contains an [ExitComponentNode] with a [ManeuverModifier] value other than left + * or right. + * @param shouldFallbackWithText set to true if you don't want to use a [fallbackDrawable] but prepend + * text "Exit" to the exit number in the [Maneuver] + * @param exitBackground background to be set to the text view + * @param fallbackDrawable drawable to be used in case [ManeuverModifier] has a different value other + * than left or right + * @param exitLeftDrawable drawable to be used when [ManeuverModifier] is left + * @param exitRightDrawable drawable to be used when [ManeuverModifier] is right + */ +sealed class MapboxExitProperties( + val shouldFallbackWithText: Boolean, + val shouldFallbackWithDrawable: Boolean, + @DrawableRes val exitBackground: Int, + @DrawableRes val fallbackDrawable: Int, + @DrawableRes val exitLeftDrawable: Int, + @DrawableRes val exitRightDrawable: Int, +) { + + /** + * An implementation of [MapboxExitProperties] that allows you to define various properties you + * wish to use to render for [ExitComponentNode] of a given [PrimaryManeuver], [SecondaryManeuver] + * or [SubManeuver]. The properties specified in this implementation will be used in countries + * that follow MUTCD convention. + * The priority of fallback is in the order: + * - shouldFallbackWithDrawable + * - shouldFallbackWithText + * If both are set to false, no fallback will be applied and only the exit text associated with the + * [Maneuver] will be rendered. + * + * @param shouldFallbackWithDrawable set to true if you want to use [fallbackDrawable] in case + * if the [Maneuver] contains an [ExitComponentNode] with a [ManeuverModifier] value other than left + * or right. + * @param shouldFallbackWithText set to true if you don't want to use a [fallbackDrawable] but prepend + * text "Exit" to the exit number in the [Maneuver] + * @param exitBackground background to be set to the text view + * @param fallbackDrawable drawable to be used in case [ManeuverModifier] has a different value other + * than left or right + * @param exitLeftDrawable drawable to be used when [ManeuverModifier] is left + * @param exitRightDrawable drawable to be used when [ManeuverModifier] is right + */ + class PropertiesMutcd( + shouldFallbackWithText: Boolean = false, + shouldFallbackWithDrawable: Boolean = true, + @DrawableRes exitBackground: Int = R.drawable.mapbox_exit_board_background, + @DrawableRes fallbackDrawable: Int = R.drawable.mapbox_ic_exit_arrow_right_mutcd, + @DrawableRes exitLeftDrawable: Int = R.drawable.mapbox_ic_exit_arrow_left_mutcd, + @DrawableRes exitRightDrawable: Int = R.drawable.mapbox_ic_exit_arrow_right_mutcd, + ) : MapboxExitProperties( + shouldFallbackWithText, + shouldFallbackWithDrawable, + exitBackground, + fallbackDrawable, + exitLeftDrawable, + exitRightDrawable, + ) + + /** + * An implementation of [MapboxExitProperties] that allows you to define various properties you + * wish to use to render for [ExitComponentNode] of a given [PrimaryManeuver], [SecondaryManeuver] + * or [SubManeuver]. The properties specified in this implementation will be used in countries + * that follow VIENNA convention. + * The priority of fallback is in the order: + * - shouldFallbackWithDrawable + * - shouldFallbackWithText + * If both are set to false, no fallback will be applied and only the exit text associated with the + * [Maneuver] will be rendered. + * + * @param shouldFallbackWithDrawable set to true if you want to use [fallbackDrawable] in case + * if the [Maneuver] contains an [ExitComponentNode] with a [ManeuverModifier] value other than left + * or right. + * @param shouldFallbackWithText set to true if you don't want to use a [fallbackDrawable] but prepend + * text "Exit" to the exit number in the [Maneuver] + * @param exitBackground background to be set to the text view + * @param fallbackDrawable drawable to be used in case [ManeuverModifier] has a different value other + * than left or right + * @param exitLeftDrawable drawable to be used when [ManeuverModifier] is left + * @param exitRightDrawable drawable to be used when [ManeuverModifier] is right + */ + class PropertiesVienna( + shouldFallbackWithText: Boolean = false, + shouldFallbackWithDrawable: Boolean = true, + @DrawableRes exitBackground: Int = R.drawable.mapbox_exit_board_background, + @DrawableRes fallbackDrawable: Int = R.drawable.mapbox_ic_exit_arrow_left_vienna, + @DrawableRes exitLeftDrawable: Int = R.drawable.mapbox_ic_exit_arrow_left_vienna, + @DrawableRes exitRightDrawable: Int = R.drawable.mapbox_ic_exit_arrow_right_vienna, + ) : MapboxExitProperties( + shouldFallbackWithText, + shouldFallbackWithDrawable, + exitBackground, + fallbackDrawable, + exitLeftDrawable, + exitRightDrawable, + ) +} diff --git a/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/view/MapboxExitText.kt b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/view/MapboxExitText.kt new file mode 100644 index 00000000000..3a613b748a3 --- /dev/null +++ b/androidauto/src/main/java/com/mapbox/navigation/ui/androidauto/ui/maneuver/view/MapboxExitText.kt @@ -0,0 +1,234 @@ +package com.mapbox.navigation.ui.androidauto.ui.maneuver.view + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import android.util.AttributeSet +import androidx.annotation.StyleRes +import androidx.annotation.UiThread +import androidx.appcompat.widget.AppCompatTextView +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.toBitmap +import androidx.core.graphics.drawable.toDrawable +import androidx.core.widget.TextViewCompat +import com.mapbox.api.directions.v5.models.BannerComponents +import com.mapbox.api.directions.v5.models.ManeuverModifier +import com.mapbox.navigation.tripdata.R +import com.mapbox.navigation.tripdata.maneuver.model.ComponentNode +import com.mapbox.navigation.tripdata.maneuver.model.ExitNumberComponentNode +import com.mapbox.navigation.ui.androidauto.ui.maneuver.model.MapboxExitProperties +import com.mapbox.navigation.ui.utils.internal.ifNonNull + +/** + * Default Exit View that renders exit number in a specific style. + * @property leftDrawable Drawable? denotes the style for exit sign that is on the left. + * @property rightDrawable Drawable? denotes the style for exit sign that is on the right. + * @property exitBackground Drawable? denotes the exit board style. + */ +@UiThread +class MapboxExitText : AppCompatTextView { + + /** + * + * @param context Context + * @constructor + */ + constructor(context: Context) : super(context) + + /** + * + * @param context Context + * @param attrs AttributeSet? + * @constructor + */ + constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) + + /** + * + * @param context Context + * @param attrs AttributeSet? + * @param defStyleAttr Int + * @constructor + */ + constructor( + context: Context, + attrs: AttributeSet?, + defStyleAttr: Int, + ) : super(context, attrs, defStyleAttr) + + private var leftDrawable = ContextCompat.getDrawable( + context, + R.drawable.mapbox_ic_exit_arrow_left_mutcd, + ) + private var rightDrawable = ContextCompat.getDrawable( + context, + R.drawable.mapbox_ic_exit_arrow_right_mutcd, + ) + private var exitBackground = ContextCompat.getDrawable( + context, + R.drawable.mapbox_exit_board_background, + ) + private var exitProperties: MapboxExitProperties? = null + + /** + * Invoke the method to set the properties you want [MapboxExitText] to use to render + * exit. + * @param properties MapboxExitProperties + */ + fun updateExitProperties( + properties: MapboxExitProperties?, + ) { + this.exitProperties = properties + if (properties != null) { + this.exitBackground = ContextCompat.getDrawable(context, properties.exitBackground) + } + } + + /** + * Allows you to change the text appearance of [MapboxPrimaryManeuver], [MapboxSecondaryManeuver] + * and [MapboxSubManeuver]. + * @see [TextViewCompat.setTextAppearance] + * @param style Int + */ + fun updateTextAppearance(@StyleRes style: Int) { + TextViewCompat.setTextAppearance(this, style) + } + + /** + * Invoke the method to set the exit number to the view. + * @param modifier String? represents either [ManeuverModifier.LEFT] or [ManeuverModifier.RIGHT]. + * Default value is [ManeuverModifier.LEFT] + * @param exit ExitNumberComponentNode [ComponentNode] of the type [BannerComponents.EXIT_NUMBER] + */ + fun setExit(modifier: String?, exit: ExitNumberComponentNode) { + val exitText = when (modifier) { + ManeuverModifier.LEFT -> { + val drawable = ifNonNull(this.exitProperties?.exitLeftDrawable) { leftDrawable -> + ContextCompat.getDrawable(context, leftDrawable).adjustDrawableHeight() + } ?: leftDrawable.adjustDrawableHeight() + setCompoundDrawablesWithIntrinsicBounds( + drawable, + null, + null, + null, + ) + exit.text + } + ManeuverModifier.RIGHT -> { + val drawable = ifNonNull(this.exitProperties?.exitRightDrawable) { rightDrawable -> + ContextCompat.getDrawable(context, rightDrawable).adjustDrawableHeight() + } ?: rightDrawable.adjustDrawableHeight() + setCompoundDrawablesWithIntrinsicBounds( + null, + null, + drawable, + null, + ) + exit.text + } + else -> { + if (exitProperties == null) { + setCompoundDrawablesWithIntrinsicBounds( + null, + null, + rightDrawable, + null, + ) + exit.text + } else { + getFallbackExitText(exit, exitProperties!!) + } + } + } + text = exitText + background = exitBackground + } + + /** + * Invoke to access the [MapboxExitText] in the form of [Bitmap] + * @return Bitmap + */ + fun getViewAsBitmap(): Bitmap { + val measureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED) + measure(measureSpec, measureSpec) + layout(0, 0, measuredWidth, measuredHeight) + val bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888) + bitmap.eraseColor(Color.TRANSPARENT) + val canvas = Canvas(bitmap) + draw(canvas) + return bitmap + } + + /** + * Invoke to convert a given [Bitmap] to a [Drawable] of the desired height. + * @param bitmap Bitmap + * @param drawableHeight Int + * @return Drawable + */ + fun styleExitWith(bitmap: Bitmap, drawableHeight: Int): Drawable { + val drawable: Drawable = BitmapDrawable(context.resources, bitmap) + val right = (drawableHeight * bitmap.width.toDouble() / bitmap.height.toDouble()).toInt() + drawable.setBounds(0, 0, right, drawableHeight) + return drawable + } + + private fun getFallbackExitText( + exit: ExitNumberComponentNode, + exitProperties: MapboxExitProperties, + ): String { + when (exitProperties) { + is MapboxExitProperties.PropertiesMutcd -> { + return when { + exitProperties.shouldFallbackWithDrawable -> { + setCompoundDrawablesWithIntrinsicBounds( + null, + null, + ContextCompat.getDrawable( + context, + exitProperties.fallbackDrawable, + ).adjustDrawableHeight(), + null, + ) + exit.text + } + exitProperties.shouldFallbackWithText -> { + "Exit ".plus(exit.text) + } + else -> { + exit.text + } + } + } + is MapboxExitProperties.PropertiesVienna -> { + return when { + exitProperties.shouldFallbackWithDrawable -> { + setCompoundDrawablesWithIntrinsicBounds( + ContextCompat.getDrawable( + context, + exitProperties.fallbackDrawable, + ).adjustDrawableHeight(), + null, + null, + null, + ) + exit.text + } + exitProperties.shouldFallbackWithText -> { + "Exit ".plus(exit.text) + } + else -> { + exit.text + } + } + } + } + } + + private fun Drawable?.adjustDrawableHeight(): Drawable? { + val bitmap = this?.toBitmap(lineHeight, lineHeight, Bitmap.Config.ARGB_8888) + return bitmap?.toDrawable(context.resources) + } +} diff --git a/libnavui-androidauto/src/main/res/drawable/ic_baseline_location.xml b/androidauto/src/main/res/drawable/ic_baseline_location.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_baseline_location.xml rename to androidauto/src/main/res/drawable/ic_baseline_location.xml diff --git a/libnavui-androidauto/src/main/res/drawable/ic_launcher_background.xml b/androidauto/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_launcher_background.xml rename to androidauto/src/main/res/drawable/ic_launcher_background.xml diff --git a/libnavui-androidauto/src/main/res/drawable/ic_pan_24.xml b/androidauto/src/main/res/drawable/ic_pan_24.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_pan_24.xml rename to androidauto/src/main/res/drawable/ic_pan_24.xml diff --git a/libnavui-androidauto/src/main/res/drawable/ic_recenter_24.xml b/androidauto/src/main/res/drawable/ic_recenter_24.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_recenter_24.xml rename to androidauto/src/main/res/drawable/ic_recenter_24.xml diff --git a/libnavui-androidauto/src/main/res/drawable/ic_route_overview.xml b/androidauto/src/main/res/drawable/ic_route_overview.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_route_overview.xml rename to androidauto/src/main/res/drawable/ic_route_overview.xml diff --git a/androidauto/src/main/res/drawable/ic_search_black36dp.png b/androidauto/src/main/res/drawable/ic_search_black36dp.png new file mode 100644 index 00000000000..ef0931472ae Binary files /dev/null and b/androidauto/src/main/res/drawable/ic_search_black36dp.png differ diff --git a/androidauto/src/main/res/drawable/ic_settings.png b/androidauto/src/main/res/drawable/ic_settings.png new file mode 100644 index 00000000000..828fc1436ea Binary files /dev/null and b/androidauto/src/main/res/drawable/ic_settings.png differ diff --git a/libnavui-androidauto/src/main/res/drawable/ic_zoom_in_24.xml b/androidauto/src/main/res/drawable/ic_zoom_in_24.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_zoom_in_24.xml rename to androidauto/src/main/res/drawable/ic_zoom_in_24.xml diff --git a/libnavui-androidauto/src/main/res/drawable/ic_zoom_out_24.xml b/androidauto/src/main/res/drawable/ic_zoom_out_24.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/ic_zoom_out_24.xml rename to androidauto/src/main/res/drawable/ic_zoom_out_24.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_confusing_audio.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_confusing_audio.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_confusing_audio.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_confusing_audio.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_incorrect_visual.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_incorrect_visual.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_incorrect_visual.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_incorrect_visual.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_negative.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_negative.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_negative.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_negative.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_other_issue.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_other_issue.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_other_issue.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_other_issue.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positioning_issue.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positioning_issue.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positioning_issue.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positioning_issue.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positive.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positive.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positive.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_positive.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_road_closure.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_road_closure.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_road_closure.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_road_closure.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_route_not_allowed.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_route_not_allowed.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_route_not_allowed.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_route_not_allowed.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_routing_error.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_routing_error.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_routing_error.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_routing_error.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_traffic_issue.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_feedback_traffic_issue.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_feedback_traffic_issue.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_feedback_traffic_issue.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_volume_off.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_volume_off.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_volume_off.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_volume_off.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_volume_on.xml b/androidauto/src/main/res/drawable/mapbox_car_ic_volume_on.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_car_ic_volume_on.xml rename to androidauto/src/main/res/drawable/mapbox_car_ic_volume_on.xml diff --git a/androidauto/src/main/res/drawable/mapbox_navigation_puck_icon.xml b/androidauto/src/main/res/drawable/mapbox_navigation_puck_icon.xml new file mode 100644 index 00000000000..efcb82ac771 --- /dev/null +++ b/androidauto/src/main/res/drawable/mapbox_navigation_puck_icon.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_address.xml b/androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_address.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_address.xml rename to androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_address.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_location.xml b/androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_location.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_location.xml rename to androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_location.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_name.xml b/androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_name.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_name.xml rename to androidauto/src/main/res/drawable/mapbox_search_sdk_ic_feedback_reason_incorrect_name.xml diff --git a/libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_three_dots.xml b/androidauto/src/main/res/drawable/mapbox_search_sdk_ic_three_dots.xml similarity index 100% rename from libnavui-androidauto/src/main/res/drawable/mapbox_search_sdk_ic_three_dots.xml rename to androidauto/src/main/res/drawable/mapbox_search_sdk_ic_three_dots.xml diff --git a/androidauto/src/main/res/drawable/marker_icon_20px_red.png b/androidauto/src/main/res/drawable/marker_icon_20px_red.png new file mode 100644 index 00000000000..bdf59bcd8e5 Binary files /dev/null and b/androidauto/src/main/res/drawable/marker_icon_20px_red.png differ diff --git a/androidauto/src/main/res/values-night/colors.xml b/androidauto/src/main/res/values-night/colors.xml new file mode 100644 index 00000000000..fdf261a83dc --- /dev/null +++ b/androidauto/src/main/res/values-night/colors.xml @@ -0,0 +1,11 @@ + + + + + + #000000 + #F8F8F8 + #FFFFFF + #000000 + + \ No newline at end of file diff --git a/libnavui-androidauto/src/main/res/values-pl/strings.xml b/androidauto/src/main/res/values-pl/strings.xml similarity index 100% rename from libnavui-androidauto/src/main/res/values-pl/strings.xml rename to androidauto/src/main/res/values-pl/strings.xml diff --git a/androidauto/src/main/res/values/colors.xml b/androidauto/src/main/res/values/colors.xml new file mode 100644 index 00000000000..bc064908da6 --- /dev/null +++ b/androidauto/src/main/res/values/colors.xml @@ -0,0 +1,19 @@ + + + + #F0F3F8 + #2A4E7A + #2B91FF + #99143C6D + #FFFFFF + #2B91FF + #273D56 + #CCE24A69 + + + + #FFFFFF + #3C3E3E + #000000 + #FFFFFF + \ No newline at end of file diff --git a/libnavui-androidauto/src/main/res/values/strings.xml b/androidauto/src/main/res/values/strings.xml similarity index 100% rename from libnavui-androidauto/src/main/res/values/strings.xml rename to androidauto/src/main/res/values/strings.xml diff --git a/androidauto/src/main/res/values/styles.xml b/androidauto/src/main/res/values/styles.xml new file mode 100644 index 00000000000..a3f240687d6 --- /dev/null +++ b/androidauto/src/main/res/values/styles.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libnavui-androidauto/src/main/res/xml/automotive_app_desc.xml b/androidauto/src/main/res/xml/automotive_app_desc.xml similarity index 100% rename from libnavui-androidauto/src/main/res/xml/automotive_app_desc.xml rename to androidauto/src/main/res/xml/automotive_app_desc.xml diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/MapboxCarContextTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/MapboxCarContextTest.kt similarity index 92% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/MapboxCarContextTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/MapboxCarContextTest.kt index da539d1d7c6..c457d632c29 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/MapboxCarContextTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/MapboxCarContextTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto +package com.mapbox.navigation.ui.androidauto import androidx.car.app.CarContext import androidx.car.app.ScreenManager @@ -6,11 +6,15 @@ import androidx.car.app.Session import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleRegistry import com.mapbox.maps.extension.androidauto.MapboxCarMap +import com.mapbox.navigation.testing.MainCoroutineRule import io.mockk.every import io.mockk.mockk +import kotlinx.coroutines.ExperimentalCoroutinesApi import org.junit.Before +import org.junit.Rule import org.junit.Test +@OptIn(ExperimentalCoroutinesApi::class) class MapboxCarContextTest { private val session: Session = mockk() @@ -21,6 +25,9 @@ class MapboxCarContextTest { every { getCarService(ScreenManager::class.java) } returns mockk() } + @get:Rule + val mainCoroutineRule = MainCoroutineRule() + @Before fun setup() { every { session.lifecycle } returns lifecycleRegistry diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/action/MapboxScreenActionStripProviderTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/action/MapboxScreenActionStripProviderTest.kt similarity index 96% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/action/MapboxScreenActionStripProviderTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/action/MapboxScreenActionStripProviderTest.kt index 3b1aa4357d8..89f0ead4e90 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/action/MapboxScreenActionStripProviderTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/action/MapboxScreenActionStripProviderTest.kt @@ -1,9 +1,9 @@ -package com.mapbox.androidauto.action +package com.mapbox.navigation.ui.androidauto.action import androidx.car.app.Screen import androidx.car.app.model.ActionStrip -import com.mapbox.androidauto.screenmanager.MapboxScreen import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen import io.mockk.mockk import org.junit.Assert.assertEquals import org.junit.Test diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkParserTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkParserTest.kt similarity index 88% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkParserTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkParserTest.kt index 3ea1706a141..b4faaf2f365 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkParserTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkParserTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.deeplink +package com.mapbox.navigation.ui.androidauto.deeplink import org.junit.Assert.assertEquals import org.junit.Test diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt similarity index 94% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt index 164cc7b1627..fd752829a76 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/deeplink/GeoDeeplinkPlacesListOnMapProviderTest.kt @@ -1,12 +1,12 @@ -package com.mapbox.androidauto.deeplink +package com.mapbox.navigation.ui.androidauto.deeplink -import android.location.Location -import com.mapbox.androidauto.location.CarLocationProvider import com.mapbox.api.geocoding.v5.models.CarmenFeature import com.mapbox.api.geocoding.v5.models.GeocodingResponse +import com.mapbox.common.location.Location import com.mapbox.geojson.Point import com.mapbox.navigation.core.geodeeplink.GeoDeeplink import com.mapbox.navigation.testing.MainCoroutineRule +import com.mapbox.navigation.ui.androidauto.location.CarLocationProvider import io.mockk.coEvery import io.mockk.every import io.mockk.mockk diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/map/MapboxCarMapLoaderTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/map/MapboxCarMapLoaderTest.kt similarity index 79% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/map/MapboxCarMapLoaderTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/map/MapboxCarMapLoaderTest.kt index 621f59ef3df..78e9e6ab67b 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/map/MapboxCarMapLoaderTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/map/MapboxCarMapLoaderTest.kt @@ -1,15 +1,18 @@ -package com.mapbox.androidauto.map +package com.mapbox.navigation.ui.androidauto.map import com.mapbox.maps.Style import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.maps.extension.style.StyleContract +import com.mapbox.maps.module.TelemetryEvent import com.mapbox.navigation.testing.LoggingFrontendTestRule import com.mapbox.navigation.ui.maps.NavigationStyles import io.mockk.CapturingSlot import io.mockk.every import io.mockk.mockk +import io.mockk.mockkObject import io.mockk.slot import org.junit.Assert.assertEquals +import org.junit.Before import org.junit.Rule import org.junit.Test @@ -18,7 +21,15 @@ class MapboxCarMapLoaderTest { @get:Rule val loggerRule = LoggingFrontendTestRule() - private val sut = MapboxCarMapLoader() + private lateinit var sut: MapboxCarMapLoader + + @Before + fun setUp() { + mockkObject(TelemetryEvent.Companion) { + every { TelemetryEvent.Companion.create(any()) } returns mockk(relaxed = true) + sut = MapboxCarMapLoader() + } + } @Test fun `functions can be called while map is detached`() { @@ -37,7 +48,7 @@ class MapboxCarMapLoaderTest { sut.onAttached(mapSurface) - assertEquals(NavigationStyles.NAVIGATION_DAY_STYLE, styleExtensionSlot.captured.styleUri) + assertEquals(NavigationStyles.NAVIGATION_DAY_STYLE, styleExtensionSlot.captured.style) } @Test @@ -50,7 +61,7 @@ class MapboxCarMapLoaderTest { sut.onAttached(mapSurface) - assertEquals(NavigationStyles.NAVIGATION_NIGHT_STYLE, styleExtensionSlot.captured.styleUri) + assertEquals(NavigationStyles.NAVIGATION_NIGHT_STYLE, styleExtensionSlot.captured.style) } @Test @@ -61,12 +72,12 @@ class MapboxCarMapLoaderTest { every { isDarkMode } returns false } val darkOverride: StyleContract.StyleExtension = mockk { - every { styleUri } returns "test-light-override" + every { style } returns "test-light-override" } sut.setLightStyleOverride(darkOverride).onAttached(mapSurface) - assertEquals("test-light-override", styleExtensionSlot.captured.styleUri) + assertEquals("test-light-override", styleExtensionSlot.captured.style) } @Test @@ -77,43 +88,43 @@ class MapboxCarMapLoaderTest { every { isDarkMode } returns true } val darkOverride: StyleContract.StyleExtension = mockk { - every { styleUri } returns "test-dark-override" + every { style } returns "test-dark-override" } sut.setDarkStyleOverride(darkOverride).onAttached(mapSurface) - assertEquals("test-dark-override", styleExtensionSlot.captured.styleUri) + assertEquals("test-dark-override", styleExtensionSlot.captured.style) } @Test fun `getStyleExtension will return the default styles`() { assertEquals( NavigationStyles.NAVIGATION_DAY_STYLE, - sut.getStyleExtension(false).styleUri + sut.getStyleExtension(false).style, ) assertEquals( NavigationStyles.NAVIGATION_NIGHT_STYLE, - sut.getStyleExtension(true).styleUri + sut.getStyleExtension(true).style, ) } @Test fun `getStyleExtension will return the overridden styles`() { - sut.setLightStyleOverride(mockk { every { styleUri } returns "test-light-override" }) - sut.setDarkStyleOverride(mockk { every { styleUri } returns "test-dark-override" }) + sut.setLightStyleOverride(mockk { every { style } returns "test-light-override" }) + sut.setDarkStyleOverride(mockk { every { style } returns "test-dark-override" }) assertEquals( "test-light-override", - sut.getStyleExtension(false).styleUri + sut.getStyleExtension(false).style, ) assertEquals( "test-dark-override", - sut.getStyleExtension(true).styleUri + sut.getStyleExtension(true).style, ) } private fun mockMapboxCarMapSurface( - styleExtensionSlot: CapturingSlot + styleExtensionSlot: CapturingSlot, ): MapboxCarMapSurface { return mockk { every { mapSurface } returns mockk { @@ -122,7 +133,7 @@ class MapboxCarMapLoaderTest { loadStyle( capture(styleExtensionSlot), any(), - any() + any(), ) } answers { secondArg().onStyleLoaded(mockk(relaxed = true)) diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarArrivalTriggerTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarArrivalTriggerTest.kt similarity index 78% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarArrivalTriggerTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarArrivalTriggerTest.kt index 6afc0daa627..bf31eab2b4d 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarArrivalTriggerTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarArrivalTriggerTest.kt @@ -1,10 +1,11 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.arrival.ArrivalObserver import com.mapbox.navigation.testing.LoggingFrontendTestRule +import com.mapbox.navigation.testing.MainCoroutineRule +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager import io.mockk.every import io.mockk.just import io.mockk.mockk @@ -13,16 +14,21 @@ import io.mockk.runs import io.mockk.slot import io.mockk.unmockkAll import io.mockk.verify +import kotlinx.coroutines.ExperimentalCoroutinesApi import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test +@OptIn(ExperimentalCoroutinesApi::class) class CarArrivalTriggerTest { @get:Rule val loggerRule = LoggingFrontendTestRule() + @get:Rule + val mainCoroutineRule = MainCoroutineRule() + private val sut = CarArrivalTrigger() @Before diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarDistanceFormatterDelegateTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatterDelegateTest.kt similarity index 98% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarDistanceFormatterDelegateTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatterDelegateTest.kt index 84aeb99fd88..e44d5c0f1b7 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarDistanceFormatterDelegateTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarDistanceFormatterDelegateTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.car.app.model.Distance import com.mapbox.navigation.base.formatter.Rounding @@ -23,7 +23,7 @@ class CarDistanceFormatterDelegateTest { val mapper = CarDistanceFormatterDelegate(UnitType.IMPERIAL, Rounding.INCREMENT_FIFTY) val distance = mapper.carDistance( - CarDistanceFormatterDelegate.smallDistanceMeters - 1 + CarDistanceFormatterDelegate.smallDistanceMeters - 1, ) // This is also testing that feet distance is always a whole number @@ -36,10 +36,10 @@ class CarDistanceFormatterDelegateTest { val mapper = CarDistanceFormatterDelegate(UnitType.IMPERIAL, Rounding.INCREMENT_FIFTY) val smallDistance = mapper.carDistance( - CarDistanceFormatterDelegate.smallDistanceMeters + 1 + CarDistanceFormatterDelegate.smallDistanceMeters + 1, ) val mediumDistance = mapper.carDistance( - CarDistanceFormatterDelegate.mediumDistanceMeters - 1 + CarDistanceFormatterDelegate.mediumDistanceMeters - 1, ) assertEquals(0.249169771, smallDistance.displayDistance, 0.001) @@ -53,7 +53,7 @@ class CarDistanceFormatterDelegateTest { val mapper = CarDistanceFormatterDelegate(UnitType.IMPERIAL, Rounding.INCREMENT_FIVE) val distance = mapper.carDistance( - CarDistanceFormatterDelegate.mediumDistanceMeters + 1 + CarDistanceFormatterDelegate.mediumDistanceMeters + 1, ) assertEquals(6.2143, distance.displayDistance, 0.001) @@ -95,10 +95,10 @@ class CarDistanceFormatterDelegateTest { val mapper = CarDistanceFormatterDelegate(UnitType.METRIC, Rounding.INCREMENT_FIFTY) val smallDistance = mapper.carDistance( - CarDistanceFormatterDelegate.smallDistanceMeters + 1 + CarDistanceFormatterDelegate.smallDistanceMeters + 1, ) val mediumDistance = mapper.carDistance( - CarDistanceFormatterDelegate.mediumDistanceMeters - 1 + CarDistanceFormatterDelegate.mediumDistanceMeters - 1, ) assertEquals(0.401, smallDistance.displayDistance, 0.0) @@ -112,7 +112,7 @@ class CarDistanceFormatterDelegateTest { val mapper = CarDistanceFormatterDelegate(UnitType.METRIC, Rounding.INCREMENT_FIFTY) val distance = mapper.carDistance( - CarDistanceFormatterDelegate.mediumDistanceMeters + 1 + CarDistanceFormatterDelegate.mediumDistanceMeters + 1, ) assertEquals(10.001, distance.displayDistance, 0.001) diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarLocationsOverviewCameraTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarLocationsOverviewCameraTest.kt similarity index 91% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarLocationsOverviewCameraTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarLocationsOverviewCameraTest.kt index fcd761be4a8..be420e0ddd6 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarLocationsOverviewCameraTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarLocationsOverviewCameraTest.kt @@ -1,7 +1,5 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation -import com.mapbox.androidauto.testing.CarAppTestRule -import com.mapbox.androidauto.testing.MapboxRobolectricTestRunner import com.mapbox.maps.CameraOptions import com.mapbox.maps.MapSurface import com.mapbox.maps.MapboxMap @@ -9,6 +7,8 @@ import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin import com.mapbox.maps.plugin.animation.camera import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.ui.androidauto.testing.CarAppTestRule +import com.mapbox.navigation.ui.androidauto.testing.MapboxRobolectricTestRunner import io.mockk.every import io.mockk.mockk import io.mockk.verify diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationEtaMapperTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationEtaMapperTest.kt similarity index 88% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationEtaMapperTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationEtaMapperTest.kt index b1e85287327..7a5bc7b8067 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationEtaMapperTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationEtaMapperTest.kt @@ -1,9 +1,9 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import android.os.Build import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.ui.tripprogress.api.MapboxTripProgressApi -import com.mapbox.navigation.ui.tripprogress.model.TripProgressUpdateValue +import com.mapbox.navigation.tripdata.progress.api.MapboxTripProgressApi +import com.mapbox.navigation.tripdata.progress.model.TripProgressUpdateValue import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationInfoMapperTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoMapperTest.kt similarity index 84% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationInfoMapperTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoMapperTest.kt index 53f327de81b..2e96a1144ff 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationInfoMapperTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoMapperTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import android.content.Context import android.graphics.Bitmap @@ -11,24 +11,24 @@ import androidx.car.app.navigation.model.LaneDirection import androidx.car.app.navigation.model.RoutingInfo import androidx.core.graphics.drawable.IconCompat import androidx.test.core.app.ApplicationProvider -import com.mapbox.androidauto.navigation.lanes.CarLanesImage -import com.mapbox.androidauto.navigation.lanes.CarLanesImageRenderer -import com.mapbox.androidauto.navigation.maneuver.CarManeuverIconRenderer -import com.mapbox.androidauto.navigation.maneuver.CarManeuverInstructionRenderer import com.mapbox.api.directions.v5.models.ManeuverModifier import com.mapbox.api.directions.v5.models.StepManeuver import com.mapbox.bindgen.ExpectedFactory import com.mapbox.geojson.Point import com.mapbox.navigation.base.ExperimentalMapboxNavigationAPI import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.ui.maneuver.model.Component -import com.mapbox.navigation.ui.maneuver.model.LaneFactory -import com.mapbox.navigation.ui.maneuver.model.LaneIndicator -import com.mapbox.navigation.ui.maneuver.model.Maneuver -import com.mapbox.navigation.ui.maneuver.model.ManeuverFactory -import com.mapbox.navigation.ui.maneuver.model.PrimaryManeuverFactory -import com.mapbox.navigation.ui.maneuver.model.RoadShieldComponentNode -import com.mapbox.navigation.ui.maneuver.model.SecondaryManeuverFactory +import com.mapbox.navigation.tripdata.maneuver.model.Component +import com.mapbox.navigation.tripdata.maneuver.model.LaneFactory +import com.mapbox.navigation.tripdata.maneuver.model.LaneIndicator +import com.mapbox.navigation.tripdata.maneuver.model.Maneuver +import com.mapbox.navigation.tripdata.maneuver.model.ManeuverFactory +import com.mapbox.navigation.tripdata.maneuver.model.PrimaryManeuverFactory +import com.mapbox.navigation.tripdata.maneuver.model.RoadShieldComponentNode +import com.mapbox.navigation.tripdata.maneuver.model.SecondaryManeuverFactory +import com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImage +import com.mapbox.navigation.ui.androidauto.navigation.lanes.CarLanesImageRenderer +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverIconRenderer +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverInstructionRenderer import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionValue import io.mockk.every import io.mockk.mockk @@ -69,7 +69,7 @@ class CarNavigationInfoMapperTest { context, instructionRenderer, iconRenderer, - imageGenerator + imageGenerator, ) } @@ -90,7 +90,7 @@ class CarNavigationInfoMapperTest { expectedManeuvers = ExpectedFactory.createError(mockk()), routeShields = emptyList(), routeProgress = routeProgress, - junctionValue = null + junctionValue = null, ) assertNull(result) @@ -103,27 +103,27 @@ class CarNavigationInfoMapperTest { val renderedSecondaryInstruction = "rendered secondary maneuver instruction" given( renderedPrimaryInstruction = renderedPrimaryInstruction, - renderedSecondaryInstruction = renderedSecondaryInstruction + renderedSecondaryInstruction = renderedSecondaryInstruction, ) val result = sut.mapNavigationInfo( expectedManeuvers = ExpectedFactory.createValue(listOf(TEST_MANEUVER)), routeShields = emptyList(), routeProgress = TEST_ROUTE_PROGRESS, - junctionValue = null + junctionValue = null, ) as RoutingInfo val step = result.currentStep assertNotNull(step) assertEquals( CarText.create( - "$renderedPrimaryInstruction\n$renderedSecondaryInstruction" + "$renderedPrimaryInstruction\n$renderedSecondaryInstruction", ).toCharSequence(), - step!!.cue!!.toCharSequence() + step!!.cue!!.toCharSequence(), ) assertEquals( androidx.car.app.navigation.model.Maneuver.TYPE_TURN_NORMAL_RIGHT, - step.maneuver!!.type + step.maneuver!!.type, ) } @@ -135,21 +135,21 @@ class CarNavigationInfoMapperTest { Lane.Builder() .addDirection(LaneDirection.create(LaneDirection.SHAPE_STRAIGHT, false)) .addDirection(LaneDirection.create(LaneDirection.SHAPE_NORMAL_RIGHT, true)) - .build() + .build(), ), - CarIcon.Builder(IconCompat.createWithBitmap(sampleBitmap())).build() + CarIcon.Builder(IconCompat.createWithBitmap(sampleBitmap())).build(), ) given( renderedPrimaryInstruction = "rendered primary maneuver instruction", renderedSecondaryInstruction = "rendered secondary maneuver instruction", - renderedLanesImage = renderedLanesImage + renderedLanesImage = renderedLanesImage, ) val result = sut.mapNavigationInfo( expectedManeuvers = ExpectedFactory.createValue(listOf(TEST_MANEUVER)), routeShields = emptyList(), routeProgress = TEST_ROUTE_PROGRESS, - junctionValue = null + junctionValue = null, ) as RoutingInfo assertEquals(renderedLanesImage.carIcon, result.currentStep!!.lanesImage) @@ -171,19 +171,19 @@ class CarNavigationInfoMapperTest { expectedManeuvers = ExpectedFactory.createValue(listOf(TEST_MANEUVER)), routeShields = emptyList(), routeProgress = TEST_ROUTE_PROGRESS, - junctionValue = junctionValue + junctionValue = junctionValue, ) as RoutingInfo assertEquals( CarIcon.Builder(IconCompat.createWithBitmap(junctionBitmap)).build(), - result.junctionImage + result.junctionImage, ) } private fun given( renderedPrimaryInstruction: String, renderedSecondaryInstruction: String, - renderedLanesImage: CarLanesImage? = null + renderedLanesImage: CarLanesImage? = null, ) { every { instructionRenderer.renderInstruction( @@ -191,7 +191,7 @@ class CarNavigationInfoMapperTest { shields = any(), exitView = any(), modifier = TEST_MANEUVER.primary.modifier, - any() + any(), ) } returns renderedPrimaryInstruction every { @@ -200,7 +200,7 @@ class CarNavigationInfoMapperTest { shields = any(), exitView = any(), modifier = TEST_MANEUVER.secondary!!.modifier, - any() + any(), ) } returns renderedSecondaryInstruction every { @@ -224,7 +224,7 @@ class CarNavigationInfoMapperTest { .shieldUrl("https://shield.mapbox.com/primary/url1") .text("") .mapboxShield(null) - .build() + .build(), ) @Suppress("PrivatePropertyName") @@ -234,7 +234,7 @@ class CarNavigationInfoMapperTest { .shieldUrl("https://shield.mapbox.com/primary/url2") .text("") .mapboxShield(null) - .build() + .build(), ) @Suppress("PrivatePropertyName") @@ -249,7 +249,7 @@ class CarNavigationInfoMapperTest { componentList = listOf( MANEUVER_COMPONENT_ROAD_SHIELD1, MANEUVER_COMPONENT_ROAD_SHIELD2, - ) + ), ), stepDistance = mockk(), secondary = SecondaryManeuverFactory.buildSecondaryManeuver( @@ -265,10 +265,10 @@ class CarNavigationInfoMapperTest { lane = LaneFactory.buildLane( listOf( LaneIndicator.Builder().directions(listOf("straight")).isActive(false).build(), - LaneIndicator.Builder().directions(listOf("right")).isActive(true).build() - ) + LaneIndicator.Builder().directions(listOf("right")).isActive(true).build(), + ), ), - point = Point.fromLngLat(10.0, 20.0) + point = Point.fromLngLat(10.0, 20.0), ) private fun sampleBitmap() = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationInfoProviderTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoProviderTest.kt similarity index 97% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationInfoProviderTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoProviderTest.kt index 36c5a05ab15..3b1558b8c9e 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/CarNavigationInfoProviderTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/CarNavigationInfoProviderTest.kt @@ -1,9 +1,8 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.car.app.Screen import androidx.car.app.navigation.model.NavigationTemplate import androidx.lifecycle.testing.TestLifecycleOwner -import com.mapbox.androidauto.testing.CarAppTestRule import com.mapbox.bindgen.Expected import com.mapbox.bindgen.ExpectedFactory import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface @@ -12,8 +11,9 @@ import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver import com.mapbox.navigation.testing.MainCoroutineRule +import com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.ui.androidauto.testing.CarAppTestRule import com.mapbox.navigation.ui.base.util.MapboxNavigationConsumer -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi import com.mapbox.navigation.ui.maps.guidance.junction.api.MapboxJunctionApi import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionError import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionValue @@ -52,7 +52,7 @@ class CarNavigationInfoProviderTest { every { carNavigationInfoMapper(any(), any()) } returns carNavigationInfoMapper every { maneuverApi(any()) } returns maneuverApi every { mapUserStyleObserver() } returns mockk(relaxed = true) - every { junctionApi(any()) } returns junctionApi + every { junctionApi() } returns junctionApi } private val sut = CarNavigationInfoProvider(serviceProvider) diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/MapboxCarNavigationManagerTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/MapboxCarNavigationManagerTest.kt similarity index 90% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/MapboxCarNavigationManagerTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/MapboxCarNavigationManagerTest.kt index 5bc7689c2b4..aa1731ea629 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/MapboxCarNavigationManagerTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/MapboxCarNavigationManagerTest.kt @@ -1,20 +1,20 @@ -package com.mapbox.androidauto.navigation +package com.mapbox.navigation.ui.androidauto.navigation import androidx.car.app.CarContext import androidx.car.app.navigation.NavigationManager import androidx.car.app.navigation.NavigationManagerCallback -import com.mapbox.androidauto.internal.AndroidAutoLog -import com.mapbox.androidauto.navigation.maneuver.CarManeuverMapper -import com.mapbox.androidauto.screenmanager.MapboxScreen -import com.mapbox.androidauto.screenmanager.MapboxScreenManager -import com.mapbox.androidauto.testing.CarAppTestRule -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.base.trip.model.RouteProgress import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.internal.telemetry.sendCustomEvent +import com.mapbox.navigation.core.internal.telemetry.AndroidAutoEvent +import com.mapbox.navigation.core.internal.telemetry.postAndroidAutoEvent import com.mapbox.navigation.core.trip.session.RouteProgressObserver import com.mapbox.navigation.testing.MainCoroutineRule +import com.mapbox.navigation.ui.androidauto.internal.AndroidAutoLog +import com.mapbox.navigation.ui.androidauto.navigation.maneuver.CarManeuverMapper +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreen +import com.mapbox.navigation.ui.androidauto.screenmanager.MapboxScreenManager +import com.mapbox.navigation.ui.androidauto.testing.CarAppTestRule import io.mockk.Runs import io.mockk.clearAllMocks import io.mockk.every @@ -29,7 +29,6 @@ import io.mockk.verifyOrder import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.async import kotlinx.coroutines.cancelAndJoin -import kotlinx.coroutines.flow.collect import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -38,7 +37,7 @@ import org.junit.Before import org.junit.Rule import org.junit.Test -@OptIn(ExperimentalPreviewMapboxNavigationAPI::class, ExperimentalCoroutinesApi::class) +@OptIn(ExperimentalCoroutinesApi::class) class MapboxCarNavigationManagerTest { @get:Rule @@ -98,30 +97,22 @@ class MapboxCarNavigationManagerTest { } @Test - fun `onAttached should trigger telemetry event that android auto started`() { + fun `onAttached should trigger AndroidAuto CONNECTED telemetry event`() { val mapboxNavigation: MapboxNavigation = mockk(relaxed = true) sut.onAttached(mapboxNavigation) - verify { - mapboxNavigation.sendCustomEvent( - "Android Auto : started", - "analytics", - "1.0.0" - ) + verify(exactly = 1) { + mapboxNavigation.postAndroidAutoEvent(AndroidAutoEvent.CONNECTED) } } @Test - fun `onAttached should trigger telemetry event that android auto stopped`() { + fun `onAttached should trigger AndroidAuto DISCONNECTED telemetry event`() { val mapboxNavigation: MapboxNavigation = mockk(relaxed = true) sut.onDetached(mapboxNavigation) - verify { - mapboxNavigation.sendCustomEvent( - "Android Auto : stopped", - "analytics", - "1.0.0" - ) + verify(exactly = 1) { + mapboxNavigation.postAndroidAutoEvent(AndroidAutoEvent.DISCONNECTED) } } @@ -135,7 +126,7 @@ class MapboxCarNavigationManagerTest { sut.onAttached(mapboxNavigation) routesObserverSlot.captured.onRoutesChanged( - mockk { every { navigationRoutes } returns listOf(mockk()) } + mockk { every { navigationRoutes } returns listOf(mockk()) }, ) verify { navigationManager.navigationStarted() } @@ -150,12 +141,12 @@ class MapboxCarNavigationManagerTest { } just Runs sut.onAttached(mapboxNavigation) routesObserverSlot.captured.onRoutesChanged( - mockk { every { navigationRoutes } returns listOf(mockk()) } + mockk { every { navigationRoutes } returns listOf(mockk()) }, ) clearAllMocks(answers = false) routesObserverSlot.captured.onRoutesChanged( - mockk { every { navigationRoutes } returns listOf(mockk()) } + mockk { every { navigationRoutes } returns listOf(mockk()) }, ) verify(exactly = 0) { navigationManager.navigationStarted() } @@ -170,12 +161,12 @@ class MapboxCarNavigationManagerTest { } just Runs sut.onAttached(mapboxNavigation) routesObserverSlot.captured.onRoutesChanged( - mockk { every { navigationRoutes } returns listOf(mockk()) } + mockk { every { navigationRoutes } returns listOf(mockk()) }, ) clearAllMocks(answers = false) routesObserverSlot.captured.onRoutesChanged( - mockk { every { navigationRoutes } returns emptyList() } + mockk { every { navigationRoutes } returns emptyList() }, ) verify { navigationManager.navigationEnded() } @@ -191,7 +182,7 @@ class MapboxCarNavigationManagerTest { sut.onAttached(mapboxNavigation) routesObserverSlot.captured.onRoutesChanged( - mockk { every { navigationRoutes } returns emptyList() } + mockk { every { navigationRoutes } returns emptyList() }, ) verify(exactly = 0) { navigationManager.navigationEnded() } @@ -203,7 +194,7 @@ class MapboxCarNavigationManagerTest { val routeProgressObserverSlot = mutableListOf() val mapboxNavigation: MapboxNavigation = mapboxNavigationMock( routesSlot, - routeProgressObserverSlot + routeProgressObserverSlot, ) sut.onAttached(mapboxNavigation) @@ -272,7 +263,7 @@ class MapboxCarNavigationManagerTest { val routeProgressObserverSlot = mutableListOf() val mapboxNavigation: MapboxNavigation = mapboxNavigationMock( routes, - routeProgressObserverSlot + routeProgressObserverSlot, ) mapboxNavigation.setNavigationRoutes(listOf(mockk())) @@ -298,7 +289,7 @@ class MapboxCarNavigationManagerTest { val routeProgressObserverSlot = mutableListOf() val mapboxNavigation: MapboxNavigation = mapboxNavigationMock( routesSlot, - routeProgressObserverSlot + routeProgressObserverSlot, ) mapboxNavigation.setNavigationRoutes(listOf(mockk())) @@ -315,7 +306,7 @@ class MapboxCarNavigationManagerTest { val routeProgressObserverSlot = mutableListOf() val mapboxNavigation: MapboxNavigation = mapboxNavigationMock( routesSlot, - routeProgressObserverSlot + routeProgressObserverSlot, ) mapboxNavigation.setNavigationRoutes(listOf(mockk())) @@ -330,13 +321,13 @@ class MapboxCarNavigationManagerTest { private fun mapboxNavigationMock( routesSlot: MutableList, - routeProgressObserverSlot: MutableList + routeProgressObserverSlot: MutableList, ): MapboxNavigation { val mapboxNavigation: MapboxNavigation = mockk(relaxed = true) { every { registerRoutesObserver(any()) } answers { routesSlot.add(firstArg()) firstArg().onRoutesChanged( - mockk { every { navigationRoutes } returns getNavigationRoutes() } + mockk { every { navigationRoutes } returns getNavigationRoutes() }, ) } every { unregisterRoutesObserver(any()) } answers { diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/lanes/CarLaneMapperTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneMapperTest.kt similarity index 93% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/lanes/CarLaneMapperTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneMapperTest.kt index 17e687f27b5..5c0e77320ff 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/lanes/CarLaneMapperTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/lanes/CarLaneMapperTest.kt @@ -1,7 +1,7 @@ -package com.mapbox.androidauto.navigation.lanes +package com.mapbox.navigation.ui.androidauto.navigation.lanes import androidx.car.app.navigation.model.LaneDirection -import com.mapbox.navigation.ui.maneuver.model.Lane +import com.mapbox.navigation.tripdata.maneuver.model.Lane import io.mockk.every import io.mockk.mockk import org.junit.Assert.assertEquals @@ -30,7 +30,7 @@ class CarLaneMapperTest { mockk { every { isActive } returns false every { directions } returns listOf("straight") - } + }, ) } val lanes = carLaneMapper.mapLanes(laneGuidance) @@ -49,7 +49,7 @@ class CarLaneMapperTest { mockk { every { isActive } returns true every { directions } returns listOf("straight", "right") - } + }, ) } val lanes = carLaneMapper.mapLanes(laneGuidance) @@ -70,7 +70,7 @@ class CarLaneMapperTest { mockk { every { isActive } returns false every { directions } returns listOf("left") - } + }, ) } val lanes = carLaneMapper.mapLanes(laneGuidance) diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconOptionsTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconOptionsTest.kt similarity index 90% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconOptionsTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconOptionsTest.kt index f580d1ce980..97c68a48ea4 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverIconOptionsTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverIconOptionsTest.kt @@ -1,11 +1,11 @@ -package com.mapbox.androidauto.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import android.content.Context import android.graphics.Color import android.os.Build import androidx.test.core.app.ApplicationProvider -import com.mapbox.androidauto.R import com.mapbox.navigation.testing.BuilderTest +import com.mapbox.navigation.ui.androidauto.R import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverMapperTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverMapperTest.kt similarity index 97% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverMapperTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverMapperTest.kt index 48bf51aaffe..a0550f91323 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/maneuver/CarManeuverMapperTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/maneuver/CarManeuverMapperTest.kt @@ -1,14 +1,14 @@ -package com.mapbox.androidauto.navigation.maneuver +package com.mapbox.navigation.ui.androidauto.navigation.maneuver import androidx.car.app.model.Distance import androidx.car.app.navigation.model.Maneuver -import com.mapbox.androidauto.navigation.CarDistanceFormatter import com.mapbox.api.directions.v5.models.ManeuverModifier import com.mapbox.api.directions.v5.models.StepManeuver import com.mapbox.bindgen.ExpectedFactory import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maneuver.model.ManeuverError +import com.mapbox.navigation.tripdata.maneuver.api.MapboxManeuverApi +import com.mapbox.navigation.tripdata.maneuver.model.ManeuverError +import com.mapbox.navigation.ui.androidauto.navigation.CarDistanceFormatter import io.mockk.every import io.mockk.mockk import io.mockk.mockkStatic @@ -22,7 +22,7 @@ import java.util.Calendar class CarManeuverMapperTest { - private val mockManeuver = mockk { + private val mockManeuver = mockk { every { primary } returns mockk { every { type } returns StepManeuver.TURN every { modifier } returns "right" @@ -442,7 +442,7 @@ class CarManeuverMapperTest { fun `generate Trip data from expected`() { val expected = ExpectedFactory.createValue< ManeuverError, - List>(listOf(mockManeuver)) + List,>(listOf(mockManeuver)) val maneuver = CarManeuverMapper.from(expected).build() diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/CarSpeedLimitRendererTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitRendererTest.kt similarity index 80% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/CarSpeedLimitRendererTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitRendererTest.kt index 003fbc54dc1..f823d770e63 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/CarSpeedLimitRendererTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/CarSpeedLimitRendererTest.kt @@ -1,25 +1,30 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit -import com.mapbox.androidauto.MapboxCarOptions -import com.mapbox.androidauto.testing.CarAppTestRule import com.mapbox.maps.MapboxExperimental import com.mapbox.maps.extension.androidauto.MapboxCarMapSurface import com.mapbox.navigation.core.MapboxNavigation +import com.mapbox.navigation.testing.MainCoroutineRule +import com.mapbox.navigation.ui.androidauto.MapboxCarOptions +import com.mapbox.navigation.ui.androidauto.testing.CarAppTestRule import io.mockk.every import io.mockk.mockk import io.mockk.verify +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test -@OptIn(MapboxExperimental::class) +@OptIn(MapboxExperimental::class, ExperimentalCoroutinesApi::class) class CarSpeedLimitRendererTest { @get:Rule val carAppTestRule = CarAppTestRule() + @get:Rule + val mainCoroutineRule = MainCoroutineRule() + private val speedLimitWidget: SpeedLimitWidget = mockk() private val services: CarSpeedLimitServices = mockk { every { speedLimitWidget(any()) } returns speedLimitWidget diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitBitmapRendererTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitBitmapRendererTest.kt similarity index 96% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitBitmapRendererTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitBitmapRendererTest.kt index 6f95d903017..48961a531bd 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitBitmapRendererTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitBitmapRendererTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import android.graphics.Bitmap import android.os.Build diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitOptionsTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitOptionsTest.kt similarity index 90% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitOptionsTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitOptionsTest.kt index 892c10a4751..b01de43d287 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/navigation/speedlimit/SpeedLimitOptionsTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/navigation/speedlimit/SpeedLimitOptionsTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.navigation.speedlimit +package com.mapbox.navigation.ui.androidauto.navigation.speedlimit import com.mapbox.navigation.base.speed.model.SpeedLimitSign import com.mapbox.navigation.testing.BuilderTest diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/notification/MapboxCarNotificationOptionsTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationOptionsTest.kt similarity index 91% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/notification/MapboxCarNotificationOptionsTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationOptionsTest.kt index bc2046e66e8..4cc09c06080 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/notification/MapboxCarNotificationOptionsTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationOptionsTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import androidx.car.app.CarAppService import com.mapbox.navigation.testing.BuilderTest diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/notification/MapboxCarNotificationTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationTest.kt similarity index 98% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/notification/MapboxCarNotificationTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationTest.kt index 9765842a20f..3f9d449fa8c 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/notification/MapboxCarNotificationTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/notification/MapboxCarNotificationTest.kt @@ -1,4 +1,4 @@ -package com.mapbox.androidauto.notification +package com.mapbox.navigation.ui.androidauto.notification import android.graphics.Color import androidx.car.app.CarAppService @@ -8,8 +8,6 @@ import androidx.car.app.model.CarColor import androidx.car.app.notification.CarAppExtender import androidx.car.app.validation.HostValidator import androidx.core.app.NotificationCompat -import com.mapbox.androidauto.MapboxCarOptions -import com.mapbox.androidauto.R import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI import com.mapbox.navigation.base.TimeFormat import com.mapbox.navigation.base.formatter.DistanceFormatterOptions @@ -20,6 +18,8 @@ import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter import com.mapbox.navigation.core.trip.session.NavigationSessionState import com.mapbox.navigation.core.trip.session.NavigationSessionStateObserver import com.mapbox.navigation.core.trip.session.RouteProgressObserver +import com.mapbox.navigation.ui.androidauto.MapboxCarOptions +import com.mapbox.navigation.ui.androidauto.R import io.mockk.Runs import io.mockk.every import io.mockk.just diff --git a/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemMapperTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemMapperTest.kt new file mode 100644 index 00000000000..650ef1ae3c4 --- /dev/null +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListItemMapperTest.kt @@ -0,0 +1,51 @@ +package com.mapbox.navigation.ui.androidauto.placeslistonmap + +import androidx.car.app.model.CarIcon +import androidx.core.graphics.drawable.IconCompat +import com.mapbox.common.location.Location +import com.mapbox.geojson.Point +import com.mapbox.navigation.base.formatter.UnitType +import com.mapbox.navigation.ui.androidauto.search.PlaceRecord +import com.mapbox.navigation.ui.androidauto.testing.MapboxRobolectricTestRunner +import io.mockk.every +import io.mockk.mockk +import org.junit.Assert.assertEquals +import org.junit.Test + +class PlacesListItemMapperTest : MapboxRobolectricTestRunner() { + + private val placeMarkerRenderer: PlaceMarkerRenderer = mockk { + every { renderMarker() } returns mockk { + every { type } returns CarIcon.TYPE_CUSTOM + every { icon } returns mockk { + every { type } returns IconCompat.TYPE_BITMAP + } + } + } + + private val mapper = PlacesListItemMapper(placeMarkerRenderer, UnitType.METRIC) + + @Test + fun mapToItemList() { + val location = Location.Builder().apply { + latitude(37.8031596290125) + longitude(-122.44783300404791) + }.build() + val places = listOf( + PlaceRecord( + "id", + "name", + Point.fromLngLat(-122.44783300404791, 37.8031596290125), + "description", + listOf(), + ), + ) + + val result = mapper.mapToItemList(location, places, null) + + assertEquals( + "[title: name, text count: 1, image: null, isBrowsable: false]", + result.items.first().toString(), + ) + } +} diff --git a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapLayerUtilTest.kt b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapLayerUtilTest.kt similarity index 93% rename from libnavui-androidauto/src/test/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapLayerUtilTest.kt rename to androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapLayerUtilTest.kt index 916f3fc260d..8ded8853911 100644 --- a/libnavui-androidauto/src/test/java/com/mapbox/androidauto/placeslistonmap/PlacesListOnMapLayerUtilTest.kt +++ b/androidauto/src/test/java/com/mapbox/navigation/ui/androidauto/placeslistonmap/PlacesListOnMapLayerUtilTest.kt @@ -1,9 +1,8 @@ -package com.mapbox.androidauto.placeslistonmap +package com.mapbox.navigation.ui.androidauto.placeslistonmap import android.content.Context import android.graphics.Bitmap import androidx.test.core.app.ApplicationProvider -import com.mapbox.androidauto.testing.MapboxRobolectricTestRunner import com.mapbox.bindgen.ExpectedFactory import com.mapbox.geojson.FeatureCollection import com.mapbox.maps.Style @@ -11,6 +10,7 @@ import com.mapbox.maps.extension.style.layers.addLayer import com.mapbox.maps.extension.style.layers.generated.SymbolLayer import com.mapbox.maps.extension.style.sources.generated.GeoJsonSource import com.mapbox.maps.extension.style.sources.getSource +import com.mapbox.navigation.ui.androidauto.testing.MapboxRobolectricTestRunner import io.mockk.every import io.mockk.mockk import io.mockk.mockkObject @@ -58,7 +58,6 @@ class PlacesListOnMapLayerUtilTest : MapboxRobolectricTestRunner() { fun initializeFavoritesLayer() { mockkStatic("com.mapbox.maps.extension.style.layers.LayerUtils") mockkObject(GeoJsonSource) - every { GeoJsonSource.directSetterEnabled() } returns true val style = mockk - - - - - - - - - - - - - diff --git a/billing-tests/.gitignore b/billing-tests/.gitignore deleted file mode 100644 index 2446cd1f709..00000000000 --- a/billing-tests/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -src/main/res/values/mapbox_access_token.xml diff --git a/billing-tests/build.gradle b/billing-tests/build.gradle deleted file mode 100644 index 5d0763049d5..00000000000 --- a/billing-tests/build.gradle +++ /dev/null @@ -1,54 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' -apply plugin: 'com.jaredsburrows.license' -apply plugin: 'com.mapbox.maps.token' -apply from: "../gradle/ktlint.gradle" - -def mapboxBillingTestsApiToken = System.getenv('MAPBOX_BILLING_TESTS_ACCESS_TOKEN') ?: "null" - -android { - compileSdkVersion androidVersions.compileSdkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - defaultConfig { - applicationId "com.mapbox.navigation.billing.tests" - minSdkVersion androidVersions.minSdkVersion - targetSdkVersion androidVersions.targetSdkVersion - multiDexEnabled true - versionCode 1 - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - testInstrumentationRunnerArguments clearPackageData: 'true' - vectorDrawables.useSupportLibrary = true - - resValue "string", "mapbox_billing_tests_access_token", mapboxBillingTestsApiToken - } - - testOptions { - execution 'ANDROIDX_TEST_ORCHESTRATOR' - } -} - -dependencies { - // Mapbox Navigation SDK - implementation project(':libnavigation-android') - - // test - androidTestImplementation project(':libtesting-ui') - androidTestImplementation dependenciesList.testRunner - androidTestUtil dependenciesList.testOrchestrator - - // Kotlin support - implementation dependenciesList.kotlinStdLib - - // Coroutines - implementation dependenciesList.coroutinesAndroid - - // Support libraries - implementation dependenciesList.androidXCore - implementation dependenciesList.androidXAppCompat -} diff --git a/billing-tests/proguard-rules.pro b/billing-tests/proguard-rules.pro deleted file mode 100644 index f1b424510da..00000000000 --- a/billing-tests/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/billing-tests/src/androidTest/java/com/mapbox/navigation/billing/test/BillingTests.kt b/billing-tests/src/androidTest/java/com/mapbox/navigation/billing/test/BillingTests.kt deleted file mode 100644 index 4beb4b765f8..00000000000 --- a/billing-tests/src/androidTest/java/com/mapbox/navigation/billing/test/BillingTests.kt +++ /dev/null @@ -1,117 +0,0 @@ -package com.mapbox.navigation.billing.test - -import android.content.Context -import android.location.Location -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.options.RoutingTilesOptions -import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.testing.ui.BaseCoreNoCleanUpTest -import com.mapbox.navigation.testing.ui.utils.MapboxNavigationRule -import com.mapbox.navigation.testing.ui.utils.coroutines.clearNavigationRoutesAndWaitForUpdate -import com.mapbox.navigation.testing.ui.utils.coroutines.getSuccessfulResultOrThrowException -import com.mapbox.navigation.testing.ui.utils.coroutines.requestRoutes -import com.mapbox.navigation.testing.ui.utils.coroutines.sdkTest -import com.mapbox.navigation.testing.ui.utils.coroutines.setNavigationRoutesAndWaitForUpdate -import com.mapbox.navigation.testing.ui.utils.coroutines.startTripSessionAndWaitForActiveGuidanceState -import com.mapbox.navigation.testing.ui.utils.runOnMainSync -import kotlinx.coroutines.delay -import org.junit.Assert.fail -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import java.net.URI -import java.util.concurrent.TimeUnit - -/** - * Tests that are scheduled to run on CI. Needed to generate billing events - * that will later be checked during CI job to verify whether billing events appeared - * in the billing data base. - * - * In this tests we just generate billing events. - * More test cases and parameters verification can be found in 'TripSessionsBillingTest'. - */ -class BillingTests : BaseCoreNoCleanUpTest() { - - @get:Rule - val mapboxNavigationRule = MapboxNavigationRule() - - private lateinit var mapboxNavigation: MapboxNavigation - - private val source = Point.fromLngLat(-77.031991, 38.894721) - private val destination = Point.fromLngLat(-77.030923, 38.895433) - - override fun setupMockLocation(): Location = mockLocationUpdatesRule.generateLocationUpdate { - latitude = source.latitude() - longitude = source.longitude() - bearing = 190f - } - - @Before - fun setup() { - val accessToken = getBillingTestsToken(context) - if (accessToken == "null") { - fail("Billing tests token is not available") - } - - runOnMainSync { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(context) - .accessToken(accessToken) - .routingTilesOptions( - RoutingTilesOptions.Builder() - .tilesBaseUri(URI(mockWebServerRule.baseUrl)) - .build() - ) - .build() - ) - } - } - - @Test - fun test30SecondsLongActiveGuidanceTrip() = sdkTest(TimeUnit.MINUTES.toMillis(1)) { - val routes = requestRoutes(source, destination) - - mapboxNavigation.setNavigationRoutesAndWaitForUpdate(routes) - mapboxNavigation.startTripSessionAndWaitForActiveGuidanceState() - - delay(TimeUnit.SECONDS.toMillis(35)) - - mapboxNavigation.clearNavigationRoutesAndWaitForUpdate() - - delayForNetworkEvents() - } - - private suspend fun requestRoutes(source: Point, destination: Point): List { - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .coordinatesList(listOf(source, destination)) - .alternatives(false) - .build() - - return mapboxNavigation.requestRoutes( - routeOptions - ).getSuccessfulResultOrThrowException().routes - } - - /** - * We allow some time for http billing events to be sent. - * If events are not sent within allowed time, this could mean an issue - * that can potentially happen in production and we want to catch such bugs. - */ - private suspend fun delayForNetworkEvents() { - delay(TimeUnit.SECONDS.toMillis(10)) - } - - private fun getBillingTestsToken(context: Context) = context.getString( - context.resources.getIdentifier( - "mapbox_billing_tests_access_token", - "string", - context.packageName - ) - ) -} diff --git a/billing-tests/src/main/AndroidManifest.xml b/billing-tests/src/main/AndroidManifest.xml deleted file mode 100644 index c80932a7418..00000000000 --- a/billing-tests/src/main/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - diff --git a/billing-tests/src/main/assets/open_source_licenses.html b/billing-tests/src/main/assets/open_source_licenses.html deleted file mode 100644 index 249f0e92be4..00000000000 --- a/billing-tests/src/main/assets/open_source_licenses.html +++ /dev/null @@ -1,386 +0,0 @@ - - - - Open source licenses - - -

Notice for packages:

-
    -
  • Activity (1.2.4) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Activity (1.1.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android AppCompat Library (1.3.1) -
    -
    Copyright © 2011 The Android Open Source Project
    -
    -
  • -
  • Android Arch-Common (2.1.0) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Arch-Runtime (2.1.0) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Lifecycle LiveData (2.0.0) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Lifecycle LiveData Core (2.3.1) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Lifecycle Runtime (2.3.1) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Lifecycle ViewModel (2.3.1) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Lifecycle ViewModel with SavedState (2.3.1) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Lifecycle-Common (2.3.1) -
    -
    Copyright © 2017 The Android Open Source Project
    -
    -
  • -
  • Android Resources Library (1.3.1) -
    -
    Copyright © 2019 The Android Open Source Project
    -
    -
  • -
  • Android Support AnimatedVectorDrawable (1.1.0) -
    -
    Copyright © 2015 The Android Open Source Project
    -
    -
  • -
  • Android Support Library Annotations (1.2.0) -
    -
    Copyright © 2013 The Android Open Source Project
    -
    -
  • -
  • Android Support Library collections (1.1.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Support Library compat (1.6.0) -
    -
    Copyright © 2015 The Android Open Source Project
    -
    -
  • -
  • Android Support Library Cursor Adapter (1.0.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Support Library Custom View (1.0.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Support Library Drawer Layout (1.0.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Support Library fragment (1.3.6) -
    -
    Copyright © 2011 The Android Open Source Project
    -
    -
  • -
  • Android Support Library Interpolators (1.0.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Support Library loader (1.0.0) -
    -
    Copyright © 2011 The Android Open Source Project
    -
    -
  • -
  • Android Support Library View Pager (1.0.0) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • -
  • Android Support VectorDrawable (1.1.0) -
    -
    Copyright © 2015 The Android Open Source Project
    -
    -
  • -
  • Android Tracing (1.0.0) -
    -
    Copyright © 2020 The Android Open Source Project
    -
    -
  • -
  • Experimental annotation (1.1.0) -
    -
    Copyright © 2019 The Android Open Source Project
    -
    -
  • -
  • IntelliJ IDEA Annotations (13.0) -
    -
    Copyright © 20xx JetBrains Team
    -
    -
  • -
  • Kotlin Stdlib (1.5.31) -
    -
    Copyright © 20xx Kotlin Team
    -
    -
  • -
  • Kotlin Stdlib Common (1.5.31) -
    -
    Copyright © 20xx Kotlin Team
    -
    -
  • -
  • Kotlin Stdlib Jdk7 (1.5.31) -
    -
    Copyright © 20xx Kotlin Team
    -
    -
  • -
  • Kotlin Stdlib Jdk8 (1.5.31) -
    -
    Copyright © 20xx Kotlin Team
    -
    -
  • -
  • kotlinx-coroutines-android (1.5.1) -
    -
    Copyright © 20xx JetBrains Team
    -
    -
  • -
  • kotlinx-coroutines-core (1.5.1) -
    -
    Copyright © 20xx JetBrains Team
    -
    -
  • -
  • VersionedParcelable (1.1.1) -
    -
    Copyright © 2018 The Android Open Source Project
    -
    -
  • - -
                                     Apache License
    -                           Version 2.0, January 2004
    -                        http://www.apache.org/licenses/
    -
    -   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
    -
    -   1. Definitions.
    -
    -      "License" shall mean the terms and conditions for use, reproduction,
    -      and distribution as defined by Sections 1 through 9 of this document.
    -
    -      "Licensor" shall mean the copyright owner or entity authorized by
    -      the copyright owner that is granting the License.
    -
    -      "Legal Entity" shall mean the union of the acting entity and all
    -      other entities that control, are controlled by, or are under common
    -      control with that entity. For the purposes of this definition,
    -      "control" means (i) the power, direct or indirect, to cause the
    -      direction or management of such entity, whether by contract or
    -      otherwise, or (ii) ownership of fifty percent (50%) or more of the
    -      outstanding shares, or (iii) beneficial ownership of such entity.
    -
    -      "You" (or "Your") shall mean an individual or Legal Entity
    -      exercising permissions granted by this License.
    -
    -      "Source" form shall mean the preferred form for making modifications,
    -      including but not limited to software source code, documentation
    -      source, and configuration files.
    -
    -      "Object" form shall mean any form resulting from mechanical
    -      transformation or translation of a Source form, including but
    -      not limited to compiled object code, generated documentation,
    -      and conversions to other media types.
    -
    -      "Work" shall mean the work of authorship, whether in Source or
    -      Object form, made available under the License, as indicated by a
    -      copyright notice that is included in or attached to the work
    -      (an example is provided in the Appendix below).
    -
    -      "Derivative Works" shall mean any work, whether in Source or Object
    -      form, that is based on (or derived from) the Work and for which the
    -      editorial revisions, annotations, elaborations, or other modifications
    -      represent, as a whole, an original work of authorship. For the purposes
    -      of this License, Derivative Works shall not include works that remain
    -      separable from, or merely link (or bind by name) to the interfaces of,
    -      the Work and Derivative Works thereof.
    -
    -      "Contribution" shall mean any work of authorship, including
    -      the original version of the Work and any modifications or additions
    -      to that Work or Derivative Works thereof, that is intentionally
    -      submitted to Licensor for inclusion in the Work by the copyright owner
    -      or by an individual or Legal Entity authorized to submit on behalf of
    -      the copyright owner. For the purposes of this definition, "submitted"
    -      means any form of electronic, verbal, or written communication sent
    -      to the Licensor or its representatives, including but not limited to
    -      communication on electronic mailing lists, source code control systems,
    -      and issue tracking systems that are managed by, or on behalf of, the
    -      Licensor for the purpose of discussing and improving the Work, but
    -      excluding communication that is conspicuously marked or otherwise
    -      designated in writing by the copyright owner as "Not a Contribution."
    -
    -      "Contributor" shall mean Licensor and any individual or Legal Entity
    -      on behalf of whom a Contribution has been received by Licensor and
    -      subsequently incorporated within the Work.
    -
    -   2. Grant of Copyright License. Subject to the terms and conditions of
    -      this License, each Contributor hereby grants to You a perpetual,
    -      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    -      copyright license to reproduce, prepare Derivative Works of,
    -      publicly display, publicly perform, sublicense, and distribute the
    -      Work and such Derivative Works in Source or Object form.
    -
    -   3. Grant of Patent License. Subject to the terms and conditions of
    -      this License, each Contributor hereby grants to You a perpetual,
    -      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
    -      (except as stated in this section) patent license to make, have made,
    -      use, offer to sell, sell, import, and otherwise transfer the Work,
    -      where such license applies only to those patent claims licensable
    -      by such Contributor that are necessarily infringed by their
    -      Contribution(s) alone or by combination of their Contribution(s)
    -      with the Work to which such Contribution(s) was submitted. If You
    -      institute patent litigation against any entity (including a
    -      cross-claim or counterclaim in a lawsuit) alleging that the Work
    -      or a Contribution incorporated within the Work constitutes direct
    -      or contributory patent infringement, then any patent licenses
    -      granted to You under this License for that Work shall terminate
    -      as of the date such litigation is filed.
    -
    -   4. Redistribution. You may reproduce and distribute copies of the
    -      Work or Derivative Works thereof in any medium, with or without
    -      modifications, and in Source or Object form, provided that You
    -      meet the following conditions:
    -
    -      (a) You must give any other recipients of the Work or
    -          Derivative Works a copy of this License; and
    -
    -      (b) You must cause any modified files to carry prominent notices
    -          stating that You changed the files; and
    -
    -      (c) You must retain, in the Source form of any Derivative Works
    -          that You distribute, all copyright, patent, trademark, and
    -          attribution notices from the Source form of the Work,
    -          excluding those notices that do not pertain to any part of
    -          the Derivative Works; and
    -
    -      (d) If the Work includes a "NOTICE" text file as part of its
    -          distribution, then any Derivative Works that You distribute must
    -          include a readable copy of the attribution notices contained
    -          within such NOTICE file, excluding those notices that do not
    -          pertain to any part of the Derivative Works, in at least one
    -          of the following places: within a NOTICE text file distributed
    -          as part of the Derivative Works; within the Source form or
    -          documentation, if provided along with the Derivative Works; or,
    -          within a display generated by the Derivative Works, if and
    -          wherever such third-party notices normally appear. The contents
    -          of the NOTICE file are for informational purposes only and
    -          do not modify the License. You may add Your own attribution
    -          notices within Derivative Works that You distribute, alongside
    -          or as an addendum to the NOTICE text from the Work, provided
    -          that such additional attribution notices cannot be construed
    -          as modifying the License.
    -
    -      You may add Your own copyright statement to Your modifications and
    -      may provide additional or different license terms and conditions
    -      for use, reproduction, or distribution of Your modifications, or
    -      for any such Derivative Works as a whole, provided Your use,
    -      reproduction, and distribution of the Work otherwise complies with
    -      the conditions stated in this License.
    -
    -   5. Submission of Contributions. Unless You explicitly state otherwise,
    -      any Contribution intentionally submitted for inclusion in the Work
    -      by You to the Licensor shall be under the terms and conditions of
    -      this License, without any additional terms or conditions.
    -      Notwithstanding the above, nothing herein shall supersede or modify
    -      the terms of any separate license agreement you may have executed
    -      with Licensor regarding such Contributions.
    -
    -   6. Trademarks. This License does not grant permission to use the trade
    -      names, trademarks, service marks, or product names of the Licensor,
    -      except as required for reasonable and customary use in describing the
    -      origin of the Work and reproducing the content of the NOTICE file.
    -
    -   7. Disclaimer of Warranty. Unless required by applicable law or
    -      agreed to in writing, Licensor provides the Work (and each
    -      Contributor provides its Contributions) on an "AS IS" BASIS,
    -      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
    -      implied, including, without limitation, any warranties or conditions
    -      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
    -      PARTICULAR PURPOSE. You are solely responsible for determining the
    -      appropriateness of using or redistributing the Work and assume any
    -      risks associated with Your exercise of permissions under this License.
    -
    -   8. Limitation of Liability. In no event and under no legal theory,
    -      whether in tort (including negligence), contract, or otherwise,
    -      unless required by applicable law (such as deliberate and grossly
    -      negligent acts) or agreed to in writing, shall any Contributor be
    -      liable to You for damages, including any direct, indirect, special,
    -      incidental, or consequential damages of any character arising as a
    -      result of this License or out of the use or inability to use the
    -      Work (including but not limited to damages for loss of goodwill,
    -      work stoppage, computer failure or malfunction, or any and all
    -      other commercial damages or losses), even if such Contributor
    -      has been advised of the possibility of such damages.
    -
    -   9. Accepting Warranty or Additional Liability. While redistributing
    -      the Work or Derivative Works thereof, You may choose to offer,
    -      and charge a fee for, acceptance of support, warranty, indemnity,
    -      or other liability obligations and/or rights consistent with this
    -      License. However, in accepting such obligations, You may act only
    -      on Your own behalf and on Your sole responsibility, not on behalf
    -      of any other Contributor, and only if You agree to indemnify,
    -      defend, and hold each Contributor harmless for any liability
    -      incurred by, or claims asserted against, such Contributor by reason
    -      of your accepting any such warranty or additional liability.
    -
    -   END OF TERMS AND CONDITIONS
    -
    -   APPENDIX: How to apply the Apache License to your work.
    -
    -      To apply the Apache License to your work, attach the following
    -      boilerplate notice, with the fields enclosed by brackets "[]"
    -      replaced with your own identifying information. (Don't include
    -      the brackets!)  The text should be enclosed in the appropriate
    -      comment syntax for the file format. We also recommend that a
    -      file or class name and description of purpose be included on the
    -      same "printed page" as the copyright notice for easier
    -      identification within third-party archives.
    -
    -   Copyright [yyyy] [name of copyright owner]
    -
    -   Licensed under the Apache License, Version 2.0 (the "License");
    -   you may not use this file except in compliance with the License.
    -   You may obtain a copy of the License at
    -
    -       http://www.apache.org/licenses/LICENSE-2.0
    -
    -   Unless required by applicable law or agreed to in writing, software
    -   distributed under the License is distributed on an "AS IS" BASIS,
    -   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -   See the License for the specific language governing permissions and
    -   limitations under the License.
    -
    -
    -
    -
- - diff --git a/billing-tests/src/main/res/values/strings.xml b/billing-tests/src/main/res/values/strings.xml deleted file mode 100644 index 15a299fa47e..00000000000 --- a/billing-tests/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - billing-tests - diff --git a/build.gradle b/build.gradle index 069f28c88d0..d4c46a009be 100644 --- a/build.gradle +++ b/build.gradle @@ -14,9 +14,7 @@ buildscript { } } gradlePluginPortal() - repositories { - maven { url "https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven" } - } + maven { url "https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven" } } dependencies { classpath pluginDependencies.gradle @@ -64,7 +62,7 @@ allprojects { // we allow access to snapshots repo if ALLOW_SNAPSHOT_REPOSITORY is set, what means we are running on CI // with Navigation Native forced to be some snapshot version // if you need to use snapshots while development, just set `addSnapshotsRepo` to true manually - def addSnapshotsRepo = project.hasProperty('ALLOW_SNAPSHOT_REPOSITORY') ? project.property('ALLOW_SNAPSHOT_REPOSITORY') : (System.getenv("ALLOW_SNAPSHOT_REPOSITORY")?.toBoolean() ?: false) + def addSnapshotsRepo = project.hasProperty('ALLOW_SNAPSHOT_REPOSITORY') ? project.property('ALLOW_SNAPSHOT_REPOSITORY') : (System.getenv("ALLOW_SNAPSHOT_REPOSITORY")?.toBoolean() ?: true) if (addSnapshotsRepo) { println("Snapshot repository reference added.") maven { @@ -98,6 +96,24 @@ subprojects { } } +// Need for building Dash app from Nav SDK sources +// Fix https://mapbox.atlassian.net/browse/NA-2065 +import org.gradle.util.VersionNumber +if (VersionNumber.parse(project.getGradle().getGradleVersion()) >= VersionNumber.parse("8.0.0")) { + afterEvaluate { + subprojects { + tasks.configureEach { + if (name == "packageDebugAssets" || name == "packageReleaseAssets" || name == "mergeDebugAssets") { + def task = tasks.findByName("saveSDKVersion") + if (task != null) { + dependsOn task + } + } + } + } + } +} + apply from: "${rootDir}/gradle/kdoc-settings.gradle" dokkaHtmlMultiModule { diff --git a/changelog/unreleased/bugfixes/7833.md b/changelog/unreleased/bugfixes/7833.md deleted file mode 100644 index 4ae5b84cd0d..00000000000 --- a/changelog/unreleased/bugfixes/7833.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed UI jank caused by on-device TextToSpeech player. \ No newline at end of file diff --git a/changelog/unreleased/bugfixes/7856.md b/changelog/unreleased/bugfixes/7856.md deleted file mode 100644 index 52080a8ba1d..00000000000 --- a/changelog/unreleased/bugfixes/7856.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed an issue where native memory was not being properly released after the `MapboxNavigation` object was destroyed. \ No newline at end of file diff --git a/changelog/unreleased/features/7840.md b/changelog/unreleased/features/7840.md deleted file mode 100644 index 6bfb8f8750f..00000000000 --- a/changelog/unreleased/features/7840.md +++ /dev/null @@ -1 +0,0 @@ -- Optimized memory usage in Directions API model classes by interning frequently occurring strings in JSON. \ No newline at end of file diff --git a/changelog/unreleased/features/7856.md b/changelog/unreleased/features/7856.md deleted file mode 100644 index 62069bef3c8..00000000000 --- a/changelog/unreleased/features/7856.md +++ /dev/null @@ -1 +0,0 @@ -- The `PredictiveCacheController(PredictiveCacheOptions)` constructor is now deprecated. Use `PredictiveCacheController(MapboxNavigation, PredictiveCacheOptions)` instead. \ No newline at end of file diff --git a/docs/electronic_horizon.md b/docs/electronic_horizon.md deleted file mode 100644 index 36aa7a092af..00000000000 --- a/docs/electronic_horizon.md +++ /dev/null @@ -1,272 +0,0 @@ -# Mapbox Electronic Horizon v3 integration document - -To start listening the electronic horizon updates `EHorizonObserver` should be registered with - -```kotlin -mapboxNavigation.registerEHorizonObserver(eHorizonObserver) -``` - -It provides the next callbacks: - -```kotlin -/** - * Electronic horizon listener. Callbacks are fired in the order specified. - * onPositionUpdated might be called multiple times after the other callbacks until a new change to - * the horizon occurs. - */ -interface EHorizonObserver { - - /** - * This callback might be called multiple times when the position changes. - * @param position current electronic horizon position (map matched position + e-horizon tree) - * @param distances a list of [RoadObjectDistanceInfo] for upcoming road objects - * - */ - fun onPositionUpdated( - position: EHorizonPosition, - distances: List - ) - - /** - * Called when entry to line-like (i.e. which has length != null) road object was detected - * @param objectEnterExitInfo contains info related to the object - */ - fun onRoadObjectEnter(objectEnterExitInfo: RoadObjectEnterExitInfo) - - /** - * Called when exit from line-like (i.e. which has length != null) road object was detected - * @param objectEnterExitInfo contains info related to the object - */ - fun onRoadObjectExit(objectEnterExitInfo: RoadObjectEnterExitInfo) - - /** - * Called when the object is passed. - * @param objectPassInfo contains info related to the object - */ - fun onRoadObjectPassed(objectPassInfo: RoadObjectPassInfo) - - /** - * This callback is fired whenever road object is added - * @param roadObjectId id of the object - */ - fun onRoadObjectAdded(roadObjectId: String) - - /** - * This callback is fired whenever road object is updated - * @param roadObjectId id of the object - */ - fun onRoadObjectUpdated(roadObjectId: String) - - /** - * This callback is fired whenever road object is removed - * @param roadObjectId id of the object - */ - fun onRoadObjectRemoved(roadObjectId: String) -} -``` - -Anytime you need edge's shape or metadata you can get it with `GraphAccessor`. -It's available with -```kotlin -mapboxNavigation.graphAccessor -``` - -```kotlin -class GraphAccessor { - /** - * Returns Graph Edge geometry for the given GraphId of the edge. - * If edge with given edgeId is not accessible, returns null - * @param edgeId - * - * @return list of Points representing edge shape - */ - fun getEdgeShape(edgeId: Long): List? - - /** - * Returns Graph Edge meta-information for the given GraphId of the edge. - * If edge with given edgeId is not accessible, returns null - * @param edgeId - * - * @return EHorizonEdgeMetadata - */ - fun getEdgeMetadata(edgeId: Long): EHorizonEdgeMetadata? - - /** - * Returns geometry of given path on graph. - * If any of path edges is not accessible, returns null. - */ - fun getPathShape(graphPath: EHorizonGraphPath): List? - - /** - * Returns geographical coordinate of given position on graph - * If position's edge is not accessible, returns null. - */ - fun getGraphPositionCoordinate(graphPosition: EHorizonGraphPosition): Point? -} -``` - -Anytime you need a road object, upcoming road objects, add or remove custom road object you can get it with `RoadObjectsStore` -It's available with -```kotlin -mapboxNavigation.roadObjectsStore -``` - -```kotlin -class RoadObjectsStore { - /** - * Returns mapping `road object id -> EHorizonObjectEdgeLocation` for all road objects - * which are lying on the edge with given id. - * @param edgeId - */ - fun getRoadObjectsOnTheEdge(edgeId: Long): Map - - /** - * Returns roadObject, if such object cannot be found returns null. - * @param roadObjectId id of the object - */ - fun getRoadObject(roadObjectId: String): RoadObject? - - /** - * Returns list of road object ids which are (partially) belong to `edgeIds`. - * @param edgeIds list of edge ids - * - * @return list of road object ids - */ - fun getRoadObjectIdsByEdgeIds(edgeIds: List): List - - /** - * Adds road object to be tracked in electronic horizon. In case if object with such id already - * exists updates it. - * @param roadObject object to add - */ - fun addCustomRoadObject(roadObject: RoadObject) - - /** - * Removes custom road object (i.e. stops tracking it in electronic horizon) - * @param roadObjectId of road object - */ - fun removeCustomRoadObject(roadObjectId: String) - - /** - * Removes all custom road objects (i.e. stops tracking them in electronic horizon) - */ - fun removeAllCustomRoadObjects() { - navigator.roadObjectsStore?.removeAllCustomRoadObjects() - } - - /** - * Returns a list of [UpcomingRoadObject] - * @param distances a list of [RoadObjectDistanceInfo] - */ - fun getUpcomingRoadObjects( - distances: List - ): List -} -``` - -If you want to track your own object (represented as a polygon, polyline, point, gantry or encoded with OpenLR) -with the electronic horizon, you should use `RoadObjectMatcher` to match you object to `RoadObject`. - -Implement `RoadObjectMatcherObserver` -```kotlin -/** - * Road objects matching listener. Callbacks are fired when matching is finished. - */ -interface RoadObjectMatcherObserver { - /** - * Road object matching result. - */ - fun onRoadObjectMatched(result: Expected) -} -``` -Register the observer -```kotlin -mapboxNavigation.roadObjectMatcher.registerRoadObjectMatcherObserver(observer) -``` -Match your object with one of the methods -```kotlin -/** - * [MapboxNavigation.roadObjectMatcher] provides methods to match custom road objects. - */ -class RoadObjectMatcher { - /** - * Matches given OpenLR object to the graph. - * @param roadObjectId unique id of the object - * @param openLRLocation road object location - * @param openLRStandard standard used to encode openLRLocation - * In case of error (if there are no tiles in cache, decoding failed, etc.) - * object won't be matched. - */ - fun matchOpenLRObject( - roadObjectId: String, - openLRLocation: String, - @OpenLRStandard.Type openLRStandard: String - ) - - /** - * Matches given polyline to graph. - * Polyline should define valid path on graph, - * i.e. it should be possible to drive this path according to traffic rules. - * In case of error (if there are no tiles in cache, decoding failed, etc.) - * object won't be matched. - * - * @param roadObjectId unique id of the object - * @param polyline polyline representing the object - */ - fun matchPolylineObject(roadObjectId: String, polyline: List) { - navigator.roadObjectMatcher?.matchPolyline(polyline, roadObjectId) - } - - /** - * Matches given polygon to graph. - * "Matching" here means we try to find all intersections of polygon with the road graph - * and track distances to those intersections as distance to polygon. - * In case of error (if there are no tiles in cache, decoding failed, etc.) - * object won't be matched. - * - * @param roadObjectId unique id of the object - * @param polygon polygon representing the object - */ - fun matchPolygonObject(roadObjectId: String, polygon: List) { - navigator.roadObjectMatcher?.matchPolygon(polygon, roadObjectId) - } - - /** - * Matches given gantry (i.e. polyline orthogonal to the road) to the graph. - * "Matching" here means we try to find all intersections of gantry with road graph - * and track distances to those intersections as distance to gantry. - * In case of error (if there are no tiles in cache, decoding failed, etc.) - * object won't be matched. - * - * @param roadObjectId unique id of the object - * @param gantry gantry representing the object - */ - fun matchGantryObject(roadObjectId: String, gantry: List) { - navigator.roadObjectMatcher?.matchGantry(gantry, roadObjectId) - } - - /** - * Matches given point to road graph. - * In case of error (if there are no tiles in cache, decoding failed, etc.) - * object won't be matched. - * - * @param roadObjectId unique id of the object - * @param point point representing the object - */ - fun matchPointObject(roadObjectId: String, point: Point) { - navigator.roadObjectMatcher?.matchPoint(point, roadObjectId) - } - - /** - * Cancel road object matching - * - * @param roadObjectId unique id of the object - */ - fun cancel(roadObjectId: String) { - navigator.roadObjectMatcher?.cancel(roadObjectId) - } -} -``` -You will receive matching result in the `RoadObjectMatcherObserver`. - -If the result is success, add matched `RoadObject` to the electronic horizon with `RoadObjectStore.addCustomRoadObject` \ No newline at end of file diff --git a/docs/metalava.md b/docs/metalava.md deleted file mode 100644 index e609e6fe787..00000000000 --- a/docs/metalava.md +++ /dev/null @@ -1,52 +0,0 @@ -## [Metalava](https://android.googlesource.com/platform/tools/metalava/) setup - -Use `$> make core-check-api` / `$> make core-update-api` (Core) `$> make ui-check-api` / `$> make ui-update-api` (UI) from the [`Makefile`](https://github.com/mapbox/mapbox-navigation-android/blob/main/Makefile) to interact. - -``` -$> make core-update-api / make core-check-api -$> make ui-update-api / make ui-check-api -$> make androidauto-update-api / make androidauto-check-api -``` - -:warning: Noting that we might need to update / push `api/current.txt` files after running `$> make core-update-api` (Core) / `$> make ui-update-api` (UI) if there are changes / errors we're 🆗 with (e.g. `AddedMethod` changes are marked as errors but don't break SemVer) 🚀 - -#### When releasing - -Remember to copy `api/current.txt` files to `api/X.Y.Z.txt` for every module - -#### To update `metalava` - -``` -$> make update-metalava -sh ./scripts/update_metalava.sh --n Cloning… - Done --n Building… - Done --e -Dependencies: - -com.android.tools.external.org-jetbrains:uast:30.3.0-alpha08 -com.android.tools.external.com-intellij:kotlin-compiler:30.3.0-alpha08 -com.android.tools.external.com-intellij:intellij-core:30.3.0-alpha08 -com.android.tools.lint:lint-api:30.3.0-alpha08 -com.android.tools.lint:lint-checks:30.3.0-alpha08 -com.android.tools.lint:lint-gradle:30.3.0-alpha08 -com.android.tools.lint:lint:30.3.0-alpha08 -com.android.tools:common:30.3.0-alpha08 -com.android.tools:sdk-common:30.3.0-alpha08 -com.android.tools:sdklib:30.3.0-alpha08 -org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20 -org.jetbrains.kotlin:kotlin-reflect:1.6.20 -org.ow2.asm:asm:8.0 -org.ow2.asm:asm-tree:8.0 -com.google.guava:guava:30.1.1-jre -``` - -- That places the latest `metalava.jar` into [`metalava`](https://github.com/mapbox/mapbox-navigation-android/blob/main/metalava) folder and prints out its deps 👀 - -```groovy -// Metalava isn't released yet. Check in its jar and explicitly track its transitive deps. -``` - -- Copy and paste (update) the new deps into [`gradle/metalava-dependencies.gradle`](https://github.com/mapbox/mapbox-navigation-android/blob/main/gradle/metalava-dependencies.gradle) \ No newline at end of file diff --git a/docs/project-tools.md b/docs/project-tools.md deleted file mode 100644 index 49ed17c2ed4..00000000000 --- a/docs/project-tools.md +++ /dev/null @@ -1,19 +0,0 @@ -## Projects tools - -Short description of project's tooling - -#### Testing framework - -- [JUnit4](https://junit.org/junit4/) currently using as a main -testing framework. -- [KotlinTest](https://kotlinlang.org/api/latest/kotlin.test/index.html) -is in estimation. Could migrate to this one. - -#### Mock library - -- [Mockk](https://mockk.io/) is Kotlin-friendly mocking library - -#### Kotlin Linter - -- [Ktlint](https://ktlint.github.io/). To setup it follow -instruction `ktlint-setup-and-using.md` \ No newline at end of file diff --git a/docs/publishing.md b/docs/publishing.md deleted file mode 100644 index 31ec30eee5a..00000000000 --- a/docs/publishing.md +++ /dev/null @@ -1,69 +0,0 @@ -### Artifact distribution -This project uses SDK Registry to distribute the binaries. - -1. Push an artifact: -- Cut and push a new tag. It will publish new artifacts to `https://api.mapbox.com/downloads/v2/releases/maven`. The tag has to match the following pattern: - - `/^v{VERSION}/` for Navigation SDK -- Each merge to `main` pushes new snapshots to `https://api.mapbox.com/downloads/v2/snapshots/maven`. To build a snapshot from a custom branch, modify the `branches` filter of the `release-snapshot` CI job. - -2. (**only for stable artifacts, skip for snapshots**) Go to https://github.com/mapbox/api-downloads and create a new PR that adds/modifies a `config/mobile-navigation-{artifact}}/{VERSION}.yaml` file. The file should contain this Android entry (next to anything that might be present for iOS): -```yaml -api-downloads: v2 - -android: - group: navigation - -packages: - android: - - {artifactId} - -bundles: - android: {artifactId}-all -``` - -For example, the version 1.0.0 of the `core` artifact would need a `config/mobile-navigation-core/1.0.0.yaml`: -```yaml -api-downloads: v2 - -android: - group: navigation - -packages: - android: - - core - -bundles: - android: core-all -``` - -This procedure has to be repeated for all Core and UI artifacts. - -After a PR is merged, an artifact will be resolvable. - -You can read more about the publishing process at https://platform.mapbox.com/managed-infrastructure/sdk-registry/reference/#configure-the-sdk-registry. - -### Consuming a stable artifact using Gradle -```groovy -allprojects { - repositories { - maven { - url 'https://api.mapbox.com/downloads/v2/releases/maven' - authentication { - basic(BasicAuthentication) - } - credentials { - username = "mapbox" - password = "{secret Mapbox token with DOWNLOADS:READ scope}" - } - } - } -} - -dependencies { - implementation 'com.mapbox.navigation:core:VERSION' - implementation 'com.mapbox.navigation:ui:VERSION' -} -``` - -### Consuming a snapshot artifact using Gradle -Similarly as above with a difference that the repository URL should be `https://api.mapbox.com/downloads/v2/snapshots/maven`. \ No newline at end of file diff --git a/examples/.gitignore b/examples/.gitignore deleted file mode 100644 index d8d97fbf048..00000000000 --- a/examples/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -src/main/res/values/mapbox_access_token.xml \ No newline at end of file diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index 9f3fdb20273..00000000000 --- a/examples/README.md +++ /dev/null @@ -1,5 +0,0 @@ -Examples for Mapbox Navigation Android SDK have moved to their own separate repo, [available here](https://github.com/mapbox/mapbox-navigation-android-examples). - -The examples in this module are being transferred to the new repo, or are otherwise deprecated. - -General documentation for Mapbox Navigation Android SDK is [available here](https://docs.mapbox.com/android/navigation). diff --git a/examples/build.gradle b/examples/build.gradle deleted file mode 100644 index 8e2e9b1df89..00000000000 --- a/examples/build.gradle +++ /dev/null @@ -1,126 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply plugin: 'com.mapbox.maps.token' -apply from: "../gradle/script-git-version.gradle" -apply from: "../gradle/ktlint.gradle" -apply plugin: 'com.google.firebase.crashlytics' -apply plugin: 'com.google.gms.google-services' - -android { - compileSdkVersion androidVersions.compileSdkVersion - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - def getGitHash = { -> - try { - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'rev-parse', '--short', 'HEAD' - standardOutput = stdout - } - return stdout.toString().trim() - } catch (Exception exception) { - return "" - } - } - - defaultConfig { - applicationId "com.mapbox.navigation.examples" - minSdkVersion androidVersions.minSdkVersion - targetSdkVersion androidVersions.targetSdkVersion - multiDexEnabled true - versionCode gitVersionCode - versionName gitVersionName - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - testInstrumentationRunnerArguments clearPackageData: 'true' - vectorDrawables.useSupportLibrary = true - buildConfigField "String", "GIT_HASH", "\"${getGitHash()}\"" - } - - testOptions { - execution 'ANDROIDX_TEST_ORCHESTRATOR' - } - - signingConfigs { - release { - keyAlias System.getenv("CIRCLECI_ANDROID_KEYSTORE_ALIAS") - keyPassword System.getenv("CIRCLECI_ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD") - storeFile file("$project.rootDir/navigation_testapp.keystore") - storePassword System.getenv("CIRCLECI_ANDROID_KEYSTORE_PASSWORD") - } - } - - buildTypes { - debug { - testCoverageEnabled = false - manifestPlaceholders = [enableCrashReporting: "false"] - } - release { - minifyEnabled true - signingConfig signingConfigs.release - manifestPlaceholders = [enableCrashReporting: "true"] - firebaseCrashlytics { - mappingFileUploadEnabled = true - nativeSymbolUploadEnabled = true - strippedNativeLibsDir = 'build/intermediates/stripped_native_libs/release/out/lib/' - unstrippedNativeLibsDir = com.mapbox.gradle.NativeDownloadTask.UNSTRIPPED_NATIVE_LIBS_PATH - } - } - } - - - lintOptions { - abortOnError false - } - - buildFeatures { - viewBinding true - } -} - -task downloadUnstrippedNativeLibsDir(type: com.mapbox.gradle.NativeDownloadTask) { - mapboxDependencies = [ - dependenciesList.mapboxMapSdk, - dependenciesList.mapboxNavigator, - dependenciesList.mapboxCommonNative - ] - sdkRegistryToken = project.hasProperty('SDK_REGISTRY_TOKEN') - ? project.property('SDK_REGISTRY_TOKEN') - : System.getenv('SDK_REGISTRY_TOKEN') -} - -dependencies { - // Mapbox Navigation SDK - implementation project(':libnavigation-android') - - // test - androidTestImplementation project(':libtesting-ui') - androidTestImplementation dependenciesList.testRunner - androidTestUtil dependenciesList.testOrchestrator - - // Kotlin support - implementation dependenciesList.kotlinStdLib - - //Coroutines - implementation dependenciesList.coroutinesAndroid - - // Support libraries - implementation dependenciesList.androidXCore - implementation dependenciesList.materialDesign - implementation dependenciesList.androidXAppCompat - implementation dependenciesList.androidXCardView - implementation dependenciesList.androidXConstraintLayout - - implementation dependenciesList.gmsLocation - - implementation dependenciesList.multidex - - // Leak Canary - debugImplementation dependenciesList.leakCanaryDebug - - // Crashlytics - implementation dependenciesList.firebaseCrashlyticsNdk -} diff --git a/examples/src/debug/google-services.json b/examples/src/debug/google-services.json deleted file mode 100644 index 3e0b58dfc19..00000000000 --- a/examples/src/debug/google-services.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "project_info": { - "project_number": "empty-for-debugging", - "firebase_url": "empty-for-debugging", - "project_id": "mapbox-navigation-android", - "storage_bucket": "empty-for-debugging" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "empty-for-debugging", - "android_client_info": { - "package_name": "com.mapbox.navigation.examples" - } - }, - "api_key": [ - { - "current_key": "empty-for-debugging" - } - ] - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/examples/src/main/AndroidManifest.xml b/examples/src/main/AndroidManifest.xml deleted file mode 100644 index 0315b1cb48e..00000000000 --- a/examples/src/main/AndroidManifest.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/src/main/assets/replay-history-activity.json b/examples/src/main/assets/replay-history-activity.json deleted file mode 100644 index cb5d537b4ac..00000000000 --- a/examples/src/main/assets/replay-history-activity.json +++ /dev/null @@ -1 +0,0 @@ -{"events":[{"type":"start_transit","properties":1585549464.25,"event_timestamp":1585549464.250398},{"type":"initial_route","properties":{"routeIndex":"0","distance":5158.114,"duration":889.851,"geometry":"ubk~bAqpqjiGdAs[bK{@hW{AjB]fh@yCjFyAxGuFlUgNrUgNdZcPvNoIbe@wXre@wY|^{UdZcQdZcQrUgNxWcQbViM|TkKfNuEnNuDhWqH|^iLnh@gOxGyBzj@ce@lPiMvH}@xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ","weight":889.851,"weight_name":"routability","legs":[{"distance":5158.114,"duration":889.851,"summary":"国道246号線, 駒沢通り","steps":[{"distance":41.589,"duration":12.477,"geometry":"ubk~bAqpqjiGdAs[","name":"","mode":"driving","maneuver":{"location":[139.65033,35.641403],"bearing_before":0.0,"bearing_after":95.0,"instruction":"東方向です","type":"depart"},"voiceInstructions":[{"distanceAlongGeometry":41.589,"announcement":"東方向です その先 世田谷中央病院を右折です","ssmlAnnouncement":"東方向です その先 世田谷中央病院を右折です"}],"bannerInstructions":[{"distanceAlongGeometry":41.589,"primary":{"text":"世田谷中央病院","components":[{"text":"世田谷中央病院","type":"text"}],"type":"turn","modifier":"right"}}],"driving_side":"left","weight":12.477,"intersections":[{"location":[139.65033,35.641403],"bearings":[95],"entry":[true],"out":0}]},{"distance":1266.0,"duration":326.031,"geometry":"o`k~bAemrjiGbK{@hW{AjB]fh@yCjFyAxGuFlUgNrUgNdZcPvNoIbe@wXre@wY|^{UdZcQdZcQrUgNxWcQbViM|TkKfNuEnNuDhWqH|^iLnh@gOxGyBzj@ce@lPiM","name":"","mode":"driving","maneuver":{"location":[139.650787,35.641369],"bearing_before":95.0,"bearing_after":173.0,"instruction":"世田谷中央病院を右折です","type":"turn","modifier":"right"},"voiceInstructions":[{"distanceAlongGeometry":1246.0,"announcement":"1 キロメートル直進です","ssmlAnnouncement":"1 キロメートル直進です"},{"distanceAlongGeometry":271.8,"announcement":"300 メートル先、駒沢を右折です","ssmlAnnouncement":"300 メートル先、駒沢を右折です"},{"distanceAlongGeometry":58.2,"announcement":"駒沢を右折です","ssmlAnnouncement":"駒沢を右折です"}],"bannerInstructions":[{"distanceAlongGeometry":1266.0,"primary":{"text":"駒沢","components":[{"text":"駒沢","type":"text"}],"type":"turn","modifier":"right"}}],"driving_side":"left","weight":326.031,"intersections":[{"location":[139.650787,35.641369],"bearings":[4,173,275],"entry":[true,true,false],"in":2,"out":1},{"location":[139.650818,35.641174],"bearings":[92,175,353],"entry":[false,true,false],"in":2,"out":1},{"location":[139.650864,35.640785],"bearings":[94,167,355],"entry":[true,true,false],"in":2,"out":1},{"location":[139.650879,35.640732],"bearings":[176,265,347],"entry":[true,true,false],"in":2,"out":0},{"location":[139.651001,35.639954],"bearings":[92,144,270,349],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.651367,35.639454],"bearings":[151,267,332],"entry":[true,false,false],"in":2,"out":0},{"location":[139.651611,35.639091],"bearings":[61,153,267,331],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.651886,35.638657],"bearings":[61,152,333],"entry":[true,true,false],"in":2,"out":1},{"location":[139.652054,35.638405],"bearings":[53,151,267,332],"entry":[false,true,true,false],"in":3,"out":1},{"location":[139.652466,35.637794],"bearings":[61,151,265,331],"entry":[true,true,false,false],"in":3,"out":1},{"location":[139.652893,35.637177],"bearings":[61,150,273,331],"entry":[false,true,true,false],"in":3,"out":1},{"location":[139.653259,35.636665],"bearings":[82,152,262,330],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.653549,35.63623],"bearings":[152,245,332],"entry":[true,true,false],"in":2,"out":0},{"location":[139.653839,35.635796],"bearings":[56,151,237,332],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.654083,35.635433],"bearings":[56,149,237,331],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.654602,35.634666],"bearings":[110,155,333],"entry":[false,true,false],"in":2,"out":1},{"location":[139.6548,35.634315],"bearings":[56,160,237,335],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.654907,35.634071],"bearings":[63,163,340],"entry":[false,true,false],"in":2,"out":1},{"location":[139.654999,35.633823],"bearings":[56,162,229,343],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.655151,35.633434],"bearings":[68,161,246,342],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.655365,35.632923],"bearings":[63,162,249,341],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.655624,35.632259],"bearings":[86,161,342],"entry":[false,true,false],"in":2,"out":1},{"location":[139.655685,35.632118],"bearings":[55,145,235,341],"entry":[false,true,true,false],"in":3,"out":1},{"location":[139.656296,35.631416],"bearings":[58,146,238,325],"entry":[true,true,true,false],"in":3,"out":1}]},{"distance":3376.0,"duration":409.8,"geometry":"aaw}bAws}jiGvH}@xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ","name":"国道246号線","ref":"国道246号線","mode":"driving","maneuver":{"location":[139.656525,35.631138],"bearing_before":146.0,"bearing_after":254.0,"instruction":"駒沢を右折です","type":"turn","modifier":"right"},"voiceInstructions":[{"distanceAlongGeometry":3356.0,"announcement":"国道246号線を3 キロメートル直進です","ssmlAnnouncement":"国道246号線を3 キロメートル直進です"},{"distanceAlongGeometry":576.7,"announcement":"600 メートル先、左折です","ssmlAnnouncement":"600 メートル先、左折です"},{"distanceAlongGeometry":123.6,"announcement":"左折です","ssmlAnnouncement":"左折です"}],"bannerInstructions":[{"distanceAlongGeometry":3376.0,"primary":{"text":"左折です","components":[{"text":"左折です","type":"text"}],"type":"turn","modifier":"left"}},{"distanceAlongGeometry":123.6,"primary":{"text":"左折です","components":[{"text":"左折です","type":"text"}],"type":"turn","modifier":"left"},"sub":{"text":"","components":[{"text":"","type":"lane","directions":["left","straight"],"active":true},{"text":"","type":"lane","directions":["straight"],"active":false},{"text":"","type":"lane","directions":["right"],"active":false}]}}],"driving_side":"left","weight":409.8,"intersections":[{"location":[139.656525,35.631138],"bearings":[73,163,171,251,326],"entry":[true,true,true,false,false],"in":4,"out":2},{"location":[139.656555,35.630981],"bearings":[0,75,180,254,351],"entry":[true,false,true,true,false],"in":4,"out":3},{"location":[139.65596,35.63084],"bearings":[74,163,253],"entry":[false,true,true],"in":0,"out":2},{"location":[139.655441,35.630711],"bearings":[73,253],"entry":[false,true],"in":0,"out":1},{"location":[139.654648,35.630508],"bearings":[73,258],"entry":[false,true],"in":0,"out":1},{"location":[139.654541,35.630489],"bearings":[78,172,253],"entry":[false,true,true],"in":0,"out":2},{"location":[139.654205,35.630405],"bearings":[73,254],"entry":[false,true],"in":0,"out":1},{"location":[139.653809,35.630314],"bearings":[74,175,248,282,283],"entry":[false,true,true,true,true],"in":0,"out":2,"lanes":[{"valid":true,"indications":["left","straight"]},{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight","slight right"]}]},{"location":[139.653061,35.630074],"bearings":[69,175,247],"entry":[false,true,true],"in":0,"out":2},{"location":[139.652802,35.629982],"bearings":[67,180,248],"entry":[false,false,true],"in":0,"out":2},{"location":[139.652267,35.629807],"bearings":[68,175,249],"entry":[false,true,true],"in":0,"out":2},{"location":[139.652206,35.629787],"bearings":[69,247],"entry":[false,true],"in":0,"out":1},{"location":[139.651352,35.62949],"bearings":[67,253],"entry":[false,true],"in":0,"out":1},{"location":[139.651276,35.629471],"bearings":[73,180,244],"entry":[false,false,true],"in":0,"out":2},{"location":[139.651093,35.629398],"bearings":[64,184,248],"entry":[false,true,true],"in":0,"out":2},{"location":[139.650421,35.629177],"bearings":[0,68,184,248],"entry":[true,false,false,true],"in":1,"out":3},{"location":[139.649979,35.629028],"bearings":[68,182,247],"entry":[false,true,true],"in":0,"out":2},{"location":[139.649734,35.628944],"bearings":[67,180,247],"entry":[false,true,true],"in":0,"out":2},{"location":[139.64856,35.628548],"bearings":[67,248],"entry":[false,true],"in":0,"out":1},{"location":[139.648026,35.628368],"bearings":[68,155,247],"entry":[false,true,true],"in":0,"out":2},{"location":[139.647766,35.628277],"bearings":[67,168,248],"entry":[false,true,true],"in":0,"out":2},{"location":[139.646774,35.627945],"bearings":[68,243],"entry":[false,true],"in":0,"out":1},{"location":[139.646729,35.627926],"bearings":[63,135,247],"entry":[false,true,true],"in":0,"out":2},{"location":[139.646408,35.627815],"bearings":[67,153,249],"entry":[false,true,true],"in":0,"out":2},{"location":[139.646286,35.627777],"bearings":[69,152,243],"entry":[false,false,true],"in":0,"out":2},{"location":[139.645889,35.627609],"bearings":[63,152,242],"entry":[false,true,true],"in":0,"out":2},{"location":[139.645569,35.627472],"bearings":[62,153,243],"entry":[false,false,true],"in":0,"out":2},{"location":[139.644974,35.62722],"bearings":[63,153,244,332,335],"entry":[false,true,true,false,false],"in":0,"out":2,"lanes":[{"valid":true,"indications":["left","straight"]},{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight"]}]},{"location":[139.644135,35.626881],"bearings":[64,153,243],"entry":[false,true,true],"in":0,"out":2},{"location":[139.64325,35.626511],"bearings":[63,152,243,329,332],"entry":[false,false,true,true,true],"in":0,"out":2,"lanes":[{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight","right"]}]},{"location":[139.642136,35.626045],"bearings":[63,153,241],"entry":[false,true,true],"in":0,"out":2},{"location":[139.641602,35.625805],"bearings":[61,158,238],"entry":[false,true,true],"in":0,"out":2},{"location":[139.641418,35.625713],"bearings":[58,243],"entry":[false,true],"in":0,"out":1},{"location":[139.641373,35.625694],"bearings":[63,240],"entry":[false,true],"in":0,"out":1},{"location":[139.640976,35.625507],"bearings":[60,158,241],"entry":[false,false,true],"in":0,"out":2},{"location":[139.640091,35.625111],"bearings":[61,156,247],"entry":[false,true,true],"in":0,"out":2},{"location":[139.640015,35.625084],"bearings":[67,240],"entry":[false,true],"in":0,"out":1},{"location":[139.639175,35.624695],"bearings":[60,152,240],"entry":[false,true,true],"in":0,"out":2},{"location":[139.638641,35.624443],"bearings":[60,243],"entry":[false,true],"in":0,"out":1},{"location":[139.638,35.624176],"bearings":[63,146,240,321,324],"entry":[false,true,true,true,true],"in":0,"out":2,"lanes":[{"valid":true,"indications":["left","straight"]},{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight","right"]}]},{"location":[139.637009,35.623714],"bearings":[60,243],"entry":[false,true],"in":0,"out":1},{"location":[139.636963,35.623695],"bearings":[63,141,238],"entry":[false,true,true],"in":0,"out":2},{"location":[139.636871,35.62365],"bearings":[58,139,240],"entry":[false,false,true],"in":0,"out":2},{"location":[139.636017,35.623268],"bearings":[18,62,201,242],"entry":[true,false,false,true],"in":1,"out":3,"lanes":[{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight"]},{"valid":true,"indications":["straight"]}]},{"location":[139.635956,35.623241],"bearings":[62,239],"entry":[false,true],"in":0,"out":1},{"location":[139.635254,35.622898],"bearings":[59,110,241],"entry":[false,true,true],"in":0,"out":2},{"location":[139.634399,35.62252],"bearings":[61,190,242],"entry":[false,true,true],"in":0,"out":2},{"location":[139.633957,35.622326],"bearings":[62,115,241],"entry":[false,false,true],"in":0,"out":2},{"location":[139.633545,35.622139],"bearings":[61,234,242],"entry":[false,true,true],"in":0,"out":2},{"location":[139.631699,35.621334],"bearings":[62,238],"classes":["tunnel"],"entry":[false,true],"in":0,"out":1},{"location":[139.631241,35.621101],"bearings":[59,229],"classes":["tunnel"],"entry":[false,true],"in":0,"out":1},{"location":[139.630875,35.620789],"bearings":[39,215],"entry":[false,true],"in":0,"out":1},{"location":[139.629364,35.619076],"bearings":[35,52,215],"entry":[false,false,true],"in":0,"out":2},{"location":[139.628815,35.618427],"bearings":[35,138,206],"entry":[false,true,true],"in":0,"out":2},{"location":[139.628754,35.618324],"bearings":[26,200,220],"entry":[false,true,true],"in":0,"out":1},{"location":[139.62854,35.617947],"bearings":[31,211],"entry":[false,true],"in":0,"out":1},{"location":[139.628204,35.617409],"bearings":[24,197],"entry":[false,true],"in":0,"out":1},{"location":[139.627853,35.616203],"bearings":[17,118,191],"entry":[false,true,true],"in":0,"out":2},{"location":[139.627808,35.61602],"bearings":[11,190],"entry":[false,true],"in":0,"out":1},{"location":[139.627686,35.61554],"bearings":[13,190],"entry":[false,true],"in":0,"out":1}]},{"distance":244.0,"duration":69.206,"geometry":"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM","name":"","mode":"driving","maneuver":{"location":[139.627502,35.61467],"bearing_before":190.0,"bearing_after":95.0,"instruction":"左折です","type":"turn","modifier":"left"},"voiceInstructions":[{"distanceAlongGeometry":224.0,"announcement":"200 メートル先、右折です","ssmlAnnouncement":"200 メートル先、右折です"},{"distanceAlongGeometry":52.9,"announcement":"右折です その先 左折です。その先、駒沢通りです","ssmlAnnouncement":"右折です その先 左折です。その先、駒沢通りです"}],"bannerInstructions":[{"distanceAlongGeometry":244.0,"primary":{"text":"右折です","components":[{"text":"右折です","type":"text"}],"type":"turn","modifier":"right"}},{"distanceAlongGeometry":52.9,"primary":{"text":"右折です","components":[{"text":"右折です","type":"text"}],"type":"turn","modifier":"right"},"sub":{"text":"駒沢通り","components":[{"text":"駒沢通り","type":"text"}],"type":"turn","modifier":"left"}}],"driving_side":"left","weight":69.206,"intersections":[{"location":[139.627502,35.61467],"bearings":[10,95,187,282,284],"entry":[false,true,true,true,true],"in":0,"out":1,"lanes":[{"valid":true,"indications":["left","straight"]},{"valid":false,"indications":["straight"]},{"valid":false,"indications":["right"]}]},{"location":[139.62854,35.614391],"bearings":[11,120,184,292],"entry":[true,true,true,false],"in":3,"out":1},{"location":[139.629242,35.614056],"bearings":[120,199,300],"entry":[true,true,false],"in":2,"out":0},{"location":[139.629684,35.613846],"bearings":[119,300],"entry":[true,false],"in":1,"out":0}]},{"distance":138.0,"duration":48.915,"geometry":"{au|bAqtiiiG|TnI`B\\dEzAl_@hMxGxB","name":"","mode":"driving","maneuver":{"location":[139.629913,35.613743],"bearing_before":119.0,"bearing_after":201.0,"instruction":"右折です","type":"turn","modifier":"right"},"voiceInstructions":[{"distanceAlongGeometry":42.3,"announcement":"左折です。その先、駒沢通りです その先 左折です","ssmlAnnouncement":"左折です。その先、駒沢通りです その先 左折です"}],"bannerInstructions":[{"distanceAlongGeometry":138.0,"primary":{"text":"駒沢通り","components":[{"text":"駒沢通り","type":"text"}],"type":"turn","modifier":"left"}},{"distanceAlongGeometry":42.3,"primary":{"text":"駒沢通り","components":[{"text":"駒沢通り","type":"text"}],"type":"turn","modifier":"left"},"sub":{"text":"左折です","components":[{"text":"左折です","type":"text"}],"type":"turn","modifier":"left"}}],"driving_side":"left","weight":48.915,"intersections":[{"location":[139.629913,35.613743],"bearings":[23,130,201,299],"entry":[true,true,true,false],"in":3,"out":2},{"location":[139.629745,35.613392],"bearings":[21,194],"entry":[false,true],"in":0,"out":1},{"location":[139.62973,35.613342],"bearings":[14,201],"entry":[false,true],"in":0,"out":1},{"location":[139.629684,35.613243],"bearings":[21,200,291],"entry":[false,true,true],"in":0,"out":1},{"location":[139.629456,35.612724],"bearings":[20,199,291],"entry":[false,true,true],"in":0,"out":1}]},{"distance":36.0,"duration":10.64,"geometry":"myr|bActhiiGt@?d@?bGaR","name":"駒沢通り","mode":"driving","maneuver":{"location":[139.629395,35.612583],"bearing_before":199.0,"bearing_after":132.0,"instruction":"左折です。その先、駒沢通りです","type":"turn","modifier":"left"},"voiceInstructions":[{"distanceAlongGeometry":36.0,"announcement":"左折です その先 まもなく目的地に到着します","ssmlAnnouncement":"左折です その先 まもなく目的地に到着します"}],"bannerInstructions":[{"distanceAlongGeometry":36.0,"primary":{"text":"左折です","components":[{"text":"左折です","type":"text"}],"type":"turn","modifier":"left"}}],"driving_side":"left","weight":10.64,"intersections":[{"location":[139.629395,35.612583],"bearings":[19,132],"entry":[false,true],"in":0,"out":1}]},{"distance":56.526,"duration":12.783,"geometry":"mnr|bAegiiiG_EyBoC}@sPmJ","name":"","mode":"driving","maneuver":{"location":[139.6297,35.612408],"bearing_before":119.0,"bearing_after":27.0,"instruction":"左折です","type":"turn","modifier":"left"},"voiceInstructions":[{"distanceAlongGeometry":22.1,"announcement":"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です","ssmlAnnouncement":"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です"}],"bannerInstructions":[{"distanceAlongGeometry":22.1,"primary":{"text":"日本, 東京都東京都世田谷区玉川2丁目14番19","components":[{"text":"日本, 東京都東京都世田谷区玉川2丁目14番19","type":"text"}],"type":"arrive","modifier":"left"}}],"driving_side":"left","weight":12.783,"intersections":[{"location":[139.6297,35.612408],"bearings":[27,122,299],"entry":[true,true,false],"in":2,"out":0},{"location":[139.629761,35.612503],"bearings":[19,207],"entry":[true,false],"in":1,"out":0},{"location":[139.629791,35.612576],"bearings":[28,199],"entry":[true,false],"in":1,"out":0}]},{"distance":0.0,"duration":0.0,"geometry":"qjs|bAkxiiiG??","name":"","mode":"driving","maneuver":{"location":[139.629974,35.612858],"bearing_before":28.0,"bearing_after":0.0,"instruction":"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です","type":"arrive","modifier":"left"},"voiceInstructions":[],"bannerInstructions":[],"driving_side":"left","weight":0.0,"intersections":[{"location":[139.629974,35.612858],"bearings":[208],"entry":[true],"in":0}]}],"annotation":{"distance":[41.6,21.8,43.5,6.1,73.8,13.8,19.2,45.6,46.0,54.4,31.9,77.5,78.9,65.8,55.1,55.1,46.0,51.4,46.1,43.0,28.8,28.8,45.5,60.1,77.5,16.7,95.7,37.3,17.6,56.1,49.1,75.2,9.9,31.8,37.3,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],"duration":[14.972,4.137,8.244,2.441,17.709,3.312,4.609,10.949,6.899,7.534,4.414,9.62,14.204,13.944,10.432,8.618,5.519,6.604,5.928,7.035,9.44,9.431,10.229,12.726,12.135,1.499,22.963,13.421,1.587,2.766,2.422,3.71,0.488,1.567,1.84,2.226,2.715,1.706,3.475,0.292,4.148,0.356,0.909,4.069,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.092,7.668,4.37,6.829,11.745,8.105,8.869,4.419,0.959,0.23,2.046,6.212,0.371,4.311,2.755,3.214,10.342,0.453,0.48,7.403,1.184,0.309,7.413,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.744,6.465,3.37,17.681,2.142,5.572,17.929,11.535,15.172,7.748,8.877,1.205,1.415,11.044,3.997,0.713,0.51,7.48,1.436,1.023,4.263],"congestion":["unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown","unknown"]}}],"routeOptions":{"baseUrl":"https://api.mapbox.com","user":"mapbox","profile":"driving-traffic","coordinates":"139.650327,35.6413839;139.629888,35.6129","alternatives":true,"language":"ja","continue_straight":false,"roundabout_exits":false,"geometries":"polyline6","overview":"full","steps":true,"annotations":"congestion,duration,distance","voice_instructions":true,"banner_instructions":true,"voice_units":"metric","access_token":"pk.abcd1234","uuid":"PrimaryRoute:QBdVoE_2loU6GIpScZQbTMw2pt0db8T4_kaT77gmDwRPwchGWe1M5g==","waypoint_names":";日本, 東京都東京都世田谷区玉川2丁目14番19","waypoint_targets":";"},"voiceLocale":"ja-JP"},"event_timestamp":1585549464.255122},{"type":"updateLocation","location":{"lat":35.6413849,"lon":139.6503257,"time":1585549464.351,"speed":0.019893331453204156,"bearing":315.4391174316406,"altitude":75.4000015258789,"accuracyHorizontal":7.504000186920166,"provider":"fused"},"result":true,"event_timestamp":1585549464.351837,"delta_ms":0},{"type":"getStatus","timestamp":1585549465.852,"event_timestamp":1585549464.452849,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549465.852,"speed":0.019893331453204156,"bearing":95.27259826660156,"altitude":75.4000015258789,"accuracyHorizontal":7.504000186920166,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.501,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"東方向です その先 世田谷中央病院を右折です","announcement":"東方向です その先 世田谷中央病院を右折です","remaining_step_distance":41.58866500854492,"index":0},"banner_instruction":{"primary":{"text":"世田谷中央病院","type":"turn","modifier":"right","components":[{"type":"text","text":"世田谷中央病院"}]},"remaining_step_distance":41.58866500854492,"index":0},"key_points":[]},"delta_ms":100},{"type":"updateLocation","location":{"lat":35.6413849,"lon":139.6503257,"time":1585549464.367,"speed":0.019893331453204156,"bearing":315.4391174316406,"altitude":75.4000015258789,"accuracyHorizontal":7.504000186920166,"provider":"fused"},"result":true,"event_timestamp":1585549464.454094,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414035,"lon":139.6503237,"time":1585549465.462,"speed":0.6238900423049927,"bearing":84.597412109375,"altitude":75.4000015258789,"accuracyHorizontal":6.9679999351501469,"provider":"fused"},"result":true,"event_timestamp":1585549465.463911,"delta_ms":0},{"type":"getStatus","timestamp":1585549466.99,"event_timestamp":1585549465.490938,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549466.99,"speed":0.42378687858581545,"bearing":95.27259826660156,"altitude":75.4000015258789,"accuracyHorizontal":6.9679999351501469,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.528,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549465.852,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"getStatus","timestamp":1585549468.002,"event_timestamp":1585549466.503043,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549468.002,"speed":0.42378687858581545,"bearing":95.27259826660156,"altitude":75.4000015258789,"accuracyHorizontal":6.9679999351501469,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.54,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549466.99,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414099,"lon":139.6503284,"time":1585549466.64,"speed":0.6192619204521179,"bearing":87.05192565917969,"altitude":75.0999984741211,"accuracyHorizontal":6.585000038146973,"provider":"fused"},"result":true,"event_timestamp":1585549466.640382,"delta_ms":0},{"type":"getStatus","timestamp":1585549469.012,"event_timestamp":1585549467.512604,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549469.012,"speed":0.5879608988761902,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":6.585000038146973,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.372,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549468.002,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641412,"lon":139.6503175,"time":1585549467.619,"speed":0.24957311153411866,"bearing":242.91673278808595,"altitude":75.0999984741211,"accuracyHorizontal":6.297999858856201,"provider":"fused"},"result":true,"event_timestamp":1585549467.620136,"delta_ms":0},{"type":"getStatus","timestamp":1585549470.028,"event_timestamp":1585549468.528905,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549470.028,"speed":0.3870573043823242,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":6.297999858856201,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.409,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549469.012,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641404,"lon":139.650305,"time":1585549468.618,"speed":0.33417320251464846,"bearing":245.20907592773438,"altitude":75.0999984741211,"accuracyHorizontal":5.665999889373779,"provider":"fused"},"result":true,"event_timestamp":1585549468.618908,"delta_ms":0},{"type":"getStatus","timestamp":1585549471.037,"event_timestamp":1585549469.537377,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549471.037,"speed":0.3644775450229645,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":5.665999889373779,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.419,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549470.028,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6413943,"lon":139.6502941,"time":1585549469.62,"speed":0.8038511872291565,"bearing":225.20404052734376,"altitude":75.0999984741211,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585549469.620704,"delta_ms":0},{"type":"getStatus","timestamp":1585549472.045,"event_timestamp":1585549470.545341,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549472.045,"speed":0.6061391830444336,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.425,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549471.037,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6413961,"lon":139.6502907,"time":1585549470.621,"speed":0.4276358187198639,"bearing":255.9221954345703,"altitude":75.0999984741211,"accuracyHorizontal":4.998000144958496,"provider":"fused"},"result":true,"event_timestamp":1585549470.621788,"delta_ms":0},{"type":"getStatus","timestamp":1585549473.054,"event_timestamp":1585549471.554307,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549473.054,"speed":0.46904322504997256,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":4.998000144958496,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.433,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549472.045,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6413973,"lon":139.6502884,"time":1585549471.622,"speed":0.2947760820388794,"bearing":276.3182373046875,"altitude":75.0999984741211,"accuracyHorizontal":4.861000061035156,"provider":"fused"},"result":true,"event_timestamp":1585549471.622399,"delta_ms":0},{"type":"getStatus","timestamp":1585549474.063,"event_timestamp":1585549472.565708,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549474.063,"speed":0.3510580062866211,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":4.861000061035156,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.441,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549473.054,"bearing":95.27259826660156}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6413991,"lon":139.6502837,"time":1585549472.623,"speed":0.48766353726387026,"bearing":270.1279602050781,"altitude":75.0999984741211,"accuracyHorizontal":4.093999862670898,"provider":"fused"},"result":true,"event_timestamp":1585549472.623545,"delta_ms":0},{"type":"getStatus","timestamp":1585549475.09,"event_timestamp":1585549473.591252,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549475.09,"speed":0.47461360692977908,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":4.093999862670898,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.467,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549474.063,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414017,"lon":139.6502743,"time":1585549473.64,"speed":1.788832664489746,"bearing":286.99951171875,"altitude":75.0999984741211,"accuracyHorizontal":4.0289998054504398,"provider":"fused"},"result":true,"event_timestamp":1585549473.640753,"delta_ms":0},{"type":"getStatus","timestamp":1585549476.101,"event_timestamp":1585549474.603888,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549476.101,"speed":1.2922378778457642,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":4.0289998054504398,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.461,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549475.09,"bearing":95.27259826660156}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6414077,"lon":139.6502524,"time":1585549474.646,"speed":2.549307346343994,"bearing":288.0007629394531,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549474.646508,"delta_ms":0},{"type":"getStatus","timestamp":1585549477.118,"event_timestamp":1585549475.619904,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549477.118,"speed":2.133134126663208,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.472,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549476.101,"bearing":95.27259826660156}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414123,"lon":139.6502273,"time":1585549475.643,"speed":3.4504637718200685,"bearing":277.13543701171877,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549475.643951,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414146,"lon":139.6501999,"time":1585549476.378,"speed":3.4674530029296877,"bearing":277.8109130859375,"altitude":75.0999984741211,"accuracyHorizontal":4.711999893188477,"provider":"fused"},"result":true,"event_timestamp":1585549476.3783,"delta_ms":0},{"type":"getStatus","timestamp":1585549478.133,"event_timestamp":1585549476.634072,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549478.133,"speed":3.167726993560791,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":4.711999893188477,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.755,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549477.118,"bearing":95.27259826660156}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414167,"lon":139.6501627,"time":1585549477.625,"speed":2.801424503326416,"bearing":272.1856689453125,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"result":true,"event_timestamp":1585549477.626134,"delta_ms":0},{"type":"getStatus","timestamp":1585549479.143,"event_timestamp":1585549477.644362,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549479.143,"speed":2.9433646202087404,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.518,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549478.133,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414303,"lon":139.6500993,"time":1585549478.636,"speed":5.149227142333984,"bearing":278.1235046386719,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"result":true,"event_timestamp":1585549478.63699,"delta_ms":0},{"type":"getStatus","timestamp":1585549480.155,"event_timestamp":1585549478.657234,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549480.155,"speed":4.4106526374816898,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.519,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549479.143,"bearing":95.27259826660156}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414367,"lon":139.650028,"time":1585549479.636,"speed":5.437314510345459,"bearing":276.0317687988281,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"result":true,"event_timestamp":1585549479.638353,"delta_ms":1},{"type":"getStatus","timestamp":1585549481.172,"event_timestamp":1585549479.674714,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549481.172,"speed":5.220321178436279,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.536,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549480.155,"bearing":95.27259826660156}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414413,"lon":139.6499668,"time":1585549480.632,"speed":5.0868940353393559,"bearing":274.99560546875,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"result":true,"event_timestamp":1585549480.632602,"delta_ms":0},{"type":"getStatus","timestamp":1585549482.189,"event_timestamp":1585549480.689891,"result":{"route_state":"tracking","location":{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549482.189,"speed":5.292014122009277,"bearing":95.27259826660156,"altitude":75.0999984741211,"accuracyHorizontal":6.1519999504089359,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.557,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64140319824219,"lon":139.65032958984376,"time":1585549481.172,"bearing":95.27259826660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414454,"lon":139.6499114,"time":1585549481.639,"speed":4.728323936462402,"bearing":276.4128112792969,"altitude":75.0999984741211,"accuracyHorizontal":6.820000171661377,"provider":"fused"},"result":true,"event_timestamp":1585549481.639914,"delta_ms":0},{"type":"getStatus","timestamp":1585549483.201,"event_timestamp":1585549481.702385,"result":{"route_state":"tracking","location":{"lat":35.64143371582031,"lon":139.6498260498047,"time":1585549483.201,"speed":4.960634708404541,"bearing":278.74420166015627,"altitude":75.0999984741211,"accuracyHorizontal":6.820000171661377,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414509,"lon":139.6498841,"time":1585549482.311,"speed":4.997251510620117,"bearing":329.9497985839844,"altitude":75.0999984741211,"accuracyHorizontal":7.129000186920166,"provider":"fused"},"result":true,"event_timestamp":1585549482.311482,"delta_ms":0},{"type":"getStatus","timestamp":1585549484.209,"event_timestamp":1585549482.710651,"result":{"route_state":"tracking","location":{"lat":35.64143753051758,"lon":139.6497802734375,"time":1585549484.209,"speed":4.962802886962891,"bearing":278.74420166015627,"altitude":75.0999984741211,"accuracyHorizontal":7.129000186920166,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"getStatus","timestamp":1585549485.223,"event_timestamp":1585549483.723874,"result":{"route_state":"tracking","location":{"lat":35.64143753051758,"lon":139.6497802734375,"time":1585549485.223,"speed":4.962802886962891,"bearing":278.74420166015627,"altitude":75.0999984741211,"accuracyHorizontal":7.129000186920166,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414773,"lon":139.649781,"time":1585549483.809,"speed":6.22176456451416,"bearing":282.0473937988281,"altitude":75.0999984741211,"accuracyHorizontal":6.413000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549483.809748,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414912,"lon":139.6497034,"time":1585549484.634,"speed":7.076234817504883,"bearing":281.0474853515625,"altitude":75.0999984741211,"accuracyHorizontal":6.098999977111816,"provider":"fused"},"result":true,"event_timestamp":1585549484.634928,"delta_ms":0},{"type":"getStatus","timestamp":1585549486.231,"event_timestamp":1585549484.732302,"result":{"route_state":"offRoute","location":{"lat":35.64146041870117,"lon":139.6496124267578,"time":1585549486.231,"speed":6.718527793884277,"bearing":277.6650695800781,"altitude":75.0999984741211,"accuracyHorizontal":6.098999977111816,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5154.5439453125,"remaining_leg_duration":889.852,"step_index":0,"remaining_step_distance":41.58866500854492,"remaining_step_duration":12.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585549484.757795,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6415067,"lon":139.6496199,"time":1585549485.627,"speed":7.070960998535156,"bearing":280.01220703125,"altitude":75.0999984741211,"accuracyHorizontal":6.098999977111816,"provider":"fused"},"result":true,"event_timestamp":1585549485.627815,"delta_ms":0},{"type":"getStatus","timestamp":1585549487.268,"event_timestamp":1585549485.769376,"result":{"route_state":"invalid","location":{"lat":35.64147186279297,"lon":139.64950561523438,"time":1585549487.268,"speed":7.133422374725342,"bearing":277.6650695800781,"altitude":75.0999984741211,"accuracyHorizontal":6.098999977111816,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":5517.938,\"duration\":972.128,\"geometry\":\"gfk~bAwcpjiGe@lJaCn]e@pHiBn]d^tErVxBbp@yB?_h@?o^?}S?}i@?af@xGuFlUgNrUgNdZcPvNoIbe@wXre@wY|^{UdZcQdZcQrUgNxWcQbViM|TkKfNuEnNuDhWqH|^iLnh@gOxGyBzj@ce@lPiMvH}@xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":972.128,\"weight_name\":\"routability\",\"legs\":[{\"distance\":5517.938,\"duration\":972.128,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":120.413,\"duration\":25.612,\"geometry\":\"gfk~bAwcpjiGe@lJaCn]e@pHiBn]\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.649612,35.64146],\"bearing_before\":0.0,\"bearing_after\":277.0,\"instruction\":\"西方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":120.413,\"announcement\":\"西方向です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e西方向です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":70.5,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":120.413,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":25.612,\"intersections\":[{\"location\":[139.649612,35.64146],\"bearings\":[277],\"entry\":[true],\"out\":0},{\"location\":[139.649429,35.641479],\"bearings\":[6,97,279],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.648941,35.641544],\"bearings\":[8,99,279],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.648788,35.641563],\"bearings\":[99,187,278],\"entry\":[false,true,true],\"in\":0,\"out\":2}]},{\"distance\":187.0,\"duration\":60.857,\"geometry\":\"_pk~bAwqmjiGd^tErVxBbp@yB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6483,35.641617],\"bearing_before\":278.0,\"bearing_after\":191.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":167.0,\"announcement\":\"200 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":46.1,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":187.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":60.857,\"intersections\":[{\"location\":[139.6483,35.641617],\"bearings\":[98,191,287],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.648132,35.640739],\"bearings\":[5,94,176,276],\"entry\":[false,false,true,true],\"in\":0,\"out\":2}]},{\"distance\":254.0,\"duration\":52.738,\"geometry\":\"ahh~bAakmjiG?_h@?o^?}S?}i@?af@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.648193,35.639954],\"bearing_before\":176.0,\"bearing_after\":90.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":234.0,\"announcement\":\"200 メートル先、弦巻一丁目を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、弦巻一丁目を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":72.2,\"announcement\":\"弦巻一丁目を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e弦巻一丁目を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":254.0,\"primary\":{\"text\":\"弦巻一丁目\",\"components\":[{\"text\":\"弦巻一丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":52.738,\"intersections\":[{\"location\":[139.648193,35.639954],\"bearings\":[90,270,356],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.648849,35.639954],\"bearings\":[11,90,184,270],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.649353,35.639954],\"bearings\":[90,180,270],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.649689,35.639954],\"bearings\":[90,175,270,358],\"entry\":[true,true,false,true],\"in\":2,\"out\":0},{\"location\":[139.650375,35.639954],\"bearings\":[90,270,353],\"entry\":[true,false,false],\"in\":1,\"out\":0}]},{\"distance\":1106.0,\"duration\":281.777,\"geometry\":\"ahh~bAozrjiGxGuFlUgNrUgNdZcPvNoIbe@wXre@wY|^{UdZcQdZcQrUgNxWcQbViM|TkKfNuEnNuDhWqH|^iLnh@gOxGyBzj@ce@lPiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.651001,35.639954],\"bearing_before\":90.0,\"bearing_after\":144.0,\"instruction\":\"弦巻一丁目を右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":1086.0,\"announcement\":\"1 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e1 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":274.8,\"announcement\":\"300 メートル先、駒沢を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、駒沢を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":58.9,\"announcement\":\"駒沢を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e駒沢を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":1106.0,\"primary\":{\"text\":\"駒沢\",\"components\":[{\"text\":\"駒沢\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":281.777,\"intersections\":[{\"location\":[139.651001,35.639954],\"bearings\":[92,144,270,349],\"entry\":[true,true,false,true],\"in\":2,\"out\":1},{\"location\":[139.651367,35.639454],\"bearings\":[151,267,332],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.651611,35.639091],\"bearings\":[61,153,267,331],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.651886,35.638657],\"bearings\":[61,152,333],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.652054,35.638405],\"bearings\":[53,151,267,332],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.652466,35.637794],\"bearings\":[61,151,265,331],\"entry\":[true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.652893,35.637177],\"bearings\":[61,150,273,331],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.653259,35.636665],\"bearings\":[82,152,262,330],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.653549,35.63623],\"bearings\":[152,245,332],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.653839,35.635796],\"bearings\":[56,151,237,332],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.654083,35.635433],\"bearings\":[56,149,237,331],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.654602,35.634666],\"bearings\":[110,155,333],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.6548,35.634315],\"bearings\":[56,160,237,335],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.654907,35.634071],\"bearings\":[63,163,340],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.654999,35.633823],\"bearings\":[56,162,229,343],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.655151,35.633434],\"bearings\":[68,161,246,342],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.655365,35.632923],\"bearings\":[63,162,249,341],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.655624,35.632259],\"bearings\":[86,161,342],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.655685,35.632118],\"bearings\":[55,145,235,341],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.656296,35.631416],\"bearings\":[58,146,238,325],\"entry\":[true,true,true,false],\"in\":3,\"out\":1}]},{\"distance\":3376.0,\"duration\":409.599,\"geometry\":\"aaw}bAws}jiGvH}@xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656525,35.631138],\"bearing_before\":146.0,\"bearing_after\":254.0,\"instruction\":\"駒沢を右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3356.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":577.0,\"announcement\":\"600 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e600 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":123.6,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3376.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":123.6,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":409.599,\"intersections\":[{\"location\":[139.656525,35.631138],\"bearings\":[73,163,171,251,326],\"entry\":[true,true,true,false,false],\"in\":4,\"out\":2},{\"location\":[139.656555,35.630981],\"bearings\":[0,75,180,254,351],\"entry\":[true,false,true,true,false],\"in\":4,\"out\":3},{\"location\":[139.65596,35.63084],\"bearings\":[74,163,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.655441,35.630711],\"bearings\":[73,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654648,35.630508],\"bearings\":[73,258],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654541,35.630489],\"bearings\":[78,172,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.654205,35.630405],\"bearings\":[73,254],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.653809,35.630314],\"bearings\":[74,175,248,282,283],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"slight right\"]}]},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":69.206,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.9,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":52.9,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":69.206,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.915,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.3,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.3,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.915,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":10.64,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":10.64,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[16.7,44.8,14.0,44.6,56.5,42.4,87.7,59.4,45.6,30.4,62.1,56.6,19.2,45.6,46.0,54.4,31.9,77.5,78.9,65.8,55.1,55.1,46.0,51.4,46.1,43.0,28.8,28.8,45.5,60.1,77.5,16.7,95.7,37.3,17.6,56.1,49.1,75.2,9.9,31.8,37.3,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[3.006,8.481,2.394,8.914,14.519,10.903,26.296,6.893,6.074,4.049,8.945,12.735,4.609,10.949,6.899,7.534,4.414,9.62,14.204,13.944,10.432,8.618,5.519,6.604,5.928,7.035,9.44,9.431,10.229,12.726,12.135,1.499,24.604,13.421,1.587,2.766,2.422,3.71,0.488,1.567,1.84,2.226,2.715,1.706,3.475,0.292,4.148,0.356,0.909,4.069,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.092,7.668,4.37,6.829,11.745,8.105,8.869,4.419,0.959,0.23,2.046,6.097,0.371,4.311,2.755,3.214,10.342,0.453,0.48,7.403,1.184,0.309,7.212,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.744,6.465,3.37,17.681,2.142,5.572,17.929,11.535,15.172,7.748,8.877,1.205,1.415,11.044,3.527,0.629,0.45,6.6,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6496124,35.6414604;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"277.66507,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"4KM3md69m9eH6pmi-V7O47NDZ2_MEnZJPQvsnE30pXnxPB7F0N5IPQ\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585549485.91849,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":5514.43603515625,"remaining_leg_duration":972.127,"step_index":0,"remaining_step_distance":119.9984130859375,"remaining_step_duration":25.612,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":20},{"type":"updateLocation","location":{"lat":35.641517,"lon":139.6495371,"time":1585549486.635,"speed":7.2613019943237309,"bearing":279.01934814453127,"altitude":75.0999984741211,"accuracyHorizontal":5.554999828338623,"provider":"fused"},"result":true,"event_timestamp":1585549486.635733,"delta_ms":0},{"type":"getStatus","timestamp":1585549488.276,"event_timestamp":1585549486.777257,"result":{"route_state":"tracking","location":{"lat":35.641483306884769,"lon":139.6494140625,"time":1585549488.276,"speed":7.348001003265381,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":5.554999828338623,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5496.29052734375,"remaining_leg_duration":968.127,"step_index":0,"remaining_step_distance":101.85298919677735,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":1.641,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"西方向です その先 左折です","announcement":"西方向です その先 左折です","remaining_step_distance":119.9984130859375,"index":0},"banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":119.9984130859375,"index":0},"key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415263,"lon":139.6494521,"time":1585549487.624,"speed":7.737616062164307,"bearing":279.0191345214844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549487.625073,"delta_ms":0},{"type":"getStatus","timestamp":1585549489.3,"event_timestamp":1585549487.801275,"result":{"route_state":"tracking","location":{"lat":35.64149475097656,"lon":139.64930725097657,"time":1585549489.3,"speed":7.770559310913086,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5486.56201171875,"remaining_leg_duration":966.127,"step_index":0,"remaining_step_distance":92.12410736083985,"remaining_step_duration":20.0,"state_message":"","in_tunnel":false,"predicted":1.676,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64149475097656,"lon":139.64930725097657,"time":1585549489.3,"bearing":279.28167724609377}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415366,"lon":139.6493689,"time":1585549488.626,"speed":7.061996936798096,"bearing":280.9385070800781,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549488.626641,"delta_ms":0},{"type":"getStatus","timestamp":1585549490.317,"event_timestamp":1585549488.818729,"result":{"route_state":"tracking","location":{"lat":35.641510009765628,"lon":139.6492156982422,"time":1585549490.317,"speed":7.403120040893555,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5478.11328125,"remaining_leg_duration":964.127,"step_index":0,"remaining_step_distance":83.675537109375,"remaining_step_duration":18.0,"state_message":"","in_tunnel":false,"predicted":1.691,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.641510009765628,"lon":139.6492156982422,"time":1585549490.317,"bearing":279.28167724609377}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415462,"lon":139.649295,"time":1585549489.642,"speed":6.608631610870361,"bearing":281.96295166015627,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549489.642379,"delta_ms":0},{"type":"getStatus","timestamp":1585549491.338,"event_timestamp":1585549489.838819,"result":{"route_state":"tracking","location":{"lat":35.641517639160159,"lon":139.64915466308595,"time":1585549491.338,"speed":6.882514476776123,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5472.52734375,"remaining_leg_duration":963.127,"step_index":0,"remaining_step_distance":78.08969116210938,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":1.696,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.641517639160159,"lon":139.64915466308595,"time":1585549491.338,"bearing":279.28167724609377}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6415556,"lon":139.649224,"time":1585549490.628,"speed":6.621784687042236,"bearing":284.96484375,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549490.628768,"delta_ms":0},{"type":"getStatus","timestamp":1585549492.355,"event_timestamp":1585549490.85694,"result":{"route_state":"tracking","location":{"lat":35.64152526855469,"lon":139.64910888671876,"time":1585549492.355,"speed":6.6280388832092289,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5468.3017578125,"remaining_leg_duration":962.127,"step_index":0,"remaining_step_distance":73.86408996582031,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":1.727,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64152526855469,"lon":139.64910888671876,"time":1585549492.355,"bearing":279.28167724609377}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415712,"lon":139.6491528,"time":1585549491.63,"speed":6.7076334953308109,"bearing":285.9929504394531,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549491.630351,"delta_ms":0},{"type":"getStatus","timestamp":1585549493.4,"event_timestamp":1585549491.901065,"result":{"route_state":"tracking","location":{"lat":35.641536712646487,"lon":139.6490020751953,"time":1585549493.4,"speed":6.717081546783447,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5458.56201171875,"remaining_leg_duration":960.127,"step_index":0,"remaining_step_distance":64.1242904663086,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":1.77,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"左折です","announcement":"左折です","remaining_step_distance":70.5,"index":1},"key_points":[{"lat":35.641536712646487,"lon":139.6490020751953,"time":1585549493.4,"bearing":279.28167724609377}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6415857,"lon":139.649082,"time":1585549492.623,"speed":7.09580135345459,"bearing":281.0780029296875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549492.62402,"delta_ms":0},{"type":"getStatus","timestamp":1585549494.418,"event_timestamp":1585549492.919535,"result":{"route_state":"tracking","location":{"lat":35.641544342041019,"lon":139.64894104003907,"time":1585549494.418,"speed":6.97893762588501,"bearing":279.28167724609377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5452.9755859375,"remaining_leg_duration":959.127,"step_index":0,"remaining_step_distance":58.5380744934082,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.795,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.641544342041019,"lon":139.64894104003907,"time":1585549494.418,"bearing":279.28167724609377}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6415937,"lon":139.6490089,"time":1585549493.64,"speed":6.684391975402832,"bearing":278.0125427246094,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549493.640493,"delta_ms":0},{"type":"getStatus","timestamp":1585549495.428,"event_timestamp":1585549493.930177,"result":{"route_state":"tracking","location":{"lat":35.64155197143555,"lon":139.64886474609376,"time":1585549495.428,"speed":6.788820743560791,"bearing":278.74432373046877,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5446.021484375,"remaining_leg_duration":957.127,"step_index":0,"remaining_step_distance":51.58375549316406,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.788,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641544342041019,"lon":139.64894104003907,"time":1585549494.418,"bearing":279.28167724609377},{"lat":35.64155197143555,"lon":139.64886474609376,"time":1585549495.428,"bearing":278.74432373046877}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415967,"lon":139.64894,"time":1585549494.622,"speed":6.544050693511963,"bearing":275.0200500488281,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549494.623047,"delta_ms":0},{"type":"getStatus","timestamp":1585549496.441,"event_timestamp":1585549494.94177,"result":{"route_state":"tracking","location":{"lat":35.641563415527347,"lon":139.64878845214845,"time":1585549496.441,"speed":6.541078567504883,"bearing":278.74432373046877,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5439.00927734375,"remaining_leg_duration":956.127,"step_index":0,"remaining_step_distance":44.57175064086914,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":1.819,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641563415527347,"lon":139.64878845214845,"time":1585549496.441,"bearing":278.74432373046877}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641598,"lon":139.6488714,"time":1585549495.623,"speed":6.434229373931885,"bearing":274.0049743652344,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549495.623224,"delta_ms":0},{"type":"getStatus","timestamp":1585549497.451,"event_timestamp":1585549495.953385,"result":{"route_state":"tracking","location":{"lat":35.64156723022461,"lon":139.6487274169922,"time":1585549497.451,"speed":6.377008438110352,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5433.4716796875,"remaining_leg_duration":955.127,"step_index":0,"remaining_step_distance":39.033973693847659,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.828,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641563415527347,"lon":139.64878845214845,"time":1585549496.441,"bearing":278.74432373046877},{"lat":35.64156723022461,"lon":139.6487274169922,"time":1585549497.451,"bearing":277.665283203125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415971,"lon":139.6488037,"time":1585549496.633,"speed":6.314586162567139,"bearing":273.0048522949219,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549496.633517,"delta_ms":0},{"type":"getStatus","timestamp":1585549498.468,"event_timestamp":1585549496.969706,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64866638183595,"time":1585549498.468,"speed":6.252604961395264,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5427.89306640625,"remaining_leg_duration":954.127,"step_index":0,"remaining_step_distance":33.45549392700195,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.835,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64866638183595,"time":1585549498.468,"bearing":277.665283203125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415988,"lon":139.6487391,"time":1585549497.628,"speed":5.906797409057617,"bearing":272.9927062988281,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549497.628834,"delta_ms":0},{"type":"getStatus","timestamp":1585549499.48,"event_timestamp":1585549497.981577,"result":{"route_state":"tracking","location":{"lat":35.64158248901367,"lon":139.6486053466797,"time":1585549499.48,"speed":5.983809471130371,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5422.30908203125,"remaining_leg_duration":952.127,"step_index":0,"remaining_step_distance":27.871383666992189,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.852,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64158248901367,"lon":139.6486053466797,"time":1585549499.48,"bearing":277.665283203125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416034,"lon":139.648678,"time":1585549498.631,"speed":5.698892116546631,"bearing":274.981201171875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549498.63587,"delta_ms":4},{"type":"getStatus","timestamp":1585549500.495,"event_timestamp":1585549498.996124,"result":{"route_state":"tracking","location":{"lat":35.6415901184082,"lon":139.6485595703125,"time":1585549500.495,"speed":5.6475138664245609,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5418.09130859375,"remaining_leg_duration":951.127,"step_index":0,"remaining_step_distance":23.6534423828125,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":1.864,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6415901184082,"lon":139.6485595703125,"time":1585549500.495,"bearing":277.665283203125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416079,"lon":139.6486135,"time":1585549499.636,"speed":6.604483127593994,"bearing":276.02740478515627,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549499.636298,"delta_ms":0},{"type":"getStatus","timestamp":1585549501.514,"event_timestamp":1585549500.016428,"result":{"route_state":"tracking","location":{"lat":35.641597747802737,"lon":139.6484832763672,"time":1585549501.514,"speed":6.200091361999512,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5411.1376953125,"remaining_leg_duration":950.127,"step_index":0,"remaining_step_distance":16.700130462646486,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.878,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641597747802737,"lon":139.6484832763672,"time":1585549501.514,"bearing":277.665283203125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416122,"lon":139.648544,"time":1585549500.635,"speed":5.8111186027526859,"bearing":276.9373779296875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549500.636218,"delta_ms":0},{"type":"getStatus","timestamp":1585549502.53,"event_timestamp":1585549501.032994,"result":{"route_state":"tracking","location":{"lat":35.641605377197269,"lon":139.64842224121095,"time":1585549502.53,"speed":6.040104389190674,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5405.5517578125,"remaining_leg_duration":949.127,"step_index":0,"remaining_step_distance":11.114136695861817,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.895,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641605377197269,"lon":139.64842224121095,"time":1585549502.53,"bearing":277.665283203125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6416227,"lon":139.6484793,"time":1585549501.624,"speed":6.410701274871826,"bearing":280.01263427734377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549501.62463,"delta_ms":0},{"type":"getStatus","timestamp":1585549503.546,"event_timestamp":1585549502.047042,"result":{"route_state":"tracking","location":{"lat":35.64160919189453,"lon":139.6483612060547,"time":1585549503.546,"speed":6.22603702545166,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5400.0234375,"remaining_leg_duration":948.127,"step_index":0,"remaining_step_distance":5.585648536682129,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.922,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64160919189453,"lon":139.6483612060547,"time":1585549503.546,"bearing":277.665283203125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416387,"lon":139.64841,"time":1585549502.624,"speed":6.44884729385376,"bearing":280.9931945800781,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549502.624722,"delta_ms":0},{"type":"getStatus","timestamp":1585549504.559,"event_timestamp":1585549503.060575,"result":{"route_state":"tracking","location":{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549504.559,"speed":6.4343671798706059,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.935,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549504.559,"bearing":277.665283203125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641653,"lon":139.6483423,"time":1585549503.634,"speed":6.286306381225586,"bearing":280.9916076660156,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549503.634919,"delta_ms":0},{"type":"getStatus","timestamp":1585549505.58,"event_timestamp":1585549504.081202,"result":{"route_state":"tracking","location":{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549505.58,"speed":6.278379917144775,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.946,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549504.559,"bearing":277.665283203125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416681,"lon":139.648277,"time":1585549504.646,"speed":6.372654914855957,"bearing":281.0115661621094,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549504.646665,"delta_ms":0},{"type":"getStatus","timestamp":1585549506.592,"event_timestamp":1585549505.093143,"result":{"route_state":"tracking","location":{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549506.592,"speed":6.401884078979492,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.946,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549505.58,"bearing":277.665283203125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641678,"lon":139.6482079,"time":1585549505.617,"speed":6.275672912597656,"bearing":280.00238037109377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549505.617748,"delta_ms":0},{"type":"getStatus","timestamp":1585549507.605,"event_timestamp":1585549506.107897,"result":{"route_state":"tracking","location":{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549507.605,"speed":6.28614616394043,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.988,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549506.592,"bearing":277.665283203125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6416851,"lon":139.6481347,"time":1585549506.631,"speed":6.280635833740234,"bearing":279.0069274902344,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549506.631933,"delta_ms":0},{"type":"getStatus","timestamp":1585549508.632,"event_timestamp":1585549507.134561,"result":{"route_state":"tracking","location":{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549508.632,"speed":6.33356237411499,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.001,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549507.605,"bearing":277.665283203125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6416907,"lon":139.6480669,"time":1585549507.665,"speed":5.77033805847168,"bearing":277.98406982421877,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549507.665212,"delta_ms":0},{"type":"getStatus","timestamp":1585549509.673,"event_timestamp":1585549508.175893,"result":{"route_state":"tracking","location":{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549509.673,"speed":5.906017303466797,"bearing":277.665283203125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.008,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64161682128906,"lon":139.64830017089845,"time":1585549508.632,"bearing":277.665283203125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6416949,"lon":139.648012,"time":1585549508.639,"speed":4.998270511627197,"bearing":275.9941101074219,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549508.640186,"delta_ms":0},{"type":"getStatus","timestamp":1585549510.711,"event_timestamp":1585549509.212573,"result":{"route_state":"tracking","location":{"lat":35.64167404174805,"lon":139.64788818359376,"time":1585549510.711,"speed":5.349202632904053,"bearing":277.7850341796875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416981,"lon":139.6479622,"time":1585549509.625,"speed":4.6290459632873539,"bearing":275.9903564453125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549509.625867,"delta_ms":0},{"type":"getStatus","timestamp":1585549511.726,"event_timestamp":1585549510.226982,"result":{"route_state":"tracking","location":{"lat":35.64167785644531,"lon":139.64784240722657,"time":1585549511.726,"speed":4.827229022979736,"bearing":277.7850341796875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417005,"lon":139.6479168,"time":1585549510.628,"speed":4.229735851287842,"bearing":275.98834228515627,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549510.629036,"delta_ms":0},{"type":"getStatus","timestamp":1585549512.737,"event_timestamp":1585549511.238031,"result":{"route_state":"tracking","location":{"lat":35.64168167114258,"lon":139.6478271484375,"time":1585549512.737,"speed":4.2900614738464359,"bearing":277.7850341796875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417028,"lon":139.6478742,"time":1585549511.63,"speed":4.0785908699035648,"bearing":277.9746398925781,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549511.630809,"delta_ms":0},{"type":"getStatus","timestamp":1585549513.752,"event_timestamp":1585549512.252725,"result":{"route_state":"offRoute","location":{"lat":35.641685485839847,"lon":139.6477813720703,"time":1585549513.752,"speed":4.149265766143799,"bearing":277.7850341796875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5394.4375,"remaining_leg_duration":946.127,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585549512.285035,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417078,"lon":139.6478354,"time":1585549512.65,"speed":4.593007564544678,"bearing":281.9971618652344,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549512.65061,"delta_ms":0},{"type":"getStatus","timestamp":1585549514.792,"event_timestamp":1585549513.293425,"result":{"route_state":"invalid","location":{"lat":35.641693115234378,"lon":139.64772033691407,"time":1585549514.792,"speed":4.280548572540283,"bearing":277.7850341796875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":5271.115,\"duration\":983.549,\"geometry\":\"itk~bAiqljiGoC~g@dD]bp@pGe@`Sd@bQVvCx[vDz[vCf^cQxVgNvSmKdZgNv]eOr~@k`@`g@_TpRoHdZiMvC{A|JqGhW}TlPuE~WoI|TqH~MsFjLoHvSmJfSoJlEyBpCyAnIuEzE{AxHyBzE]fN{Aj`@}@d@yAlAuEdEaS|DeOfOor@~BePjBaQjAmKd@oINsFjAkK`C}TzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":983.549,\"weight_name\":\"routability\",\"legs\":[{\"distance\":5271.115,\"duration\":983.549,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":59.589,\"duration\":10.215,\"geometry\":\"itk~bAiqljiGoC~g@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.647781,35.641685],\"bearing_before\":0.0,\"bearing_after\":278.0,\"instruction\":\"西方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":59.589,\"announcement\":\"西方向です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e西方向です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":59.589,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":10.215,\"intersections\":[{\"location\":[139.647781,35.641685],\"bearings\":[278],\"entry\":[true],\"out\":0}]},{\"distance\":98.0,\"duration\":22.26,\"geometry\":\"yxk~bAihkjiGdD]bp@pG\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.647125,35.641758],\"bearing_before\":278.0,\"bearing_after\":180.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":66.0,\"announcement\":\"右折です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":98.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":66.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":22.26,\"intersections\":[{\"location\":[139.647125,35.641758],\"bearings\":[0,98,180,277],\"entry\":[true,false,true,true],\"in\":1,\"out\":2}]},{\"distance\":62.0,\"duration\":27.316,\"geometry\":\"obj~bAu`kjiGe@`Sd@bQVvC\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.647003,35.640888],\"bearing_before\":191.0,\"bearing_after\":274.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":34.0,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":62.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":27.316,\"intersections\":[{\"location\":[139.647003,35.640888],\"bearings\":[11,96,274],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646683,35.640907],\"bearings\":[6,94,265],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.646393,35.640888],\"bearings\":[7,85,260],\"entry\":[true,false,true],\"in\":1,\"out\":2}]},{\"distance\":1177.0,\"duration\":359.54,\"geometry\":\"waj~bAwuijiGx[vDz[vCf^cQxVgNvSmKdZgNv]eOr~@k`@`g@_TpRoHdZiMvC{A|JqGhW}TlPuE~WoI|TqH~MsFjLoHvSmJfSoJlEyBpCyAnIuEzE{AxHyBzE]fN{Aj`@}@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.646317,35.640877],\"bearing_before\":260.0,\"bearing_after\":189.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":1157.0,\"announcement\":\"1 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e1 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":229.2,\"announcement\":\"200 メートル先、東電世田谷前を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、東電世田谷前を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":49.1,\"announcement\":\"東電世田谷前を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e東電世田谷前を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":1177.0,\"primary\":{\"text\":\"東電世田谷前\",\"components\":[{\"text\":\"東電世田谷前\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":359.54,\"intersections\":[{\"location\":[139.646317,35.640877],\"bearings\":[80,189,267],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.646225,35.640415],\"bearings\":[9,188,273],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.646149,35.639954],\"bearings\":[8,90,155,277],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.646439,35.639454],\"bearings\":[92,153,275,335],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.646683,35.639072],\"bearings\":[154,273,333],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.646881,35.638741],\"bearings\":[70,155,258,334],\"entry\":[true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.647125,35.638306],\"bearings\":[63,157,335],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.647385,35.637814],\"bearings\":[73,157,260,337],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.647919,35.636795],\"bearings\":[89,157,276,337],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.648254,35.636154],\"bearings\":[84,158,262,287,337],\"entry\":[true,true,true,false,false],\"in\":4,\"out\":1},{\"location\":[139.648407,35.635841],\"bearings\":[157,246,338],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.648819,35.635139],\"bearings\":[144,269,329],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.64917,35.63475],\"bearings\":[68,161,267,324,344],\"entry\":[true,true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.649445,35.634071],\"bearings\":[84,161,270,341],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.649597,35.63372],\"bearings\":[86,158,341],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.649719,35.63348],\"bearings\":[150,269,338],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.649872,35.633266],\"bearings\":[157,237,330],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.650238,35.63261],\"bearings\":[76,154,337],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.650299,35.632507],\"bearings\":[153,269,334],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.650345,35.632435],\"bearings\":[35,153,333],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.650452,35.632267],\"bearings\":[70,161,333],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.650558,35.632],\"bearings\":[70,172,341],\"entry\":[true,true,false],\"in\":2,\"out\":1}]},{\"distance\":268.0,\"duration\":72.665,\"geometry\":\"m_w}bAsdrjiGd@yAlAuEdEaS|DeOfOor@~BePjBaQjAmKd@oINsFjAkK\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.65065,35.631111],\"bearing_before\":176.0,\"bearing_after\":117.0,\"instruction\":\"東電世田谷前を左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":248.0,\"announcement\":\"200 メートル先、新町一丁目を右戻る方向です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、新町一丁目を右戻る方向です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":55.3,\"announcement\":\"新町一丁目を右戻る方向です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e新町一丁目を右戻る方向です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":268.0,\"primary\":{\"text\":\"新町一丁目\",\"components\":[{\"text\":\"新町一丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"sharp right\"}},{\"distanceAlongGeometry\":55.3,\"primary\":{\"text\":\"新町一丁目\",\"components\":[{\"text\":\"新町一丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"sharp right\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"slight left\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"slight left\",\"sharp right\"],\"active\":true}]}}],\"driving_side\":\"left\",\"weight\":72.665,\"intersections\":[{\"location\":[139.65065,35.631111],\"bearings\":[117,175,301,356],\"entry\":[true,false,true,false],\"in\":3,\"out\":0},{\"location\":[139.650696,35.631092],\"bearings\":[114,297],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.650803,35.631054],\"bearings\":[111,180,294],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.651123,35.630955],\"bearings\":[114,182,291],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.651382,35.630859],\"bearings\":[11,111,180,294],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.652206,35.6306],\"bearings\":[106,177,291,355],\"entry\":[true,true,false,false],\"in\":2,\"out\":0},{\"location\":[139.652771,35.630482],\"bearings\":[103,283,355],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.652969,35.630444],\"bearings\":[6,98,283],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.653137,35.630424],\"bearings\":[94,158,278],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.653259,35.630417],\"bearings\":[103,274],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":3132.0,\"duration\":351.505,\"geometry\":\"squ}bAatwjiG`C}TzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.653458,35.630379],\"bearing_before\":103.0,\"bearing_after\":248.0,\"instruction\":\"新町一丁目を右戻る方向です\",\"type\":\"turn\",\"modifier\":\"sharp right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3112.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":623.7,\"announcement\":\"600 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e600 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":133.7,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3132.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":133.7,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":351.505,\"intersections\":[{\"location\":[139.653458,35.630379],\"bearings\":[75,103,104,246,283,355],\"entry\":[true,true,true,false,false,true],\"in\":4,\"out\":1,\"lanes\":[{\"valid\":false,\"indications\":[\"slight left\"]},{\"valid\":true,\"indications\":[\"slight left\",\"sharp right\"]}]},{\"location\":[139.653809,35.630314],\"bearings\":[75,175,248,282,283],\"entry\":[false,true,true,true,false],\"in\":4,\"out\":2},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":69.206,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.9,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":52.9,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":69.206,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.435,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.7,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.7,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.435,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.624,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.624,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[59.9,9.4,88.4,29.1,26.3,7.0,52.0,51.8,61.5,47.9,41.1,53.2,59.6,123.2,77.5,37.5,52.7,9.4,24.6,53.7,32.5,47.1,41.4,28.9,27.5,40.5,39.7,12.7,9.1,21.0,13.0,18.3,12.4,27.5,59.5,4.7,10.6,31.0,25.8,79.9,25.9,26.9,18.4,15.3,11.1,18.4,32.6,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[11.35,1.133,10.603,8.049,6.766,2.105,15.614,31.107,13.024,8.616,8.215,11.268,19.504,34.13,23.261,14.983,12.637,2.268,5.904,24.168,5.566,8.075,5.737,4.008,3.807,5.606,5.499,2.182,0.816,3.606,2.462,3.461,4.056,8.997,19.478,0.419,0.95,4.467,3.709,11.513,4.235,4.401,1.66,4.6,2.099,1.66,2.931,2.226,2.715,1.706,3.475,0.292,4.148,0.356,0.909,4.069,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.092,7.668,4.37,7.049,12.214,8.105,8.869,4.419,0.959,0.23,2.046,6.097,0.371,4.311,2.755,3.214,10.342,0.453,0.48,7.403,1.184,0.309,7.212,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.744,6.465,3.37,17.681,2.142,5.572,17.929,11.535,15.172,7.748,8.877,1.205,1.415,11.044,3.527,0.629,0.45,6.6,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6477814,35.6416855;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"277.785034,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"ltPRNdK-aRjIwSv4jdivGJK8lSuKU6nebRH-9EPupwBjvTv6IR8SVQ\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585549513.474186,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":5268.18701171875,"remaining_leg_duration":983.549,"step_index":0,"remaining_step_distance":59.90390396118164,"remaining_step_duration":10.215,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":13},{"type":"updateLocation","location":{"lat":35.6417178,"lon":139.6477831,"time":1585549513.623,"speed":4.655721664428711,"bearing":281.0232849121094,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549513.623538,"delta_ms":0},{"type":"getStatus","timestamp":1585549515.807,"event_timestamp":1585549514.308464,"result":{"route_state":"tracking","location":{"lat":35.64169692993164,"lon":139.6476593017578,"time":1585549515.807,"speed":4.505135536193848,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5257.07080078125,"remaining_leg_duration":981.549,"step_index":0,"remaining_step_distance":48.78764724731445,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":2.184,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"西方向です その先 左折です","announcement":"西方向です その先 左折です","remaining_step_distance":59.5890007019043,"index":0},"banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":59.5890007019043,"index":0,"sub":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]}},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417267,"lon":139.647715,"time":1585549514.658,"speed":6.101985931396484,"bearing":279.07989501953127,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549514.658243,"delta_ms":0},{"type":"getStatus","timestamp":1585549516.836,"event_timestamp":1585549515.337546,"result":{"route_state":"tracking","location":{"lat":35.64170837402344,"lon":139.64756774902345,"time":1585549516.836,"speed":5.540998458862305,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5248.69384765625,"remaining_leg_duration":980.549,"step_index":0,"remaining_step_distance":40.41079330444336,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.178,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64170837402344,"lon":139.64756774902345,"time":1585549516.836,"bearing":277.7408142089844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417395,"lon":139.6476339,"time":1585549515.64,"speed":6.8155364990234379,"bearing":281.02099609375,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549515.640842,"delta_ms":0},{"type":"getStatus","timestamp":1585549517.858,"event_timestamp":1585549516.359153,"result":{"route_state":"tracking","location":{"lat":35.641719818115237,"lon":139.6474609375,"time":1585549517.858,"speed":6.55361795425415,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5238.947265625,"remaining_leg_duration":978.549,"step_index":0,"remaining_step_distance":30.664316177368165,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.218,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.641719818115237,"lon":139.6474609375,"time":1585549517.858,"bearing":277.7408142089844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417539,"lon":139.6475486,"time":1585549516.626,"speed":7.303408622741699,"bearing":282.00634765625,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549516.626207,"delta_ms":0},{"type":"getStatus","timestamp":1585549518.874,"event_timestamp":1585549517.375433,"result":{"route_state":"tracking","location":{"lat":35.641727447509769,"lon":139.64739990234376,"time":1585549518.874,"speed":7.172858715057373,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5233.36181640625,"remaining_leg_duration":977.549,"step_index":0,"remaining_step_distance":25.078826904296876,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.248,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.641727447509769,"lon":139.64739990234376,"time":1585549518.874,"bearing":277.7408142089844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.641768,"lon":139.64746,"time":1585549517.628,"speed":7.9008941650390629,"bearing":279.0603942871094,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549517.628554,"delta_ms":0},{"type":"getStatus","timestamp":1585549519.885,"event_timestamp":1585549518.385895,"result":{"route_state":"tracking","location":{"lat":35.64173889160156,"lon":139.6472930908203,"time":1585549519.885,"speed":7.84587287902832,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5223.615234375,"remaining_leg_duration":975.549,"step_index":0,"remaining_step_distance":15.33224868774414,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.257,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64173889160156,"lon":139.6472930908203,"time":1585549519.885,"bearing":277.7408142089844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417742,"lon":139.6473735,"time":1585549518.625,"speed":6.60507869720459,"bearing":275.0020751953125,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549518.626067,"delta_ms":0},{"type":"getStatus","timestamp":1585549520.897,"event_timestamp":1585549519.398949,"result":{"route_state":"tracking","location":{"lat":35.64175033569336,"lon":139.64720153808595,"time":1585549520.897,"speed":7.283657550811768,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5215.236328125,"remaining_leg_duration":974.549,"step_index":0,"remaining_step_distance":6.953487396240234,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":2.272,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175033569336,"lon":139.64720153808595,"time":1585549520.897,"bearing":277.7408142089844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6417773,"lon":139.647299,"time":1585549519.621,"speed":7.051295280456543,"bearing":274.0229797363281,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549519.62172,"delta_ms":0},{"type":"getStatus","timestamp":1585549521.909,"event_timestamp":1585549520.410576,"result":{"route_state":"tracking","location":{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549521.909,"speed":7.239500522613525,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.288,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549521.909,"bearing":277.7408142089844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417818,"lon":139.6472283,"time":1585549520.626,"speed":5.979847431182861,"bearing":273.9656982421875,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549520.627031,"delta_ms":0},{"type":"getStatus","timestamp":1585549522.927,"event_timestamp":1585549521.428127,"result":{"route_state":"tracking","location":{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549522.927,"speed":6.341098308563232,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.301,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549521.909,"bearing":277.7408142089844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417884,"lon":139.6471673,"time":1585549521.635,"speed":5.521928787231445,"bearing":273.98626708984377,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549521.635972,"delta_ms":0},{"type":"getStatus","timestamp":1585549523.95,"event_timestamp":1585549522.451032,"result":{"route_state":"tracking","location":{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549523.95,"speed":5.655881881713867,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.315,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549522.927,"bearing":277.7408142089844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641795,"lon":139.6471102,"time":1585549522.644,"speed":5.129891872406006,"bearing":274.9767150878906,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549522.644312,"delta_ms":0},{"type":"getStatus","timestamp":1585549524.963,"event_timestamp":1585549523.465333,"result":{"route_state":"tracking","location":{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549524.963,"speed":5.33367395401001,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.319,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549523.95,"bearing":277.7408142089844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6418014,"lon":139.6470513,"time":1585549523.651,"speed":5.781647682189941,"bearing":274.0225524902344,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549523.651687,"delta_ms":0},{"type":"getStatus","timestamp":1585549525.986,"event_timestamp":1585549524.489774,"result":{"route_state":"tracking","location":{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549525.986,"speed":5.615927219390869,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.335,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549524.963,"bearing":277.7408142089844}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.641807,"lon":139.646986,"time":1585549524.651,"speed":5.924459934234619,"bearing":274.9968566894531,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549524.651317,"delta_ms":0},{"type":"getStatus","timestamp":1585549527.02,"event_timestamp":1585549525.521846,"result":{"route_state":"tracking","location":{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549527.02,"speed":5.793561935424805,"bearing":277.7408142089844,"altitude":75.0999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.369,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64175796508789,"lon":139.64712524414063,"time":1585549525.986,"bearing":277.7408142089844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6418128,"lon":139.6469188,"time":1585549525.633,"speed":6.244929790496826,"bearing":275.0099792480469,"altitude":79.505615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549525.634066,"delta_ms":0},{"type":"getStatus","timestamp":1585549528.047,"event_timestamp":1585549526.551192,"result":{"route_state":"tracking","location":{"lat":35.64180374145508,"lon":139.64674377441407,"time":1585549528.047,"speed":6.171952247619629,"bearing":278.44708251953127,"altitude":79.505615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6418196,"lon":139.6468527,"time":1585549526.635,"speed":5.7701873779296879,"bearing":275.97515869140627,"altitude":81.01068115234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549526.635485,"delta_ms":0},{"type":"getStatus","timestamp":1585549529.083,"event_timestamp":1585549527.584162,"result":{"route_state":"tracking","location":{"lat":35.64181137084961,"lon":139.6466827392578,"time":1585549529.083,"speed":5.880921363830566,"bearing":278.44708251953127,"altitude":81.01068115234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6418258,"lon":139.6467945,"time":1585549527.627,"speed":5.338265895843506,"bearing":277.9626159667969,"altitude":80.79132080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549527.627469,"delta_ms":0},{"type":"getStatus","timestamp":1585549530.098,"event_timestamp":1585549528.602796,"result":{"route_state":"tracking","location":{"lat":35.64181900024414,"lon":139.64663696289063,"time":1585549530.098,"speed":5.539666652679443,"bearing":281.5896911621094,"altitude":80.79132080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6418347,"lon":139.6467395,"time":1585549528.638,"speed":5.167617321014404,"bearing":279.973388671875,"altitude":80.4151611328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549528.638988,"delta_ms":0},{"type":"getStatus","timestamp":1585549531.12,"event_timestamp":1585549529.621597,"result":{"route_state":"offRoute","location":{"lat":35.64182662963867,"lon":139.64659118652345,"time":1585549531.12,"speed":5.191261291503906,"bearing":281.5896911621094,"altitude":80.4151611328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5208.283203125,"remaining_leg_duration":973.549,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585549529.648547,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6418466,"lon":139.6466827,"time":1585549529.667,"speed":5.287600517272949,"bearing":283.9715576171875,"altitude":80.43743896484375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549529.667463,"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4793.071,\"duration\":942.386,\"geometry\":\"c}k~bA}fjjiG]vD_@nH{@`SaCdd@e@lJbQ|i@hBnHpMhb@dZlhAtOsGnXqGhH{AzcAwWp\\\\oIj[oIju@aRld@iMjPuE~c@kKzZqHp\\\\mJvb@kLz[mIpQuEf^mJvNwDtOuDfSuF~XmITfNxWxBdZxB`l@z@~H?nN^zK\\\\bG?fSz@hB{@xC}@fIuDzEyB|EwDlEhMvNfc@LtDNfObG~Sp\\\\cRzPkKhGwCfTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":942.386,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4793.071,\"duration\":942.386,\"summary\":\"都道427号線, 国道246号線\",\"steps\":[{\"distance\":122.545,\"duration\":35.955,\"geometry\":\"c}k~bA}fjjiG]vD_@nH{@`SaCdd@e@lJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.646591,35.641827],\"bearing_before\":0.0,\"bearing_after\":282.0,\"instruction\":\"西方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":122.545,\"announcement\":\"西方向です その先 斜め左方向です。その先、都道3号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e西方向です その先 斜め左方向です。その先、都道3号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.1,\"announcement\":\"斜め左方向です。その先、都道3号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e斜め左方向です。その先、都道3号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":122.545,\"primary\":{\"text\":\"都道3号線\",\"components\":[{\"text\":\"都道3号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"slight left\"}}],\"driving_side\":\"left\",\"weight\":35.955,\"intersections\":[{\"location\":[139.646591,35.641827],\"bearings\":[282],\"entry\":[true],\"out\":0},{\"location\":[139.6465,35.641842],\"bearings\":[11,102,277],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.646347,35.641857],\"bearings\":[97,191,277],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.646027,35.641888],\"bearings\":[97,191,278],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645432,35.641953],\"bearings\":[98,190,277],\"entry\":[false,true,true],\"in\":0,\"out\":2}]},{\"distance\":259.0,\"duration\":57.332,\"geometry\":\"efl~bA_sgjiGbQ|i@hBnHpMhb@dZlhA\",\"name\":\"都道3号線\",\"ref\":\"都道3号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.645248,35.641972],\"bearing_before\":277.0,\"bearing_after\":243.0,\"instruction\":\"斜め左方向です。その先、都道3号線です\",\"type\":\"turn\",\"modifier\":\"slight left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":239.0,\"announcement\":\"200 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":67.8,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":259.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":57.332,\"intersections\":[{\"location\":[139.645248,35.641972],\"bearings\":[63,97,243,283],\"entry\":[true,false,true,true],\"in\":1,\"out\":2},{\"location\":[139.644562,35.641682],\"bearings\":[63,125,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.644409,35.641628],\"bearings\":[67,243,344],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.643845,35.641396],\"bearings\":[63,166,246,311],\"entry\":[false,true,true,true],\"in\":0,\"out\":2}]},{\"distance\":1071.0,\"duration\":263.897,\"geometry\":\"_gj~bAyqbjiGtOsGnXqGhH{AzcAwWp\\\\oIj[oIju@aRld@iMjPuE~c@kKzZqHp\\\\mJvb@kLz[mIpQuEf^mJvNwDtOuDfSuF~XmI\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.64267,35.640961],\"bearing_before\":246.0,\"bearing_after\":157.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":1051.0,\"announcement\":\"1 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e1 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":284.1,\"announcement\":\"300 メートル先、新町二丁目を右方向です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、新町二丁目を右方向です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":60.9,\"announcement\":\"新町二丁目を右方向です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e新町二丁目を右方向です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":1071.0,\"primary\":{\"text\":\"新町二丁目\",\"components\":[{\"text\":\"新町二丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":60.9,\"primary\":{\"text\":\"新町二丁目\",\"components\":[{\"text\":\"新町二丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":263.897,\"intersections\":[{\"location\":[139.64267,35.640961],\"bearings\":[66,157,244,349],\"entry\":[false,true,true,true],\"in\":0,\"out\":1},{\"location\":[139.642807,35.640694],\"bearings\":[101,165,275,337],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.642944,35.640285],\"bearings\":[93,165,213,345],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.643387,35.639034],\"bearings\":[90,164,279,345],\"entry\":[true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.643555,35.638561],\"bearings\":[163,266,344],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.643723,35.638107],\"bearings\":[83,164,343],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.644028,35.637238],\"bearings\":[73,163,252,344],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.644257,35.636639],\"bearings\":[73,163,343],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.644363,35.63636],\"bearings\":[68,165,258,343],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.644562,35.635769],\"bearings\":[83,164,263,345],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.644714,35.635323],\"bearings\":[83,163,256,344],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.644897,35.63485],\"bearings\":[163,255,343],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.645111,35.634277],\"bearings\":[77,164,258,343],\"entry\":[false,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.645279,35.633816],\"bearings\":[96,164,344],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.645386,35.633518],\"bearings\":[96,163,267,344],\"entry\":[true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.645569,35.633018],\"bearings\":[89,164,256,343],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.64566,35.632767],\"bearings\":[164,255,344],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.645752,35.6325],\"bearings\":[90,163,256,344],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.645874,35.632175],\"bearings\":[162,255,343],\"entry\":[true,true,false],\"in\":2,\"out\":0}]},{\"distance\":22.0,\"duration\":14.9,\"geometry\":\"}gx}bAqdijiGTfN\",\"name\":\"都道427号線\",\"ref\":\"都道427号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.646042,35.63176],\"bearing_before\":162.0,\"bearing_after\":267.0,\"instruction\":\"新町二丁目を右方向です\",\"type\":\"end of road\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.0,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":14.9,\"intersections\":[{\"location\":[139.646042,35.63176],\"bearings\":[89,267,342],\"entry\":[true,true,false],\"in\":2,\"out\":1}]},{\"distance\":357.0,\"duration\":87.726,\"geometry\":\"ggx}bAiuhjiGxWxBdZxB`l@z@~H?nN^zK\\\\bG?fSz@hB{@xC}@fIuDzEyB|EwD\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.645798,35.631748],\"bearing_before\":267.0,\"bearing_after\":185.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":337.0,\"announcement\":\"300 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":61.0,\"announcement\":\"右折です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":357.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":61.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":87.726,\"intersections\":[{\"location\":[139.645798,35.631748],\"bearings\":[87,185,267],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.645645,35.630196],\"bearings\":[0,180,275],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.645645,35.630035],\"bearings\":[0,73,183],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64563,35.629787],\"bearings\":[3,183,272],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.645615,35.629581],\"bearings\":[3,97,180],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645615,35.629452],\"bearings\":[0,185,260],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":148.0,\"duration\":43.515,\"geometry\":\"gcr}bAa{hjiGlEhMvNfc@LtDNfObG~S\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.645889,35.628613],\"bearing_before\":146.0,\"bearing_after\":241.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":51.0,\"announcement\":\"左折です その先 右折です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 右折です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":148.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":51.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"国道246号線\",\"components\":[{\"text\":\"国道246号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":43.515,\"intersections\":[{\"location\":[139.645889,35.628613],\"bearings\":[144,241,326],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.64566,35.62851],\"bearings\":[61,145,242,324],\"entry\":[false,false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645081,35.628258],\"bearings\":[62,153,264],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.644989,35.62825],\"bearings\":[84,268,338],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":96.0,\"duration\":38.809,\"geometry\":\"_dq}bAq}ejiGp\\\\cRzPkK\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.644394,35.628113],\"bearing_before\":245.0,\"bearing_after\":152.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":37.1,\"announcement\":\"右折です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":96.0,\"primary\":{\"text\":\"国道246号線\",\"components\":[{\"text\":\"国道246号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":38.809,\"intersections\":[{\"location\":[139.644394,35.628113],\"bearings\":[65,152,244,334],\"entry\":[false,true,true,false],\"in\":0,\"out\":1},{\"location\":[139.644699,35.62764],\"bearings\":[62,151,244,332],\"entry\":[false,true,true,false],\"in\":3,\"out\":1}]},{\"distance\":2243.0,\"duration\":260.205,\"geometry\":\"qto}bAa}fjiGhGwCfTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.644897,35.627354],\"bearing_before\":151.0,\"bearing_after\":244.0,\"instruction\":\"右折です。その先、国道246号線です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":2223.0,\"announcement\":\"国道246号線を2 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を2 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":603.4,\"announcement\":\"600 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e600 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":129.3,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":2243.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":129.3,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":260.205,\"intersections\":[{\"location\":[139.644897,35.627354],\"bearings\":[62,155,159,244,331],\"entry\":[true,true,true,false,false],\"in\":4,\"out\":1},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":4,\"out\":2},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":69.206,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.9,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":52.9,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":69.206,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.435,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.7,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.7,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.435,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.624,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.624,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[8.5,13.9,29.2,54.3,16.7,70.0,15.0,57.3,116.8,32.2,47.1,17.1,127.9,54.8,52.8,100.7,69.8,32.5,68.2,51.6,55.2,66.6,53.6,34.5,58.0,29.2,30.9,37.7,48.7,22.1,44.5,48.7,80.3,17.8,27.6,23.0,14.4,36.2,6.6,8.9,20.1,13.5,14.8,23.7,59.5,8.3,23.5,33.6,59.5,36.6,16.4,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[1.602,3.129,6.567,16.295,4.295,13.264,1.353,10.851,22.13,9.665,15.416,2.793,20.923,12.331,9.998,19.076,12.566,5.845,20.467,9.282,8.64,11.411,10.716,5.646,12.292,5.01,6.943,9.059,17.537,9.957,11.445,12.529,20.65,3.057,4.146,3.446,2.888,6.859,1.242,1.692,3.799,2.557,2.812,6.555,11.27,1.665,2.818,4.036,17.837,11.965,3.278,11.745,8.105,8.869,4.419,0.959,0.23,2.046,6.097,0.371,4.311,2.755,3.214,10.342,0.453,0.48,7.403,1.184,0.309,7.212,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.744,6.465,3.37,17.681,2.142,5.572,17.929,11.535,15.172,7.748,8.877,1.205,1.415,11.044,3.527,0.629,0.45,6.6,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6465912,35.6418266;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"281.589691,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"l_L-cJd2EiYU3lVZ9raTscw4zYpGhrtv8xfO1GqtgL8yUMnS7Vg7mg\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585549530.56273,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4789.904296875,"remaining_leg_duration":942.387,"step_index":0,"remaining_step_distance":122.568359375,"remaining_step_duration":35.955,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":26},{"type":"updateLocation","location":{"lat":35.6418622,"lon":139.6466335,"time":1585549530.643,"speed":4.042961597442627,"bearing":276.92462158203127,"altitude":80.89239501953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549530.643861,"delta_ms":0},{"type":"getStatus","timestamp":1585549532.158,"event_timestamp":1585549530.659354,"result":{"route_state":"tracking","location":{"lat":35.6418342590332,"lon":139.64654541015626,"time":1585549532.158,"speed":4.452883720397949,"bearing":281.5897521972656,"altitude":80.89239501953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4785.67626953125,"remaining_leg_duration":941.387,"step_index":0,"remaining_step_distance":118.34032440185547,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.515,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"西方向です その先 斜め左方向です。その先、都道3号線です","announcement":"西方向です その先 斜め左方向です。その先、都道3号線です","remaining_step_distance":122.54499816894531,"index":0},"banner_instruction":{"primary":{"text":"都道3号線","type":"turn","modifier":"slight left","components":[{"type":"text","text":"都道3号線"}]},"remaining_step_distance":122.54499816894531,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6418643,"lon":139.6465895,"time":1585549531.63,"speed":5.4126482009887699,"bearing":267.0914306640625,"altitude":81.85284423828125,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"result":true,"event_timestamp":1585549531.630528,"delta_ms":0},{"type":"getStatus","timestamp":1585549533.188,"event_timestamp":1585549531.68899,"result":{"route_state":"tracking","location":{"lat":35.641841888427737,"lon":139.64649963378907,"time":1585549533.188,"speed":4.996981143951416,"bearing":277.0150451660156,"altitude":81.85284423828125,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4781.4501953125,"remaining_leg_duration":940.387,"step_index":0,"remaining_step_distance":114.1138916015625,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":1.558,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.641841888427737,"lon":139.64649963378907,"time":1585549533.188,"bearing":281.5897521972656},{"lat":35.641841888427737,"lon":139.64649963378907,"time":1585549533.188,"bearing":277.0150451660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6418601,"lon":139.6465129,"time":1585549532.651,"speed":5.7660064697265629,"bearing":269.9797058105469,"altitude":83.2474365234375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585549532.651521,"delta_ms":0},{"type":"getStatus","timestamp":1585549534.202,"event_timestamp":1585549532.702535,"result":{"route_state":"tracking","location":{"lat":35.641849517822269,"lon":139.6464080810547,"time":1585549534.202,"speed":5.61954402923584,"bearing":277.0150451660156,"altitude":83.2474365234375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4773.1240234375,"remaining_leg_duration":937.387,"step_index":0,"remaining_step_distance":105.7880859375,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":1.551,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.641849517822269,"lon":139.6464080810547,"time":1585549534.202,"bearing":277.0150451660156}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6418624,"lon":139.6464373,"time":1585549533.634,"speed":6.19578218460083,"bearing":277.9442443847656,"altitude":82.9361572265625,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"result":true,"event_timestamp":1585549533.634842,"delta_ms":0},{"type":"getStatus","timestamp":1585549535.216,"event_timestamp":1585549533.718005,"result":{"route_state":"tracking","location":{"lat":35.6418571472168,"lon":139.64634704589845,"time":1585549535.216,"speed":6.08936882019043,"bearing":276.68414306640627,"altitude":82.9361572265625,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4767.5419921875,"remaining_leg_duration":935.387,"step_index":0,"remaining_step_distance":100.20590209960938,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":1.582,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6418571472168,"lon":139.64634704589845,"time":1585549535.216,"bearing":277.0150451660156},{"lat":35.6418571472168,"lon":139.64634704589845,"time":1585549535.216,"bearing":276.68414306640627}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6418748,"lon":139.64636,"time":1585549534.621,"speed":6.606725692749023,"bearing":281.974609375,"altitude":82.60009765625,"accuracyHorizontal":3.802000045776367,"provider":"fused"},"result":true,"event_timestamp":1585549534.621566,"delta_ms":0},{"type":"getStatus","timestamp":1585549536.238,"event_timestamp":1585549534.739457,"result":{"route_state":"tracking","location":{"lat":35.641868591308597,"lon":139.64625549316407,"time":1585549536.238,"speed":6.6121602058410648,"bearing":276.68414306640627,"altitude":82.60009765625,"accuracyHorizontal":3.802000045776367,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4759.1630859375,"remaining_leg_duration":933.387,"step_index":0,"remaining_step_distance":91.82710266113281,"remaining_step_duration":27.0,"state_message":"","in_tunnel":false,"predicted":1.617,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641868591308597,"lon":139.64625549316407,"time":1585549536.238,"bearing":276.68414306640627}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6418885,"lon":139.6462824,"time":1585549535.64,"speed":7.1163201332092289,"bearing":278.0609436035156,"altitude":82.54083251953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549535.641093,"delta_ms":0},{"type":"getStatus","timestamp":1585549537.267,"event_timestamp":1585549535.76816,"result":{"route_state":"tracking","location":{"lat":35.641876220703128,"lon":139.6461639404297,"time":1585549537.267,"speed":6.941155433654785,"bearing":276.68414306640627,"altitude":82.54083251953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4750.841796875,"remaining_leg_duration":931.387,"step_index":0,"remaining_step_distance":83.50553894042969,"remaining_step_duration":24.0,"state_message":"","in_tunnel":false,"predicted":1.627,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641876220703128,"lon":139.6461639404297,"time":1585549537.267,"bearing":276.68414306640627}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6418975,"lon":139.646201,"time":1585549536.642,"speed":7.262577533721924,"bearing":277.0171813964844,"altitude":82.1844482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549536.643125,"delta_ms":0},{"type":"getStatus","timestamp":1585549538.279,"event_timestamp":1585549536.780366,"result":{"route_state":"tracking","location":{"lat":35.64188003540039,"lon":139.64608764648438,"time":1585549538.279,"speed":7.266446113586426,"bearing":276.68414306640627,"altitude":82.1844482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4743.93701171875,"remaining_leg_duration":929.387,"step_index":0,"remaining_step_distance":76.60102081298828,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":1.637,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64188003540039,"lon":139.64608764648438,"time":1585549538.279,"bearing":276.68414306640627}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419084,"lon":139.6461184,"time":1585549537.629,"speed":7.194322109222412,"bearing":276.9971008300781,"altitude":82.0845947265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549537.630054,"delta_ms":0},{"type":"getStatus","timestamp":1585549539.298,"event_timestamp":1585549537.799013,"result":{"route_state":"tracking","location":{"lat":35.64189147949219,"lon":139.64598083496095,"time":1585549539.298,"speed":7.328300476074219,"bearing":277.6376037597656,"altitude":82.0845947265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4734.19140625,"remaining_leg_duration":926.387,"step_index":0,"remaining_step_distance":66.85543060302735,"remaining_step_duration":20.0,"state_message":"","in_tunnel":false,"predicted":1.669,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64188766479492,"lon":139.64602661132813,"time":1585549538.862,"bearing":276.68414306640627},{"lat":35.64189147949219,"lon":139.64598083496095,"time":1585549539.298,"bearing":277.6376037597656}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641919,"lon":139.6460358,"time":1585549538.63,"speed":7.239398956298828,"bearing":277.9898986816406,"altitude":81.6851806640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549538.631053,"delta_ms":0},{"type":"getStatus","timestamp":1585549540.315,"event_timestamp":1585549538.817181,"result":{"route_state":"tracking","location":{"lat":35.641902923583987,"lon":139.64588928222657,"time":1585549540.315,"speed":7.246482849121094,"bearing":277.6376037597656,"altitude":81.6851806640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4725.81494140625,"remaining_leg_duration":923.387,"step_index":0,"remaining_step_distance":58.47909927368164,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":1.685,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641902923583987,"lon":139.64588928222657,"time":1585549540.315,"bearing":277.6376037597656}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6419302,"lon":139.6459557,"time":1585549539.636,"speed":6.812496185302734,"bearing":279.95220947265627,"altitude":81.9215087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549539.637017,"delta_ms":0},{"type":"getStatus","timestamp":1585549541.336,"event_timestamp":1585549539.837414,"result":{"route_state":"tracking","location":{"lat":35.641910552978519,"lon":139.6458282470703,"time":1585549541.336,"speed":7.089964866638184,"bearing":277.6376037597656,"altitude":81.9215087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4720.2294921875,"remaining_leg_duration":922.387,"step_index":0,"remaining_step_distance":52.893497467041019,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":1.7,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641910552978519,"lon":139.6458282470703,"time":1585549541.336,"bearing":277.6376037597656}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419414,"lon":139.6458836,"time":1585549540.636,"speed":6.311923027038574,"bearing":280.95953369140627,"altitude":81.62774658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549540.637132,"delta_ms":0},{"type":"getStatus","timestamp":1585549542.355,"event_timestamp":1585549540.855902,"result":{"route_state":"tracking","location":{"lat":35.64191818237305,"lon":139.645751953125,"time":1585549542.355,"speed":6.632081031799316,"bearing":277.6376037597656,"altitude":81.62774658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4713.2763671875,"remaining_leg_duration":920.387,"step_index":0,"remaining_step_distance":45.940399169921878,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":1.719,"shape_index":3,"intersection_index":3,"road_name":"","voice_instruction":{"ssml_announcement":"斜め左方向です。その先、都道3号線です","announcement":"斜め左方向です。その先、都道3号線です","remaining_step_distance":51.099998474121097,"index":1},"key_points":[{"lat":35.64191818237305,"lon":139.645751953125,"time":1585549542.355,"bearing":277.6376037597656}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419526,"lon":139.6458172,"time":1585549541.639,"speed":5.934449672698975,"bearing":278.99798583984377,"altitude":81.37908935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549541.640175,"delta_ms":0},{"type":"getStatus","timestamp":1585549543.374,"event_timestamp":1585549541.875942,"result":{"route_state":"tracking","location":{"lat":35.64192581176758,"lon":139.64569091796876,"time":1585549543.374,"speed":6.255136966705322,"bearing":277.6376037597656,"altitude":81.37908935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4707.6904296875,"remaining_leg_duration":918.387,"step_index":0,"remaining_step_distance":40.35432052612305,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.735,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64192581176758,"lon":139.64569091796876,"time":1585549543.374,"bearing":277.6376037597656}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6419579,"lon":139.6457487,"time":1585549542.629,"speed":6.062376499176025,"bearing":273.0439758300781,"altitude":81.93316650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549542.630136,"delta_ms":0},{"type":"getStatus","timestamp":1585549544.4,"event_timestamp":1585549542.900872,"result":{"route_state":"tracking","location":{"lat":35.64193344116211,"lon":139.6456298828125,"time":1585549544.4,"speed":6.080491542816162,"bearing":277.6376037597656,"altitude":81.93316650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4702.10400390625,"remaining_leg_duration":916.387,"step_index":0,"remaining_step_distance":34.76811599731445,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":1.771,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64193344116211,"lon":139.6456298828125,"time":1585549544.4,"bearing":277.6376037597656}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419601,"lon":139.6456784,"time":1585549543.621,"speed":6.500101566314697,"bearing":272.0126037597656,"altitude":81.45458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549543.621455,"delta_ms":0},{"type":"getStatus","timestamp":1585549545.414,"event_timestamp":1585549543.916204,"result":{"route_state":"tracking","location":{"lat":35.64194107055664,"lon":139.6455535888672,"time":1585549545.414,"speed":6.405881404876709,"bearing":277.6376037597656,"altitude":81.45458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4695.15087890625,"remaining_leg_duration":914.387,"step_index":0,"remaining_step_distance":27.81500244140625,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.793,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64194107055664,"lon":139.6455535888672,"time":1585549545.414,"bearing":277.6376037597656}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6419606,"lon":139.6456028,"time":1585549544.632,"speed":6.825084209442139,"bearing":273.9902648925781,"altitude":81.09613037109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549544.632541,"delta_ms":0},{"type":"getStatus","timestamp":1585549546.432,"event_timestamp":1585549544.933462,"result":{"route_state":"tracking","location":{"lat":35.64194869995117,"lon":139.64547729492188,"time":1585549546.432,"speed":6.690028667449951,"bearing":277.6376037597656,"altitude":81.09613037109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4688.19775390625,"remaining_leg_duration":912.387,"step_index":0,"remaining_step_distance":20.861644744873048,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.8,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64194869995117,"lon":139.64547729492188,"time":1585549546.432,"bearing":277.6376037597656}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419685,"lon":139.6455237,"time":1585549545.63,"speed":7.157987594604492,"bearing":277.9723815917969,"altitude":81.392822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549545.630883,"delta_ms":0},{"type":"getStatus","timestamp":1585549547.454,"event_timestamp":1585549545.954779,"result":{"route_state":"tracking","location":{"lat":35.64196014404297,"lon":139.6453857421875,"time":1585549547.454,"speed":6.986543655395508,"bearing":277.30426025390627,"altitude":81.392822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4679.81005859375,"remaining_leg_duration":910.387,"step_index":0,"remaining_step_distance":12.4739408493042,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.824,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.64195251464844,"lon":139.6454315185547,"time":1585549546.939,"bearing":277.6376037597656},{"lat":35.64196014404297,"lon":139.6453857421875,"time":1585549547.454,"bearing":277.30426025390627}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419825,"lon":139.645443,"time":1585549546.634,"speed":7.295870780944824,"bearing":279.98388671875,"altitude":81.379638671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549546.634762,"delta_ms":0},{"type":"getStatus","timestamp":1585549548.47,"event_timestamp":1585549546.971172,"result":{"route_state":"tracking","location":{"lat":35.641963958740237,"lon":139.64529418945313,"time":1585549548.47,"speed":7.170002460479736,"bearing":277.30426025390627,"altitude":81.379638671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4671.5478515625,"remaining_leg_duration":907.387,"step_index":0,"remaining_step_distance":4.211650848388672,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.836,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.641963958740237,"lon":139.64529418945313,"time":1585549548.47,"bearing":277.30426025390627}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6419957,"lon":139.6453628,"time":1585549547.637,"speed":7.041476249694824,"bearing":278.0093078613281,"altitude":81.27874755859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549547.637395,"delta_ms":0},{"type":"getStatus","timestamp":1585549549.483,"event_timestamp":1585549547.984191,"result":{"route_state":"tracking","location":{"lat":35.641971588134769,"lon":139.64524841308595,"time":1585549549.483,"speed":7.207942962646484,"bearing":277.30426025390627,"altitude":81.27874755859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4667.3359375,"remaining_leg_duration":906.387,"step_index":0,"remaining_step_distance":-0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.846,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.641971588134769,"lon":139.64524841308595,"time":1585549549.483,"bearing":277.30426025390627}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6420062,"lon":139.6452867,"time":1585549548.631,"speed":6.896698474884033,"bearing":266.1136474609375,"altitude":80.88330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549548.631479,"delta_ms":0},{"type":"getStatus","timestamp":1585549550.504,"event_timestamp":1585549549.005486,"result":{"route_state":"tracking","location":{"lat":35.641944885253909,"lon":139.64517211914063,"time":1585549550.504,"speed":7.017772197723389,"bearing":242.54624938964845,"altitude":80.88330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4659.8212890625,"remaining_leg_duration":904.432,"step_index":1,"remaining_step_distance":251.58384704589845,"remaining_step_duration":56.0,"state_message":"","in_tunnel":false,"predicted":1.873,"shape_index":5,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":259.0,"index":0},"key_points":[{"lat":35.641971588134769,"lon":139.64524841308595,"time":1585549549.483,"bearing":277.30426025390627},{"lat":35.641944885253909,"lon":139.64517211914063,"time":1585549550.504,"bearing":242.54624938964845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419898,"lon":139.6452222,"time":1585549549.642,"speed":5.658395767211914,"bearing":251.3611602783203,"altitude":80.5213623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549549.644104,"delta_ms":0},{"type":"getStatus","timestamp":1585549551.533,"event_timestamp":1585549550.034632,"result":{"route_state":"tracking","location":{"lat":35.64192199707031,"lon":139.64512634277345,"time":1585549551.533,"speed":6.1906962394714359,"bearing":242.54624938964845,"altitude":80.5213623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4654.990234375,"remaining_leg_duration":903.432,"step_index":1,"remaining_step_distance":246.75283813476563,"remaining_step_duration":55.0,"state_message":"","in_tunnel":false,"predicted":1.891,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64192199707031,"lon":139.64512634277345,"time":1585549551.533,"bearing":242.54624938964845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6419627,"lon":139.6451669,"time":1585549550.629,"speed":6.17795991897583,"bearing":241.15028381347657,"altitude":80.0865478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549550.629792,"delta_ms":0},{"type":"getStatus","timestamp":1585549552.547,"event_timestamp":1585549551.048727,"result":{"route_state":"tracking","location":{"lat":35.64189147949219,"lon":139.6450653076172,"time":1585549552.547,"speed":6.046532154083252,"bearing":242.54624938964845,"altitude":80.0865478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4648.52294921875,"remaining_leg_duration":902.432,"step_index":1,"remaining_step_distance":240.28575134277345,"remaining_step_duration":53.0,"state_message":"","in_tunnel":false,"predicted":1.918,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64189147949219,"lon":139.6450653076172,"time":1585549552.547,"bearing":242.54624938964845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6419286,"lon":139.6451105,"time":1585549551.63,"speed":5.948190689086914,"bearing":240.04029846191407,"altitude":80.2540283203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549551.630359,"delta_ms":0},{"type":"getStatus","timestamp":1585549553.564,"event_timestamp":1585549552.06916,"result":{"route_state":"tracking","location":{"lat":35.64187240600586,"lon":139.64501953125,"time":1585549553.564,"speed":5.943533420562744,"bearing":242.54624938964845,"altitude":80.2540283203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4643.86962890625,"remaining_leg_duration":901.432,"step_index":1,"remaining_step_distance":235.63246154785157,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.934,"shape_index":5,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"200 メートル先、左折です","announcement":"200 メートル先、左折です","remaining_step_distance":239.0,"index":0},"key_points":[{"lat":35.64187240600586,"lon":139.64501953125,"time":1585549553.564,"bearing":242.54624938964845}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6419013,"lon":139.6450564,"time":1585549552.632,"speed":5.2832841873168949,"bearing":241.0508270263672,"altitude":80.5335693359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549552.633111,"delta_ms":0},{"type":"getStatus","timestamp":1585549554.592,"event_timestamp":1585549553.093946,"result":{"route_state":"tracking","location":{"lat":35.641845703125,"lon":139.6449432373047,"time":1585549554.592,"speed":5.620995044708252,"bearing":242.54624938964845,"altitude":80.5335693359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4636.375,"remaining_leg_duration":899.432,"step_index":1,"remaining_step_distance":228.13755798339845,"remaining_step_duration":50.0,"state_message":"","in_tunnel":false,"predicted":1.96,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.641845703125,"lon":139.6449432373047,"time":1585549554.592,"bearing":242.54624938964845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6418744,"lon":139.6450013,"time":1585549553.635,"speed":6.472568035125732,"bearing":241.9008026123047,"altitude":81.0126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549553.635721,"delta_ms":0},{"type":"getStatus","timestamp":1585549555.617,"event_timestamp":1585549554.118278,"result":{"route_state":"tracking","location":{"lat":35.64181137084961,"lon":139.64488220214845,"time":1585549555.617,"speed":6.089810371398926,"bearing":242.54624938964845,"altitude":81.0126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4629.71044921875,"remaining_leg_duration":898.432,"step_index":1,"remaining_step_distance":221.47296142578126,"remaining_step_duration":49.0,"state_message":"","in_tunnel":false,"predicted":1.982,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64181137084961,"lon":139.64488220214845,"time":1585549555.617,"bearing":242.54624938964845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6418427,"lon":139.6449325,"time":1585549554.635,"speed":7.19511604309082,"bearing":241.9482421875,"altitude":81.422119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549554.636049,"delta_ms":0},{"type":"getStatus","timestamp":1585549556.636,"event_timestamp":1585549555.139408,"result":{"route_state":"tracking","location":{"lat":35.64178466796875,"lon":139.64480590820313,"time":1585549556.636,"speed":6.794156074523926,"bearing":242.54624938964845,"altitude":81.422119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4622.21923828125,"remaining_leg_duration":896.432,"step_index":1,"remaining_step_distance":213.9818572998047,"remaining_step_duration":47.0,"state_message":"","in_tunnel":false,"predicted":2.001,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64178466796875,"lon":139.64480590820313,"time":1585549556.636,"bearing":242.54624938964845}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6418087,"lon":139.644855,"time":1585549555.631,"speed":7.924076080322266,"bearing":242.93624877929688,"altitude":81.89013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549555.632074,"delta_ms":0},{"type":"getStatus","timestamp":1585549557.659,"event_timestamp":1585549556.160639,"result":{"route_state":"tracking","location":{"lat":35.641746520996097,"lon":139.64471435546876,"time":1585549557.659,"speed":7.57826566696167,"bearing":242.54624938964845,"altitude":81.89013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4612.91162109375,"remaining_leg_duration":894.432,"step_index":1,"remaining_step_distance":204.67431640625,"remaining_step_duration":45.0,"state_message":"","in_tunnel":false,"predicted":2.028,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.641746520996097,"lon":139.64471435546876,"time":1585549557.659,"bearing":242.54624938964845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6417722,"lon":139.6447697,"time":1585549556.625,"speed":8.733834266662598,"bearing":242.96131896972657,"altitude":81.7916259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549556.626087,"delta_ms":0},{"type":"getStatus","timestamp":1585549558.675,"event_timestamp":1585549557.178589,"result":{"route_state":"tracking","location":{"lat":35.641700744628909,"lon":139.6446075439453,"time":1585549558.675,"speed":8.416794776916504,"bearing":242.54624938964845,"altitude":81.7916259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4601.9873046875,"remaining_leg_duration":892.432,"step_index":1,"remaining_step_distance":193.750244140625,"remaining_step_duration":43.0,"state_message":"","in_tunnel":false,"predicted":2.05,"shape_index":5,"intersection_index":0,"road_name":"","key_points":[{"lat":35.641700744628909,"lon":139.6446075439453,"time":1585549558.675,"bearing":242.54624938964845}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6417357,"lon":139.6446796,"time":1585549557.633,"speed":8.605470657348633,"bearing":243.00880432128907,"altitude":82.20501708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549557.633201,"delta_ms":0},{"type":"getStatus","timestamp":1585549559.699,"event_timestamp":1585549558.200623,"result":{"route_state":"tracking","location":{"lat":35.641666412353519,"lon":139.64451599121095,"time":1585549559.699,"speed":8.62039566040039,"bearing":246.69969177246095,"altitude":82.20501708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4592.85791015625,"remaining_leg_duration":890.432,"step_index":1,"remaining_step_distance":184.6204376220703,"remaining_step_duration":41.0,"state_message":"","in_tunnel":false,"predicted":2.066,"shape_index":6,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64168167114258,"lon":139.64456176757813,"time":1585549559.196,"bearing":242.54624938964845},{"lat":35.641666412353519,"lon":139.64451599121095,"time":1585549559.699,"bearing":246.69969177246095}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6417025,"lon":139.6445944,"time":1585549558.631,"speed":7.876323699951172,"bearing":243.0503387451172,"altitude":81.77911376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549558.631954,"delta_ms":0},{"type":"getStatus","timestamp":1585549560.717,"event_timestamp":1585549559.220218,"result":{"route_state":"tracking","location":{"lat":35.641639709472659,"lon":139.64443969726563,"time":1585549560.717,"speed":8.229355812072754,"bearing":246.69969177246095,"altitude":81.77911376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4585.34326171875,"remaining_leg_duration":888.432,"step_index":1,"remaining_step_distance":177.10614013671876,"remaining_step_duration":39.0,"state_message":"","in_tunnel":false,"predicted":2.086,"shape_index":6,"intersection_index":1,"road_name":"","key_points":[{"lat":35.641639709472659,"lon":139.64443969726563,"time":1585549560.717,"bearing":246.69969177246095}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6416733,"lon":139.644523,"time":1585549559.633,"speed":6.825502872467041,"bearing":243.0825958251953,"altitude":81.860107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549559.633469,"delta_ms":0},{"type":"getStatus","timestamp":1585549561.734,"event_timestamp":1585549560.235911,"result":{"route_state":"tracking","location":{"lat":35.6416130065918,"lon":139.6443634033203,"time":1585549561.734,"speed":7.465545177459717,"bearing":243.10763549804688,"altitude":81.860107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4577.82763671875,"remaining_leg_duration":886.432,"step_index":1,"remaining_step_distance":169.590576171875,"remaining_step_duration":38.0,"state_message":"","in_tunnel":false,"predicted":2.101,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64162826538086,"lon":139.6444091796875,"time":1585549561.128,"bearing":246.69969177246095},{"lat":35.6416130065918,"lon":139.6443634033203,"time":1585549561.734,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416514,"lon":139.6444643,"time":1585549560.638,"speed":5.656383991241455,"bearing":243.10888671875,"altitude":81.1292724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549560.638565,"delta_ms":0},{"type":"getStatus","timestamp":1585549562.756,"event_timestamp":1585549561.257724,"result":{"route_state":"tracking","location":{"lat":35.64159393310547,"lon":139.64431762695313,"time":1585549562.756,"speed":6.159813404083252,"bearing":243.10763549804688,"altitude":81.1292724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4573.18310546875,"remaining_leg_duration":885.432,"step_index":1,"remaining_step_distance":164.94558715820313,"remaining_step_duration":36.0,"state_message":"","in_tunnel":false,"predicted":2.118,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64159393310547,"lon":139.64431762695313,"time":1585549562.756,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.641632799999999,"lon":139.6444171,"time":1585549561.639,"speed":4.6311869621276859,"bearing":244.10360717773438,"altitude":81.1669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549561.639719,"delta_ms":0},{"type":"getStatus","timestamp":1585549563.775,"event_timestamp":1585549562.277343,"result":{"route_state":"tracking","location":{"lat":35.6415901184082,"lon":139.64431762695313,"time":1585549563.775,"speed":4.995200157165527,"bearing":243.10763549804688,"altitude":81.1669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4572.99658203125,"remaining_leg_duration":885.432,"step_index":1,"remaining_step_distance":164.7593231201172,"remaining_step_duration":36.0,"state_message":"","in_tunnel":false,"predicted":2.136,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6415901184082,"lon":139.64431762695313,"time":1585549563.775,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416208,"lon":139.6443819,"time":1585549562.643,"speed":3.7190752029418947,"bearing":244.14405822753907,"altitude":81.08868408203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549562.6435919,"delta_ms":0},{"type":"getStatus","timestamp":1585549564.793,"event_timestamp":1585549563.294755,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549564.793,"speed":4.159920692443848,"bearing":243.10763549804688,"altitude":81.08868408203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.15,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549564.793,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416118,"lon":139.6443513,"time":1585549563.627,"speed":2.7693145275115969,"bearing":242.2364044189453,"altitude":80.82623291015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549563.627576,"delta_ms":0},{"type":"getStatus","timestamp":1585549565.813,"event_timestamp":1585549564.314614,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549565.813,"speed":4.159920692443848,"bearing":243.10763549804688,"altitude":81.08868408203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.186,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549564.793,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416068,"lon":139.6443305,"time":1585549564.624,"speed":1.6637901067733765,"bearing":242.39846801757813,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549564.624763,"delta_ms":1},{"type":"getStatus","timestamp":1585549566.839,"event_timestamp":1585549565.342233,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549566.839,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.215,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549565.813,"bearing":243.10763549804688}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.641607,"lon":139.6443237,"time":1585549565.624,"speed":0.7289069890975952,"bearing":242.78248596191407,"altitude":81.37152099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549565.625116,"delta_ms":0},{"type":"getStatus","timestamp":1585549567.864,"event_timestamp":1585549566.365437,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549567.864,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.24,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549566.839,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416075,"lon":139.64432300000002,"time":1585549566.619,"speed":0.7029931545257568,"bearing":242.17503356933595,"altitude":82.07330322265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549566.620189,"delta_ms":0},{"type":"getStatus","timestamp":1585549568.898,"event_timestamp":1585549567.400077,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549568.898,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.279,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549567.864,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416101,"lon":139.644325,"time":1585549567.62,"speed":0.17492510378360749,"bearing":274.7745361328125,"altitude":82.08270263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549567.620583,"delta_ms":0},{"type":"getStatus","timestamp":1585549569.939,"event_timestamp":1585549568.439704,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549569.939,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.319,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549568.898,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416124,"lon":139.6443306,"time":1585549568.643,"speed":0.275660902261734,"bearing":55.36106872558594,"altitude":81.84686279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549568.643315,"delta_ms":0},{"type":"getStatus","timestamp":1585549570.958,"event_timestamp":1585549569.459384,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549570.958,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.315,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549569.939,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416133,"lon":139.6443348,"time":1585549569.643,"speed":0.3375626504421234,"bearing":67.86747741699219,"altitude":81.8846435546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549569.643709,"delta_ms":0},{"type":"getStatus","timestamp":1585549571.983,"event_timestamp":1585549570.484936,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549571.983,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.34,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549570.958,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416131,"lon":139.6443365,"time":1585549570.638,"speed":0.22444908320903779,"bearing":80.26010131835938,"altitude":81.985107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549570.6389,"delta_ms":0},{"type":"getStatus","timestamp":1585549573.016,"event_timestamp":1585549571.51762,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549573.016,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.378,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549571.983,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416134,"lon":139.644339,"time":1585549571.625,"speed":0.22834432125091554,"bearing":80.54045104980469,"altitude":81.50018310546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549571.625296,"delta_ms":0},{"type":"getStatus","timestamp":1585549574.046,"event_timestamp":1585549572.547304,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549574.046,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.421,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549573.016,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416143,"lon":139.6443404,"time":1585549572.627,"speed":0.18246133625507356,"bearing":67.1120834350586,"altitude":81.56591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549572.628215,"delta_ms":0},{"type":"getStatus","timestamp":1585549575.082,"event_timestamp":1585549573.583644,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549575.082,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.455,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549574.046,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.641615,"lon":139.6443408,"time":1585549573.638,"speed":0.11924521625041962,"bearing":50.4475212097168,"altitude":81.850830078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549573.638389,"delta_ms":0},{"type":"getStatus","timestamp":1585549576.126,"event_timestamp":1585549574.62746,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549576.126,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.488,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549575.082,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416141,"lon":139.6443416,"time":1585549574.654,"speed":0.08680699020624161,"bearing":105.80337524414063,"altitude":81.99951171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549574.654957,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416139,"lon":139.6443412,"time":1585549575.627,"speed":0.025851264595985414,"bearing":155.3349609375,"altitude":82.0819091796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549575.627574,"delta_ms":0},{"type":"getStatus","timestamp":1585549577.142,"event_timestamp":1585549575.643531,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549577.142,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.515,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549576.126,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416133,"lon":139.6443398,"time":1585549576.633,"speed":0.08264578133821488,"bearing":234.2965545654297,"altitude":82.873046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549576.633775,"delta_ms":0},{"type":"getStatus","timestamp":1585549578.164,"event_timestamp":1585549576.665311,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549578.164,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.531,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549577.142,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416122,"lon":139.6443366,"time":1585549577.633,"speed":0.213535338640213,"bearing":244.4407958984375,"altitude":83.00164794921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549577.633877,"delta_ms":0},{"type":"getStatus","timestamp":1585549579.191,"event_timestamp":1585549577.691862,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549579.191,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.558,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549578.164,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416118,"lon":139.6443337,"time":1585549578.636,"speed":0.24280554056167603,"bearing":254.61813354492188,"altitude":83.2041015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549578.636645,"delta_ms":0},{"type":"getStatus","timestamp":1585549580.214,"event_timestamp":1585549578.71465,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549580.214,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.578,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549579.191,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416127,"lon":139.6443321,"time":1585549579.63,"speed":0.18820948898792268,"bearing":279.6922302246094,"altitude":83.11883544921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549579.630904,"delta_ms":0},{"type":"getStatus","timestamp":1585549581.239,"event_timestamp":1585549579.740367,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549581.239,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.609,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549580.214,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416129,"lon":139.6443307,"time":1585549580.629,"speed":0.1506148874759674,"bearing":280.3542785644531,"altitude":83.33349609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549580.629478,"delta_ms":0},{"type":"getStatus","timestamp":1585549582.275,"event_timestamp":1585549580.776084,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549582.275,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.646,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549581.239,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6416103,"lon":139.644324,"time":1585549581.626,"speed":0.6382959485054016,"bearing":240.97120666503907,"altitude":83.41571044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549581.626881,"delta_ms":0},{"type":"getStatus","timestamp":1585549583.312,"event_timestamp":1585549581.813678,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549583.312,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.686,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549582.275,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6416059,"lon":139.6443137,"time":1585549582.621,"speed":1.211757779121399,"bearing":241.86622619628907,"altitude":82.7786865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549582.622132,"delta_ms":0},{"type":"getStatus","timestamp":1585549584.355,"event_timestamp":1585549582.856436,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549584.355,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.734,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549583.312,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6415975,"lon":139.6442952,"time":1585549583.628,"speed":2.2052996158599855,"bearing":241.87820434570313,"altitude":82.479736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549583.628921,"delta_ms":0},{"type":"getStatus","timestamp":1585549585.394,"event_timestamp":1585549583.901342,"result":{"route_state":"tracking","location":{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549585.394,"speed":2.0866780281066896,"bearing":243.10763549804688,"altitude":81.19696044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4568.53125,"remaining_leg_duration":884.432,"step_index":1,"remaining_step_distance":160.2937469482422,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.766,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64157485961914,"lon":139.64427185058595,"time":1585549584.355,"bearing":243.10763549804688}]},"delta_ms":7},{"type":"updateLocation","location":{"lat":35.6415864,"lon":139.6442713,"time":1585549584.631,"speed":2.6466126441955568,"bearing":241.6379852294922,"altitude":81.84375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549584.632017,"delta_ms":0},{"type":"getStatus","timestamp":1585549586.425,"event_timestamp":1585549584.930706,"result":{"route_state":"tracking","location":{"lat":35.64155960083008,"lon":139.6442413330078,"time":1585549586.425,"speed":2.4128379821777345,"bearing":243.10763549804688,"altitude":81.84375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4565.3037109375,"remaining_leg_duration":883.432,"step_index":1,"remaining_step_distance":157.0666046142578,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.794,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64155960083008,"lon":139.6442413330078,"time":1585549586.425,"bearing":243.10763549804688}]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6415705,"lon":139.6442371,"time":1585549585.635,"speed":3.9407691955566408,"bearing":240.5177459716797,"altitude":81.728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549585.63543,"delta_ms":0},{"type":"getStatus","timestamp":1585549587.465,"event_timestamp":1585549585.968162,"result":{"route_state":"tracking","location":{"lat":35.64153289794922,"lon":139.64418029785157,"time":1585549587.465,"speed":3.414120674133301,"bearing":243.10763549804688,"altitude":81.728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4559.03466796875,"remaining_leg_duration":882.432,"step_index":1,"remaining_step_distance":150.79745483398438,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":1.83,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64153289794922,"lon":139.64418029785157,"time":1585549587.465,"bearing":243.10763549804688}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6415474,"lon":139.644188,"time":1585549586.637,"speed":4.329666614532471,"bearing":240.95411682128907,"altitude":81.1376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549586.637628,"delta_ms":0},{"type":"getStatus","timestamp":1585549588.481,"event_timestamp":1585549586.982961,"result":{"route_state":"tracking","location":{"lat":35.641517639160159,"lon":139.64413452148438,"time":1585549588.481,"speed":4.101387023925781,"bearing":243.10763549804688,"altitude":81.1376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4554.572265625,"remaining_leg_duration":881.432,"step_index":1,"remaining_step_distance":146.33473205566407,"remaining_step_duration":32.0,"state_message":"","in_tunnel":false,"predicted":1.844,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641517639160159,"lon":139.64413452148438,"time":1585549588.481,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6415191,"lon":139.6441248,"time":1585549587.632,"speed":5.818283557891846,"bearing":241.89517211914063,"altitude":80.99029541015625,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"result":true,"event_timestamp":1585549587.63304,"delta_ms":0},{"type":"getStatus","timestamp":1585549589.5,"event_timestamp":1585549588.002422,"result":{"route_state":"tracking","location":{"lat":35.641475677490237,"lon":139.64404296875,"time":1585549589.5,"speed":5.5927934646606449,"bearing":243.10763549804688,"altitude":80.99029541015625,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4545.0732421875,"remaining_leg_duration":879.432,"step_index":1,"remaining_step_distance":136.8358917236328,"remaining_step_duration":30.0,"state_message":"","in_tunnel":false,"predicted":1.868,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641475677490237,"lon":139.64404296875,"time":1585549589.5,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414901,"lon":139.6440584,"time":1585549588.632,"speed":5.341739177703857,"bearing":242.04095458984376,"altitude":81.10614013671875,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"result":true,"event_timestamp":1585549588.632328,"delta_ms":0},{"type":"getStatus","timestamp":1585549590.518,"event_timestamp":1585549589.022834,"result":{"route_state":"tracking","location":{"lat":35.641448974609378,"lon":139.6439666748047,"time":1585549590.518,"speed":5.659159183502197,"bearing":243.10763549804688,"altitude":81.10614013671875,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4537.572265625,"remaining_leg_duration":877.432,"step_index":1,"remaining_step_distance":129.33506774902345,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":1.886,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641448974609378,"lon":139.6439666748047,"time":1585549590.518,"bearing":243.10763549804688}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6414661,"lon":139.6440029,"time":1585549589.64,"speed":4.8333258628845219,"bearing":242.0549774169922,"altitude":81.704833984375,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"result":true,"event_timestamp":1585549589.641139,"delta_ms":0},{"type":"getStatus","timestamp":1585549591.54,"event_timestamp":1585549590.042485,"result":{"route_state":"tracking","location":{"lat":35.64142990112305,"lon":139.6439208984375,"time":1585549591.54,"speed":5.377266883850098,"bearing":243.10763549804688,"altitude":81.704833984375,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4532.91845703125,"remaining_leg_duration":876.432,"step_index":1,"remaining_step_distance":124.6813735961914,"remaining_step_duration":28.0,"state_message":"","in_tunnel":false,"predicted":1.9,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64142990112305,"lon":139.6439208984375,"time":1585549591.54,"bearing":243.10763549804688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6414411,"lon":139.6439536,"time":1585549590.636,"speed":5.044928073883057,"bearing":241.981201171875,"altitude":80.81756591796875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549590.637037,"delta_ms":0},{"type":"getStatus","timestamp":1585549592.562,"event_timestamp":1585549591.06392,"result":{"route_state":"tracking","location":{"lat":35.641395568847659,"lon":139.6438446044922,"time":1585549592.562,"speed":5.268604278564453,"bearing":243.10763549804688,"altitude":80.81756591796875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4525.03515625,"remaining_leg_duration":875.432,"step_index":1,"remaining_step_distance":116.79786682128906,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":1.926,"shape_index":7,"intersection_index":2,"road_name":"","key_points":[{"lat":35.641395568847659,"lon":139.6438446044922,"time":1585549592.562,"bearing":243.10763549804688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6414151,"lon":139.6438995,"time":1585549591.624,"speed":5.724728107452393,"bearing":241.94960021972657,"altitude":80.40594482421875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549591.625115,"delta_ms":0},{"type":"getStatus","timestamp":1585549593.582,"event_timestamp":1585549592.083309,"result":{"route_state":"tracking","location":{"lat":35.64137649536133,"lon":139.643798828125,"time":1585549593.582,"speed":5.5399651527404789,"bearing":245.51380920410157,"altitude":80.40594482421875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4520.380859375,"remaining_leg_duration":873.432,"step_index":1,"remaining_step_distance":112.14372253417969,"remaining_step_duration":25.0,"state_message":"","in_tunnel":false,"predicted":1.958,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641395568847659,"lon":139.6438446044922,"time":1585549592.562,"bearing":243.10763549804688},{"lat":35.64137649536133,"lon":139.643798828125,"time":1585549593.582,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6413882,"lon":139.6438385,"time":1585549592.622,"speed":6.042542457580566,"bearing":241.97666931152345,"altitude":80.2730712890625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549592.622803,"delta_ms":0},{"type":"getStatus","timestamp":1585549594.598,"event_timestamp":1585549593.100695,"result":{"route_state":"tracking","location":{"lat":35.641353607177737,"lon":139.6437225341797,"time":1585549594.598,"speed":5.923940658569336,"bearing":245.51380920410157,"altitude":80.2730712890625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4513.04443359375,"remaining_leg_duration":872.432,"step_index":1,"remaining_step_distance":104.80712890625,"remaining_step_duration":23.0,"state_message":"","in_tunnel":false,"predicted":1.976,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641353607177737,"lon":139.6437225341797,"time":1585549594.598,"bearing":245.51380920410157}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6413605,"lon":139.6437732,"time":1585549593.623,"speed":6.3130598068237309,"bearing":242.97024536132813,"altitude":80.5430908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549593.62415,"delta_ms":0},{"type":"getStatus","timestamp":1585549595.621,"event_timestamp":1585549594.121883,"result":{"route_state":"tracking","location":{"lat":35.641326904296878,"lon":139.64366149902345,"time":1585549595.621,"speed":6.312738418579102,"bearing":245.51380920410157,"altitude":80.5430908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4506.79150390625,"remaining_leg_duration":870.432,"step_index":1,"remaining_step_distance":98.55426025390625,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":1.998,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641326904296878,"lon":139.64366149902345,"time":1585549595.621,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6413328,"lon":139.6437025,"time":1585549594.624,"speed":7.012884140014648,"bearing":242.95469665527345,"altitude":80.05780029296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549594.624733,"delta_ms":0},{"type":"getStatus","timestamp":1585549596.639,"event_timestamp":1585549595.140365,"result":{"route_state":"tracking","location":{"lat":35.641292572021487,"lon":139.64356994628907,"time":1585549596.639,"speed":6.831060409545898,"bearing":245.51380920410157,"altitude":80.05780029296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.66943359375,"remaining_leg_duration":868.432,"step_index":1,"remaining_step_distance":89.43238067626953,"remaining_step_duration":20.0,"state_message":"","in_tunnel":false,"predicted":2.015,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.641292572021487,"lon":139.64356994628907,"time":1585549596.639,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6413008,"lon":139.6436242,"time":1585549595.625,"speed":7.939362525939941,"bearing":242.95216369628907,"altitude":80.10125732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549595.625763,"delta_ms":0},{"type":"getStatus","timestamp":1585549597.654,"event_timestamp":1585549596.155696,"result":{"route_state":"tracking","location":{"lat":35.64126205444336,"lon":139.6434783935547,"time":1585549597.654,"speed":7.594697952270508,"bearing":245.51380920410157,"altitude":80.10125732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4488.72412109375,"remaining_leg_duration":866.432,"step_index":1,"remaining_step_distance":80.48660278320313,"remaining_step_duration":18.0,"state_message":"","in_tunnel":false,"predicted":2.029,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64126205444336,"lon":139.6434783935547,"time":1585549597.654,"bearing":245.51380920410157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6412677,"lon":139.6435421,"time":1585549596.63,"speed":7.930828094482422,"bearing":243.00177001953126,"altitude":80.17138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549596.631072,"delta_ms":0},{"type":"getStatus","timestamp":1585549598.668,"event_timestamp":1585549597.169341,"result":{"route_state":"tracking","location":{"lat":35.64122772216797,"lon":139.6433868408203,"time":1585549598.668,"speed":8.055415153503418,"bearing":245.51380920410157,"altitude":80.17138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4479.6025390625,"remaining_leg_duration":864.432,"step_index":1,"remaining_step_distance":71.3652114868164,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.038,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64122772216797,"lon":139.6433868408203,"time":1585549598.668,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6412348,"lon":139.643462,"time":1585549597.628,"speed":7.755070686340332,"bearing":243.01239013671876,"altitude":80.491455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549597.628459,"delta_ms":0},{"type":"getStatus","timestamp":1585549599.683,"event_timestamp":1585549598.184146,"result":{"route_state":"tracking","location":{"lat":35.64118957519531,"lon":139.64328002929688,"time":1585549599.683,"speed":7.976748466491699,"bearing":245.51380920410157,"altitude":80.491455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4469.0478515625,"remaining_leg_duration":862.432,"step_index":1,"remaining_step_distance":60.81071472167969,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.055,"shape_index":8,"intersection_index":3,"road_name":"","voice_instruction":{"ssml_announcement":"左折です","announcement":"左折です","remaining_step_distance":67.80000305175781,"index":1},"key_points":[{"lat":35.64118957519531,"lon":139.64328002929688,"time":1585549599.683,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6412025,"lon":139.6433859,"time":1585549598.635,"speed":7.548666000366211,"bearing":243.0218505859375,"altitude":81.40911865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549598.636091,"delta_ms":0},{"type":"getStatus","timestamp":1585549600.712,"event_timestamp":1585549599.212911,"result":{"route_state":"tracking","location":{"lat":35.64116668701172,"lon":139.64321899414063,"time":1585549600.712,"speed":7.711185455322266,"bearing":245.51380920410157,"altitude":81.40911865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4462.966796875,"remaining_leg_duration":861.432,"step_index":1,"remaining_step_distance":54.72970199584961,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.077,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64116668701172,"lon":139.64321899414063,"time":1585549600.712,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.64117,"lon":139.6433071,"time":1585549599.635,"speed":7.952121734619141,"bearing":241.98092651367188,"altitude":82.00677490234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549599.636663,"delta_ms":0},{"type":"getStatus","timestamp":1585549601.733,"event_timestamp":1585549600.235639,"result":{"route_state":"tracking","location":{"lat":35.64113235473633,"lon":139.64312744140626,"time":1585549601.733,"speed":7.851030349731445,"bearing":245.51380920410157,"altitude":82.00677490234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4453.845703125,"remaining_leg_duration":859.432,"step_index":1,"remaining_step_distance":45.60818099975586,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":2.098,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64113235473633,"lon":139.64312744140626,"time":1585549601.733,"bearing":245.51380920410157}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6411296,"lon":139.6432078,"time":1585549600.636,"speed":9.92553424835205,"bearing":241.92518615722657,"altitude":82.46966552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549600.637143,"delta_ms":0},{"type":"getStatus","timestamp":1585549602.754,"event_timestamp":1585549601.255126,"result":{"route_state":"tracking","location":{"lat":35.64108657836914,"lon":139.64300537109376,"time":1585549602.754,"speed":9.330456733703614,"bearing":245.51380920410157,"altitude":82.46966552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4441.68359375,"remaining_leg_duration":856.432,"step_index":1,"remaining_step_distance":33.44620895385742,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.118,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64108657836914,"lon":139.64300537109376,"time":1585549602.754,"bearing":245.51380920410157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6410855,"lon":139.6430976,"time":1585549601.622,"speed":9.9307861328125,"bearing":242.00169372558595,"altitude":82.58917236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549601.62223,"delta_ms":0},{"type":"getStatus","timestamp":1585549603.771,"event_timestamp":1585549602.273919,"result":{"route_state":"tracking","location":{"lat":35.64103698730469,"lon":139.64288330078126,"time":1585549603.771,"speed":9.949470520019532,"bearing":245.51380920410157,"altitude":82.58917236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4429.3447265625,"remaining_leg_duration":853.432,"step_index":1,"remaining_step_distance":21.107624053955079,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.149,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64103698730469,"lon":139.64288330078126,"time":1585549603.771,"bearing":245.51380920410157}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6410444,"lon":139.6429992,"time":1585549602.626,"speed":9.000943183898926,"bearing":242.04364013671876,"altitude":81.7003173828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549602.626602,"delta_ms":0},{"type":"getStatus","timestamp":1585549604.797,"event_timestamp":1585549603.29839,"result":{"route_state":"tracking","location":{"lat":35.64100646972656,"lon":139.6427764892578,"time":1585549604.797,"speed":9.476545333862305,"bearing":245.51380920410157,"altitude":81.7003173828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4419.1416015625,"remaining_leg_duration":851.432,"step_index":1,"remaining_step_distance":10.9041166305542,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.171,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64100646972656,"lon":139.6427764892578,"time":1585549604.797,"bearing":245.51380920410157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6410082,"lon":139.6429109,"time":1585549603.625,"speed":8.599180221557618,"bearing":242.02076721191407,"altitude":81.695556640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549603.625498,"delta_ms":0},{"type":"getStatus","timestamp":1585549605.815,"event_timestamp":1585549604.31641,"result":{"route_state":"tracking","location":{"lat":35.64097213745117,"lon":139.6427001953125,"time":1585549605.815,"speed":8.964472770690918,"bearing":245.51380920410157,"altitude":81.695556640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4411.27783203125,"remaining_leg_duration":849.432,"step_index":1,"remaining_step_distance":3.040583610534668,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":2.19,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.64097213745117,"lon":139.6427001953125,"time":1585549605.815,"bearing":245.51380920410157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6409735,"lon":139.642835,"time":1585549604.631,"speed":6.941688537597656,"bearing":242.11500549316407,"altitude":81.044677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549604.631443,"delta_ms":0},{"type":"getStatus","timestamp":1585549606.835,"event_timestamp":1585549605.337249,"result":{"route_state":"tracking","location":{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549606.835,"speed":7.689967155456543,"bearing":245.51380920410157,"altitude":81.044677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4408.2373046875,"remaining_leg_duration":849.432,"step_index":1,"remaining_step_distance":0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.204,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549606.835,"bearing":245.51380920410157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6409435,"lon":139.64277,"time":1585549605.624,"speed":7.100088119506836,"bearing":236.1385955810547,"altitude":80.32550048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549605.625088,"delta_ms":0},{"type":"getStatus","timestamp":1585549607.853,"event_timestamp":1585549606.355421,"result":{"route_state":"tracking","location":{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549607.853,"speed":7.238518714904785,"bearing":245.51380920410157,"altitude":80.32550048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4408.2373046875,"remaining_leg_duration":849.432,"step_index":1,"remaining_step_distance":0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.229,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549606.835,"bearing":245.51380920410157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6409123,"lon":139.6427316,"time":1585549606.637,"speed":3.950242519378662,"bearing":217.41896057128907,"altitude":79.686767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549606.63757,"delta_ms":0},{"type":"getStatus","timestamp":1585549608.875,"event_timestamp":1585549607.377926,"result":{"route_state":"tracking","location":{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549608.875,"speed":5.0972371101379398,"bearing":245.51380920410157,"altitude":79.686767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4408.2373046875,"remaining_leg_duration":849.432,"step_index":1,"remaining_step_distance":0.00000286102294921875,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.238,"shape_index":8,"intersection_index":3,"road_name":"","key_points":[{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549607.853,"bearing":245.51380920410157}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6408839,"lon":139.6427289,"time":1585549607.625,"speed":3.6666135787963869,"bearing":196.138427734375,"altitude":79.63323974609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549607.6256,"delta_ms":0},{"type":"getStatus","timestamp":1585549609.899,"event_timestamp":1585549608.402064,"result":{"route_state":"tracking","location":{"lat":35.64083480834961,"lon":139.64273071289063,"time":1585549609.899,"speed":3.861799955368042,"bearing":157.3173370361328,"altitude":79.63323974609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4393.1748046875,"remaining_leg_duration":845.1,"step_index":2,"remaining_step_distance":1053.9595947265626,"remaining_step_duration":260.0,"state_message":"","in_tunnel":false,"predicted":2.274,"shape_index":9,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"新町二丁目","type":"turn","modifier":"right","components":[{"type":"text","text":"新町二丁目"}]},"remaining_step_distance":1069.0218505859376,"index":0},"key_points":[{"lat":35.640960693359378,"lon":139.64266967773438,"time":1585549608.875,"bearing":245.51380920410157},{"lat":35.64083480834961,"lon":139.64273071289063,"time":1585549609.899,"bearing":157.3173370361328}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6408478,"lon":139.6427377,"time":1585549608.619,"speed":4.0856733322143559,"bearing":173.98419189453126,"altitude":79.3604736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549608.619421,"delta_ms":0},{"type":"getStatus","timestamp":1585549610.937,"event_timestamp":1585549609.439118,"result":{"route_state":"tracking","location":{"lat":35.640777587890628,"lon":139.64276123046876,"time":1585549610.937,"speed":3.848961591720581,"bearing":157.3173370361328,"altitude":79.3604736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4386.2353515625,"remaining_leg_duration":844.1,"step_index":2,"remaining_step_distance":1047.0198974609376,"remaining_step_duration":258.0,"state_message":"","in_tunnel":false,"predicted":2.318,"shape_index":9,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"1 キロメートル直進です","announcement":"1 キロメートル直進です","remaining_step_distance":1051.0,"index":0},"key_points":[{"lat":35.640777587890628,"lon":139.64276123046876,"time":1585549610.937,"bearing":157.3173370361328}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6408047,"lon":139.64276,"time":1585549609.637,"speed":5.150742530822754,"bearing":163.94937133789063,"altitude":78.856689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549609.637965,"delta_ms":0},{"type":"getStatus","timestamp":1585549611.96,"event_timestamp":1585549610.461911,"result":{"route_state":"tracking","location":{"lat":35.64072799682617,"lon":139.64279174804688,"time":1585549611.96,"speed":4.620394706726074,"bearing":157.3173370361328,"altitude":78.856689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4380.07763671875,"remaining_leg_duration":842.1,"step_index":2,"remaining_step_distance":1040.8621826171876,"remaining_step_duration":257.0,"state_message":"","in_tunnel":false,"predicted":2.323,"shape_index":9,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64072799682617,"lon":139.64279174804688,"time":1585549611.96,"bearing":157.3173370361328}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6407534,"lon":139.6427852,"time":1585549610.65,"speed":5.824060916900635,"bearing":162.9127197265625,"altitude":79.25140380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549610.650396,"delta_ms":0},{"type":"getStatus","timestamp":1585549612.98,"event_timestamp":1585549611.483593,"result":{"route_state":"tracking","location":{"lat":35.640655517578128,"lon":139.642822265625,"time":1585549612.98,"speed":5.478538990020752,"bearing":164.7074737548828,"altitude":79.25140380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4371.5537109375,"remaining_leg_duration":840.1,"step_index":2,"remaining_step_distance":1032.338134765625,"remaining_step_duration":255.0,"state_message":"","in_tunnel":false,"predicted":2.33,"shape_index":10,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64069366455078,"lon":139.64280700683595,"time":1585549612.445,"bearing":157.3173370361328},{"lat":35.640655517578128,"lon":139.642822265625,"time":1585549612.98,"bearing":164.7074737548828}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6406961,"lon":139.6428098,"time":1585549611.648,"speed":6.332088470458984,"bearing":162.95777893066407,"altitude":79.8702392578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549611.648524,"delta_ms":0},{"type":"getStatus","timestamp":1585549614.0,"event_timestamp":1585549612.502483,"result":{"route_state":"tracking","location":{"lat":35.64057922363281,"lon":139.64285278320313,"time":1585549614.0,"speed":6.18831205368042,"bearing":164.7074737548828,"altitude":79.8702392578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4362.62353515625,"remaining_leg_duration":838.1,"step_index":2,"remaining_step_distance":1023.4082641601563,"remaining_step_duration":253.0,"state_message":"","in_tunnel":false,"predicted":2.352,"shape_index":10,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64057922363281,"lon":139.64285278320313,"time":1585549614.0,"bearing":164.7074737548828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6406341,"lon":139.642834,"time":1585549612.641,"speed":6.844104290008545,"bearing":162.94363403320313,"altitude":80.06634521484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549612.641726,"delta_ms":0},{"type":"getStatus","timestamp":1585549615.015,"event_timestamp":1585549613.517211,"result":{"route_state":"tracking","location":{"lat":35.640499114990237,"lon":139.6428680419922,"time":1585549615.015,"speed":6.789012908935547,"bearing":164.7074737548828,"altitude":80.06634521484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4353.66943359375,"remaining_leg_duration":836.1,"step_index":2,"remaining_step_distance":1014.4541015625,"remaining_step_duration":250.0,"state_message":"","in_tunnel":false,"predicted":2.374,"shape_index":10,"intersection_index":1,"road_name":"","key_points":[{"lat":35.640499114990237,"lon":139.6428680419922,"time":1585549615.015,"bearing":164.7074737548828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6405698,"lon":139.6428572,"time":1585549613.626,"speed":6.888859272003174,"bearing":163.99282836914063,"altitude":81.52789306640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549613.626948,"delta_ms":0},{"type":"getStatus","timestamp":1585549616.037,"event_timestamp":1585549614.538731,"result":{"route_state":"tracking","location":{"lat":35.64043426513672,"lon":139.6428985595703,"time":1585549616.037,"speed":7.014434814453125,"bearing":164.7074737548828,"altitude":81.52789306640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4345.97900390625,"remaining_leg_duration":834.1,"step_index":2,"remaining_step_distance":1006.7633666992188,"remaining_step_duration":249.0,"state_message":"","in_tunnel":false,"predicted":2.411,"shape_index":10,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64043426513672,"lon":139.6428985595703,"time":1585549616.037,"bearing":164.7074737548828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6405041,"lon":139.6428814,"time":1585549614.657,"speed":7.7133002281188969,"bearing":163.91455078125,"altitude":81.77203369140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549614.658187,"delta_ms":0},{"type":"getStatus","timestamp":1585549617.052,"event_timestamp":1585549615.553103,"result":{"route_state":"tracking","location":{"lat":35.640350341796878,"lon":139.64292907714845,"time":1585549617.052,"speed":7.581947326660156,"bearing":164.7074737548828,"altitude":81.77203369140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4336.2373046875,"remaining_leg_duration":831.1,"step_index":2,"remaining_step_distance":997.0218505859375,"remaining_step_duration":246.0,"state_message":"","in_tunnel":false,"predicted":2.395,"shape_index":10,"intersection_index":1,"road_name":"","key_points":[{"lat":35.640350341796878,"lon":139.64292907714845,"time":1585549617.052,"bearing":164.7074737548828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6404451,"lon":139.6428999,"time":1585549615.621,"speed":6.217326641082764,"bearing":164.10658264160157,"altitude":81.65234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549615.6215,"delta_ms":0},{"type":"getStatus","timestamp":1585549618.067,"event_timestamp":1585549616.568451,"result":{"route_state":"tracking","location":{"lat":35.64030456542969,"lon":139.64292907714845,"time":1585549618.067,"speed":6.749481201171875,"bearing":164.7074737548828,"altitude":81.65234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4331.3193359375,"remaining_leg_duration":830.1,"step_index":2,"remaining_step_distance":992.1041259765625,"remaining_step_duration":245.0,"state_message":"","in_tunnel":false,"predicted":2.446,"shape_index":10,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64030456542969,"lon":139.64292907714845,"time":1585549618.067,"bearing":164.7074737548828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6403976,"lon":139.6429145,"time":1585549616.625,"speed":5.742093563079834,"bearing":165.02462768554688,"altitude":81.0460205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549616.625576,"delta_ms":0},{"type":"getStatus","timestamp":1585549619.084,"event_timestamp":1585549617.586292,"result":{"route_state":"tracking","location":{"lat":35.640262603759769,"lon":139.64295959472657,"time":1585549619.084,"speed":6.058874130249023,"bearing":165.96055603027345,"altitude":81.0460205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4326.015625,"remaining_leg_duration":829.1,"step_index":2,"remaining_step_distance":986.8001098632813,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.459,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64028549194336,"lon":139.6429443359375,"time":1585549618.541,"bearing":164.7074737548828},{"lat":35.640262603759769,"lon":139.64295959472657,"time":1585549619.084,"bearing":165.96055603027345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6403539,"lon":139.6429264,"time":1585549617.623,"speed":5.283148765563965,"bearing":165.0337677001953,"altitude":81.223388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549617.623376,"delta_ms":0},{"type":"getStatus","timestamp":1585549620.1,"event_timestamp":1585549618.601851,"result":{"route_state":"tracking","location":{"lat":35.640228271484378,"lon":139.64295959472657,"time":1585549620.1,"speed":5.496462821960449,"bearing":165.96055603027345,"altitude":81.223388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4322.39599609375,"remaining_leg_duration":828.1,"step_index":2,"remaining_step_distance":983.1806640625,"remaining_step_duration":243.0,"state_message":"","in_tunnel":false,"predicted":2.477,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.640228271484378,"lon":139.64295959472657,"time":1585549620.1,"bearing":165.96055603027345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6403163,"lon":139.642936,"time":1585549618.641,"speed":4.112186908721924,"bearing":164.1177978515625,"altitude":81.00244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549618.641767,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402885,"lon":139.6429469,"time":1585549619.625,"speed":3.2487311363220217,"bearing":158.21397399902345,"altitude":79.88995361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549619.626096,"delta_ms":0},{"type":"getStatus","timestamp":1585549621.126,"event_timestamp":1585549619.6276,"result":{"route_state":"tracking","location":{"lat":35.640228271484378,"lon":139.64295959472657,"time":1585549621.126,"speed":5.496462821960449,"bearing":165.96055603027345,"altitude":81.223388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4322.39599609375,"remaining_leg_duration":828.1,"step_index":2,"remaining_step_distance":983.1806640625,"remaining_step_duration":243.0,"state_message":"","in_tunnel":false,"predicted":1.501,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.640228271484378,"lon":139.64295959472657,"time":1585549620.1,"bearing":165.96055603027345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6402694,"lon":139.6429651,"time":1585549620.638,"speed":2.990567445755005,"bearing":136.55145263671876,"altitude":80.2569580078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549620.63857,"delta_ms":0},{"type":"getStatus","timestamp":1585549622.146,"event_timestamp":1585549620.648462,"result":{"route_state":"tracking","location":{"lat":35.64022445678711,"lon":139.64295959472657,"time":1585549622.146,"speed":3.0373237133026125,"bearing":165.96055603027345,"altitude":80.2569580078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4321.98046875,"remaining_leg_duration":828.1,"step_index":2,"remaining_step_distance":982.7650146484375,"remaining_step_duration":243.0,"state_message":"","in_tunnel":false,"predicted":1.508,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64022445678711,"lon":139.64295959472657,"time":1585549622.146,"bearing":165.96055603027345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6402626,"lon":139.6429996,"time":1585549621.624,"speed":3.2338640689849855,"bearing":108.30655670166016,"altitude":79.66259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549621.624612,"delta_ms":0},{"type":"getStatus","timestamp":1585549623.166,"event_timestamp":1585549621.667487,"result":{"route_state":"tracking","location":{"lat":35.64021682739258,"lon":139.64295959472657,"time":1585549623.166,"speed":3.030479669570923,"bearing":165.96055603027345,"altitude":79.66259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4321.146484375,"remaining_leg_duration":828.1,"step_index":2,"remaining_step_distance":981.9312133789063,"remaining_step_duration":242.0,"state_message":"","in_tunnel":false,"predicted":1.542,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64021682739258,"lon":139.64295959472657,"time":1585549623.166,"bearing":165.96055603027345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402637,"lon":139.6430472,"time":1585549622.625,"speed":4.323477745056152,"bearing":93.04434204101563,"altitude":79.42462158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549622.625333,"delta_ms":0},{"type":"getStatus","timestamp":1585549624.182,"event_timestamp":1585549622.683282,"result":{"route_state":"tracking","location":{"lat":35.64020538330078,"lon":139.64297485351563,"time":1585549624.182,"speed":3.7884161472320558,"bearing":165.96055603027345,"altitude":79.42462158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"","in_tunnel":false,"predicted":1.557,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64020538330078,"lon":139.64297485351563,"time":1585549624.182,"bearing":165.96055603027345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402681,"lon":139.6431082,"time":1585549623.631,"speed":5.445169925689697,"bearing":92.0134506225586,"altitude":79.16644287109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549623.631395,"delta_ms":0},{"type":"getStatus","timestamp":1585549625.198,"event_timestamp":1585549623.69934,"result":{"route_state":"tracking","location":{"lat":35.64020538330078,"lon":139.64297485351563,"time":1585549625.198,"speed":3.7884161472320558,"bearing":165.96055603027345,"altitude":79.42462158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"","in_tunnel":false,"predicted":1.567,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64020538330078,"lon":139.64297485351563,"time":1585549624.182,"bearing":165.96055603027345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6402689,"lon":139.6431797,"time":1585549624.624,"speed":6.028145790100098,"bearing":93.01306915283203,"altitude":79.25628662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549624.62459,"delta_ms":0},{"type":"getStatus","timestamp":1585549626.216,"event_timestamp":1585549624.720355,"result":{"route_state":"tracking","location":{"lat":35.64020538330078,"lon":139.64297485351563,"time":1585549626.216,"speed":5.703763961791992,"bearing":165.96055603027345,"altitude":79.25628662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"","in_tunnel":false,"predicted":1.592,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[{"lat":35.64020538330078,"lon":139.64297485351563,"time":1585549625.198,"bearing":165.96055603027345}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6402657,"lon":139.6432627,"time":1585549625.621,"speed":7.4089436531066898,"bearing":94.02271270751953,"altitude":78.8209228515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549625.62195,"delta_ms":0},{"type":"getStatus","timestamp":1585549627.247,"event_timestamp":1585549625.74856,"result":{"route_state":"tracking","location":{"lat":35.64025115966797,"lon":139.6433868408203,"time":1585549627.247,"speed":7.065064430236816,"bearing":97.30389404296875,"altitude":78.8209228515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402605,"lon":139.6433632,"time":1585549626.638,"speed":8.880270957946778,"bearing":95.02275848388672,"altitude":79.2296142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549626.638851,"delta_ms":0},{"type":"getStatus","timestamp":1585549628.273,"event_timestamp":1585549626.774183,"result":{"route_state":"tracking","location":{"lat":35.64023971557617,"lon":139.64349365234376,"time":1585549628.273,"speed":8.361186981201172,"bearing":97.30389404296875,"altitude":79.2296142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402555,"lon":139.6434675,"time":1585549627.627,"speed":7.891722679138184,"bearing":95.95958709716797,"altitude":79.19488525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549627.628137,"delta_ms":0},{"type":"getStatus","timestamp":1585549629.291,"event_timestamp":1585549627.792513,"result":{"route_state":"tracking","location":{"lat":35.640228271484378,"lon":139.6436004638672,"time":1585549629.291,"speed":8.338196754455567,"bearing":97.30389404296875,"altitude":79.19488525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402464,"lon":139.6435689,"time":1585549628.621,"speed":9.060176849365235,"bearing":96.02398681640625,"altitude":79.91668701171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549628.6218,"delta_ms":0},{"type":"getStatus","timestamp":1585549630.316,"event_timestamp":1585549628.81717,"result":{"route_state":"offRoute","location":{"lat":35.64021301269531,"lon":139.6437225341797,"time":1585549630.316,"speed":9.01437759399414,"bearing":97.33309936523438,"altitude":79.91668701171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.57861328125,"remaining_leg_duration":827.1,"step_index":2,"remaining_step_distance":980.3630981445313,"remaining_step_duration":242.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":11,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585549628.851536,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6402377,"lon":139.6436736,"time":1585549629.656,"speed":8.72463607788086,"bearing":95.9906005859375,"altitude":79.41302490234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549629.656829,"delta_ms":0},{"type":"getStatus","timestamp":1585549631.364,"event_timestamp":1585549629.864641,"result":{"route_state":"invalid","location":{"lat":35.640201568603519,"lon":139.64382934570313,"time":1585549631.364,"speed":9.008014678955079,"bearing":97.33309936523438,"altitude":79.41302490234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":5168.938,\"duration\":924.507,\"geometry\":\"ixh~bAssdjiGhHsxA|E_}@f^cQxVgNvSmKdZgNv]eOr~@k`@`g@_TpRoHdZiMvC{A|JqGhW}TlPuE~WoI|TqH~MsFjLoHvSmJfSoJlEyBpCyAnIuEzE{AxHyBzE]fN{Aj`@}@d@yAlAuEdEaS|DeOfOor@~BePjBaQjAmKd@oINsFjAkK`C}TzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":924.507,\"weight_name\":\"routability\",\"legs\":[{\"distance\":5168.938,\"duration\":924.507,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":221.412,\"duration\":45.815,\"geometry\":\"ixh~bAssdjiGhHsxA|E_}@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.643723,35.640213],\"bearing_before\":0.0,\"bearing_after\":97.0,\"instruction\":\"東方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":221.412,\"announcement\":\"東方向です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e東方向です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":72.5,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":221.412,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":45.815,\"intersections\":[{\"location\":[139.643723,35.640213],\"bearings\":[97],\"entry\":[true],\"out\":0},{\"location\":[139.645157,35.640064],\"bearings\":[4,98,184,277],\"entry\":[true,true,false,false],\"in\":3,\"out\":1}]},{\"distance\":1073.0,\"duration\":312.425,\"geometry\":\"ahh~bAgkijiGf^cQxVgNvSmKdZgNv]eOr~@k`@`g@_TpRoHdZiMvC{A|JqGhW}TlPuE~WoI|TqH~MsFjLoHvSmJfSoJlEyBpCyAnIuEzE{AxHyBzE]fN{Aj`@}@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.646149,35.639954],\"bearing_before\":98.0,\"bearing_after\":155.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":1053.0,\"announcement\":\"1 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e1 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":240.4,\"announcement\":\"200 メートル先、東電世田谷前を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、東電世田谷前を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.5,\"announcement\":\"東電世田谷前を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e東電世田谷前を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":1073.0,\"primary\":{\"text\":\"東電世田谷前\",\"components\":[{\"text\":\"東電世田谷前\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":312.425,\"intersections\":[{\"location\":[139.646149,35.639954],\"bearings\":[8,90,155,278],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.646439,35.639454],\"bearings\":[92,153,275,335],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.646683,35.639072],\"bearings\":[154,273,333],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.646881,35.638741],\"bearings\":[70,155,258,334],\"entry\":[true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.647125,35.638306],\"bearings\":[63,157,335],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.647385,35.637814],\"bearings\":[73,157,260,337],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.647919,35.636795],\"bearings\":[89,157,276,337],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.648254,35.636154],\"bearings\":[84,158,262,287,337],\"entry\":[true,true,true,false,false],\"in\":4,\"out\":1},{\"location\":[139.648407,35.635841],\"bearings\":[157,246,338],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.648819,35.635139],\"bearings\":[144,269,329],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.64917,35.63475],\"bearings\":[68,161,267,324,344],\"entry\":[true,true,true,false,false],\"in\":3,\"out\":1},{\"location\":[139.649445,35.634071],\"bearings\":[84,161,270,341],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.649597,35.63372],\"bearings\":[86,158,341],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.649719,35.63348],\"bearings\":[150,269,338],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.649872,35.633266],\"bearings\":[157,237,330],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.650238,35.63261],\"bearings\":[76,154,337],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.650299,35.632507],\"bearings\":[153,269,334],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.650345,35.632435],\"bearings\":[35,153,333],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.650452,35.632267],\"bearings\":[70,161,333],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.650558,35.632],\"bearings\":[70,172,341],\"entry\":[true,true,false],\"in\":2,\"out\":1}]},{\"distance\":268.0,\"duration\":72.665,\"geometry\":\"m_w}bAsdrjiGd@yAlAuEdEaS|DeOfOor@~BePjBaQjAmKd@oINsFjAkK\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.65065,35.631111],\"bearing_before\":176.0,\"bearing_after\":117.0,\"instruction\":\"東電世田谷前を左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":248.0,\"announcement\":\"200 メートル先、新町一丁目を右戻る方向です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、新町一丁目を右戻る方向です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":55.3,\"announcement\":\"新町一丁目を右戻る方向です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e新町一丁目を右戻る方向です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":268.0,\"primary\":{\"text\":\"新町一丁目\",\"components\":[{\"text\":\"新町一丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"sharp right\"}},{\"distanceAlongGeometry\":55.3,\"primary\":{\"text\":\"新町一丁目\",\"components\":[{\"text\":\"新町一丁目\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"sharp right\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"slight left\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"slight left\",\"sharp right\"],\"active\":true}]}}],\"driving_side\":\"left\",\"weight\":72.665,\"intersections\":[{\"location\":[139.65065,35.631111],\"bearings\":[117,175,301,356],\"entry\":[true,false,true,false],\"in\":3,\"out\":0},{\"location\":[139.650696,35.631092],\"bearings\":[114,297],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.650803,35.631054],\"bearings\":[111,180,294],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.651123,35.630955],\"bearings\":[114,182,291],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.651382,35.630859],\"bearings\":[11,111,180,294],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.652206,35.6306],\"bearings\":[106,177,291,355],\"entry\":[true,true,false,false],\"in\":2,\"out\":0},{\"location\":[139.652771,35.630482],\"bearings\":[103,283,355],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.652969,35.630444],\"bearings\":[6,98,283],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.653137,35.630424],\"bearings\":[94,158,278],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.653259,35.630417],\"bearings\":[103,274],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":3132.0,\"duration\":351.576,\"geometry\":\"squ}bAatwjiG`C}TzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.653458,35.630379],\"bearing_before\":103.0,\"bearing_after\":248.0,\"instruction\":\"新町一丁目を右戻る方向です\",\"type\":\"turn\",\"modifier\":\"sharp right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3112.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":623.6,\"announcement\":\"600 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e600 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":133.6,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3132.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":133.6,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":351.576,\"intersections\":[{\"location\":[139.653458,35.630379],\"bearings\":[75,103,104,246,283,355],\"entry\":[true,true,true,false,false,true],\"in\":4,\"out\":1,\"lanes\":[{\"valid\":false,\"indications\":[\"slight left\"]},{\"valid\":true,\"indications\":[\"slight left\",\"sharp right\"]}]},{\"location\":[139.653809,35.630314],\"bearings\":[75,175,248,282,283],\"entry\":[false,true,true,true,false],\"in\":4,\"out\":2},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":71.184,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.4,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.4,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":71.184,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.435,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.7,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.7,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.435,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.624,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.624,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[130.8,90.6,61.5,47.9,41.1,53.2,59.6,123.2,77.5,37.5,52.7,9.4,24.6,53.7,32.5,47.1,41.4,28.9,27.5,40.5,39.7,12.7,9.1,21.0,13.0,18.3,12.4,27.5,59.5,4.7,10.6,31.0,25.8,79.9,25.9,26.9,18.4,15.3,11.1,18.4,32.6,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[18.837,20.378,13.024,8.616,8.215,11.268,19.504,34.13,21.472,13.485,12.637,2.268,5.904,24.168,5.566,8.075,5.737,4.008,3.807,5.606,5.499,2.182,0.816,3.606,2.462,3.461,4.056,8.997,19.478,0.419,0.95,4.467,3.709,11.513,4.235,4.401,1.66,4.6,2.099,1.66,2.931,2.226,2.715,1.706,3.475,0.292,4.148,0.356,0.909,4.14,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.092,7.668,4.37,7.049,12.214,8.105,8.869,4.419,0.959,0.23,2.046,6.097,0.371,4.311,2.755,3.214,10.342,0.453,0.48,7.403,1.184,0.309,7.212,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.744,6.805,3.548,18.612,2.307,6.001,19.308,11.535,15.172,7.748,8.877,1.205,1.415,11.044,3.527,0.629,0.45,6.6,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6437225,35.640213;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"97.333099,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"HUan-p-eEm6G3-sw1djqQu9F4kB3hRiXCN_PEt5r-Q71uHwfeASyJw\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585549629.933962,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":5165.57763671875,"remaining_leg_duration":924.507,"step_index":0,"remaining_step_distance":221.384765625,"remaining_step_duration":45.815,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":31},{"type":"updateLocation","location":{"lat":35.640229,"lon":139.6437694,"time":1585549630.644,"speed":8.394207000732422,"bearing":95.99044036865235,"altitude":78.6253662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549630.644323,"delta_ms":0},{"type":"getStatus","timestamp":1585549632.375,"event_timestamp":1585549630.875739,"result":{"route_state":"tracking","location":{"lat":35.64019012451172,"lon":139.6439208984375,"time":1585549632.375,"speed":8.7203369140625,"bearing":97.27288055419922,"altitude":78.6253662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5147.45166015625,"remaining_leg_duration":920.507,"step_index":0,"remaining_step_distance":203.25914001464845,"remaining_step_duration":42.0,"state_message":"","in_tunnel":false,"predicted":1.731,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"東方向です その先 右折です","announcement":"東方向です その先 右折です","remaining_step_distance":221.384765625,"index":0},"banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":221.384765625,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.640217,"lon":139.6438731,"time":1585549631.615,"speed":9.797552108764649,"bearing":97.03166961669922,"altitude":77.80462646484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549631.615455,"delta_ms":0},{"type":"getStatus","timestamp":1585549633.399,"event_timestamp":1585549631.899753,"result":{"route_state":"tracking","location":{"lat":35.64017868041992,"lon":139.64405822753907,"time":1585549633.399,"speed":9.464268684387207,"bearing":97.27288055419922,"altitude":77.80462646484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5134.96826171875,"remaining_leg_duration":918.507,"step_index":0,"remaining_step_distance":190.775634765625,"remaining_step_duration":39.0,"state_message":"","in_tunnel":false,"predicted":1.784,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64017868041992,"lon":139.64405822753907,"time":1585549633.399,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6402014,"lon":139.643987,"time":1585549632.62,"speed":9.810462951660157,"bearing":96.999755859375,"altitude":77.8724365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549632.621031,"delta_ms":0},{"type":"getStatus","timestamp":1585549634.419,"event_timestamp":1585549632.919518,"result":{"route_state":"tracking","location":{"lat":35.64016342163086,"lon":139.64418029785157,"time":1585549634.419,"speed":9.693450927734375,"bearing":97.27288055419922,"altitude":77.8724365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5123.7978515625,"remaining_leg_duration":915.507,"step_index":0,"remaining_step_distance":179.60507202148438,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.799,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64016342163086,"lon":139.64418029785157,"time":1585549634.419,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6401852,"lon":139.6441016,"time":1585549633.636,"speed":10.213793754577637,"bearing":96.01134490966797,"altitude":77.3663330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549633.637009,"delta_ms":0},{"type":"getStatus","timestamp":1585549635.433,"event_timestamp":1585549633.933409,"result":{"route_state":"tracking","location":{"lat":35.64015197753906,"lon":139.644287109375,"time":1585549635.433,"speed":10.125297546386719,"bearing":97.27288055419922,"altitude":77.3663330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5114.05078125,"remaining_leg_duration":913.507,"step_index":0,"remaining_step_distance":169.85833740234376,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.797,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64015197753906,"lon":139.644287109375,"time":1585549635.433,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.640171,"lon":139.6442213,"time":1585549634.637,"speed":10.384699821472168,"bearing":96.00287628173828,"altitude":76.41864013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549634.637976,"delta_ms":0},{"type":"getStatus","timestamp":1585549636.447,"event_timestamp":1585549634.948652,"result":{"route_state":"tracking","location":{"lat":35.640140533447269,"lon":139.64442443847657,"time":1585549636.447,"speed":10.500931739807129,"bearing":97.27288055419922,"altitude":76.41864013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5101.56640625,"remaining_leg_duration":911.507,"step_index":0,"remaining_step_distance":157.37387084960938,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":1.81,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.640140533447269,"lon":139.64442443847657,"time":1585549636.447,"bearing":97.27288055419922}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6401554,"lon":139.6443439,"time":1585549635.63,"speed":11.183106422424317,"bearing":97.01315307617188,"altitude":76.2724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549635.630184,"delta_ms":0},{"type":"getStatus","timestamp":1585549637.468,"event_timestamp":1585549635.969288,"result":{"route_state":"tracking","location":{"lat":35.6401252746582,"lon":139.6445770263672,"time":1585549637.468,"speed":11.092557907104493,"bearing":97.27288055419922,"altitude":76.2724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5087.658203125,"remaining_leg_duration":908.507,"step_index":0,"remaining_step_distance":143.4652862548828,"remaining_step_duration":30.0,"state_message":"","in_tunnel":false,"predicted":1.838,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6401252746582,"lon":139.6445770263672,"time":1585549637.468,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.640139,"lon":139.6444717,"time":1585549636.629,"speed":11.238479614257813,"bearing":97.00090789794922,"altitude":76.1292724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549636.62969,"delta_ms":0},{"type":"getStatus","timestamp":1585549638.49,"event_timestamp":1585549636.991494,"result":{"route_state":"tracking","location":{"lat":35.64011001586914,"lon":139.6446990966797,"time":1585549638.49,"speed":11.191137313842774,"bearing":97.27288055419922,"altitude":76.1292724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5076.48828125,"remaining_leg_duration":906.507,"step_index":0,"remaining_step_distance":132.29544067382813,"remaining_step_duration":27.0,"state_message":"","in_tunnel":false,"predicted":1.861,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64011001586914,"lon":139.6446990966797,"time":1585549638.49,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6401264,"lon":139.6445944,"time":1585549637.632,"speed":10.910918235778809,"bearing":95.99684143066406,"altitude":75.7943115234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549637.632274,"delta_ms":0},{"type":"getStatus","timestamp":1585549639.516,"event_timestamp":1585549638.016944,"result":{"route_state":"tracking","location":{"lat":35.640098571777347,"lon":139.6448211669922,"time":1585549639.516,"speed":11.02164077758789,"bearing":97.27288055419922,"altitude":75.7943115234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5065.3720703125,"remaining_leg_duration":903.507,"step_index":0,"remaining_step_distance":121.17958068847656,"remaining_step_duration":25.0,"state_message":"","in_tunnel":false,"predicted":1.884,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.640098571777347,"lon":139.6448211669922,"time":1585549639.516,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6401152,"lon":139.6447144,"time":1585549638.627,"speed":10.668122291564942,"bearing":95.99571228027344,"altitude":76.09857177734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549638.627611,"delta_ms":0},{"type":"getStatus","timestamp":1585549640.54,"event_timestamp":1585549639.041152,"result":{"route_state":"tracking","location":{"lat":35.64008331298828,"lon":139.64492797851563,"time":1585549640.54,"speed":10.827662467956543,"bearing":97.27288055419922,"altitude":76.09857177734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5055.57080078125,"remaining_leg_duration":901.507,"step_index":0,"remaining_step_distance":111.37798309326172,"remaining_step_duration":23.0,"state_message":"","in_tunnel":false,"predicted":1.913,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64008331298828,"lon":139.64492797851563,"time":1585549640.54,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6401028,"lon":139.6448332,"time":1585549639.622,"speed":10.371686935424805,"bearing":96.99030303955078,"altitude":75.388916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549639.623009,"delta_ms":0},{"type":"getStatus","timestamp":1585549641.563,"event_timestamp":1585549640.064359,"result":{"route_state":"tracking","location":{"lat":35.640071868896487,"lon":139.6450653076172,"time":1585549641.563,"speed":10.715523719787598,"bearing":97.27288055419922,"altitude":75.388916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5043.08642578125,"remaining_leg_duration":899.507,"step_index":0,"remaining_step_distance":98.89366912841797,"remaining_step_duration":20.0,"state_message":"","in_tunnel":false,"predicted":1.941,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.640071868896487,"lon":139.6450653076172,"time":1585549641.563,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6400896,"lon":139.6449458,"time":1585549640.625,"speed":9.850604057312012,"bearing":96.98607635498047,"altitude":74.8929443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549640.625737,"delta_ms":0},{"type":"getStatus","timestamp":1585549642.58,"event_timestamp":1585549641.081489,"result":{"route_state":"tracking","location":{"lat":35.64006423950195,"lon":139.64515686035157,"time":1585549642.58,"speed":10.116106033325196,"bearing":97.27288055419922,"altitude":74.8929443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5034.76318359375,"remaining_leg_duration":897.507,"step_index":0,"remaining_step_distance":90.57028198242188,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":1.955,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.64006423950195,"lon":139.64515686035157,"time":1585549642.58,"bearing":97.27288055419922}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6400776,"lon":139.6450504,"time":1585549641.625,"speed":9.462136268615723,"bearing":96.99151611328125,"altitude":74.3226318359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549641.625169,"delta_ms":0},{"type":"getStatus","timestamp":1585549643.603,"event_timestamp":1585549642.103726,"result":{"route_state":"tracking","location":{"lat":35.640052795410159,"lon":139.645263671875,"time":1585549643.603,"speed":9.698283195495606,"bearing":97.81446838378906,"altitude":74.3226318359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5025.01611328125,"remaining_leg_duration":895.507,"step_index":0,"remaining_step_distance":80.82349395751953,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":1.978,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64006423950195,"lon":139.64515686035157,"time":1585549642.58,"bearing":97.27288055419922},{"lat":35.640052795410159,"lon":139.645263671875,"time":1585549643.603,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6400679,"lon":139.645148,"time":1585549642.626,"speed":8.973151206970215,"bearing":96.98269653320313,"altitude":74.527587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549642.62646,"delta_ms":0},{"type":"getStatus","timestamp":1585549644.62,"event_timestamp":1585549643.121354,"result":{"route_state":"tracking","location":{"lat":35.64004135131836,"lon":139.64535522460938,"time":1585549644.62,"speed":9.15140438079834,"bearing":97.81446838378906,"altitude":74.527587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5016.63720703125,"remaining_leg_duration":893.507,"step_index":0,"remaining_step_distance":72.44439697265625,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":1.994,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"右折です","announcement":"右折です","remaining_step_distance":72.5,"index":1},"key_points":[{"lat":35.64004135131836,"lon":139.64535522460938,"time":1585549644.62,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6400594,"lon":139.6452431,"time":1585549643.63,"speed":8.80591869354248,"bearing":95.99813079833985,"altitude":75.2640380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549643.630181,"delta_ms":0},{"type":"getStatus","timestamp":1585549645.643,"event_timestamp":1585549644.144578,"result":{"route_state":"tracking","location":{"lat":35.64002990722656,"lon":139.64544677734376,"time":1585549645.643,"speed":8.869832038879395,"bearing":97.81446838378906,"altitude":75.2640380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":5008.25732421875,"remaining_leg_duration":891.507,"step_index":0,"remaining_step_distance":64.06463623046875,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.013,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.64002990722656,"lon":139.64544677734376,"time":1585549645.643,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6400515,"lon":139.6453382,"time":1585549644.629,"speed":8.742704391479493,"bearing":96.99590301513672,"altitude":75.60906982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549644.629733,"delta_ms":0},{"type":"getStatus","timestamp":1585549646.66,"event_timestamp":1585549645.161527,"result":{"route_state":"tracking","location":{"lat":35.640018463134769,"lon":139.64553833007813,"time":1585549646.66,"speed":8.74661922454834,"bearing":97.81446838378906,"altitude":75.60906982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4999.87744140625,"remaining_leg_duration":890.507,"step_index":0,"remaining_step_distance":55.68495178222656,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.031,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.640018463134769,"lon":139.64553833007813,"time":1585549646.66,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6400398,"lon":139.645429,"time":1585549645.632,"speed":8.140725135803223,"bearing":96.98304748535156,"altitude":75.6934814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549645.632448,"delta_ms":0},{"type":"getStatus","timestamp":1585549647.678,"event_timestamp":1585549646.179413,"result":{"route_state":"tracking","location":{"lat":35.640010833740237,"lon":139.64561462402345,"time":1585549647.678,"speed":8.354187965393067,"bearing":97.81446838378906,"altitude":75.6934814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4992.9248046875,"remaining_leg_duration":888.507,"step_index":0,"remaining_step_distance":48.732261657714847,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":2.046,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.640010833740237,"lon":139.64561462402345,"time":1585549647.678,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6400299,"lon":139.6455127,"time":1585549646.624,"speed":7.655348300933838,"bearing":97.98299407958985,"altitude":76.251708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549646.624761,"delta_ms":0},{"type":"getStatus","timestamp":1585549648.699,"event_timestamp":1585549647.200571,"result":{"route_state":"tracking","location":{"lat":35.63999938964844,"lon":139.6457061767578,"time":1585549648.699,"speed":7.828214168548584,"bearing":97.81446838378906,"altitude":76.251708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4984.54541015625,"remaining_leg_duration":887.507,"step_index":0,"remaining_step_distance":40.35257339477539,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":2.075,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63999938964844,"lon":139.6457061767578,"time":1585549648.699,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.640021,"lon":139.6455922,"time":1585549647.636,"speed":7.504117012023926,"bearing":96.9977798461914,"altitude":76.3106689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549647.63705,"delta_ms":0},{"type":"getStatus","timestamp":1585549649.722,"event_timestamp":1585549648.223591,"result":{"route_state":"tracking","location":{"lat":35.63999557495117,"lon":139.64576721191407,"time":1585549649.722,"speed":7.549445152282715,"bearing":97.81446838378906,"altitude":76.3106689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4979.0185546875,"remaining_leg_duration":885.507,"step_index":0,"remaining_step_distance":34.825904846191409,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.086,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63999557495117,"lon":139.64576721191407,"time":1585549649.722,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.640012,"lon":139.6456705,"time":1585549648.64,"speed":6.957343578338623,"bearing":96.98316955566406,"altitude":76.22265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549648.640414,"delta_ms":0},{"type":"getStatus","timestamp":1585549650.745,"event_timestamp":1585549649.246234,"result":{"route_state":"tracking","location":{"lat":35.639984130859378,"lon":139.64584350585938,"time":1585549650.745,"speed":7.149331569671631,"bearing":97.81446838378906,"altitude":76.22265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4972.005859375,"remaining_leg_duration":884.507,"step_index":0,"remaining_step_distance":27.813270568847658,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.105,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.639984130859378,"lon":139.64584350585938,"time":1585549650.745,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.640003,"lon":139.6457412,"time":1585549649.62,"speed":6.4262566566467289,"bearing":97.97911834716797,"altitude":76.9879150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549649.620261,"delta_ms":0},{"type":"getStatus","timestamp":1585549651.763,"event_timestamp":1585549650.264601,"result":{"route_state":"tracking","location":{"lat":35.63998031616211,"lon":139.64590454101563,"time":1585549651.763,"speed":6.5977277755737309,"bearing":97.81446838378906,"altitude":76.9879150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4966.47900390625,"remaining_leg_duration":883.507,"step_index":0,"remaining_step_distance":22.28620147705078,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.143,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63998031616211,"lon":139.64590454101563,"time":1585549651.763,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399951,"lon":139.6458018,"time":1585549650.634,"speed":5.461685657501221,"bearing":96.96163940429688,"altitude":76.90179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549650.634537,"delta_ms":0},{"type":"getStatus","timestamp":1585549652.79,"event_timestamp":1585549651.29128,"result":{"route_state":"tracking","location":{"lat":35.639976501464847,"lon":139.64593505859376,"time":1585549652.79,"speed":5.704362869262695,"bearing":97.81446838378906,"altitude":76.90179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4963.685546875,"remaining_leg_duration":882.507,"step_index":0,"remaining_step_distance":19.49310302734375,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.156,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.639976501464847,"lon":139.64593505859376,"time":1585549652.79,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399885,"lon":139.6458526,"time":1585549651.637,"speed":4.454565525054932,"bearing":96.94685363769531,"altitude":76.9935302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549651.639764,"delta_ms":1},{"type":"getStatus","timestamp":1585549653.809,"event_timestamp":1585549652.310326,"result":{"route_state":"tracking","location":{"lat":35.63997268676758,"lon":139.64598083496095,"time":1585549653.809,"speed":4.957009792327881,"bearing":97.81446838378906,"altitude":76.9935302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4959.525390625,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":15.332611083984375,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.172,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63997268676758,"lon":139.64598083496095,"time":1585549653.809,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399854,"lon":139.6458898,"time":1585549652.622,"speed":3.2936437129974367,"bearing":96.9297866821289,"altitude":76.83624267578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549652.622708,"delta_ms":0},{"type":"getStatus","timestamp":1585549654.824,"event_timestamp":1585549653.32548,"result":{"route_state":"tracking","location":{"lat":35.63997268676758,"lon":139.64599609375,"time":1585549654.824,"speed":3.7935986518859865,"bearing":97.81446838378906,"altitude":76.83624267578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4958.1572265625,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":13.964668273925782,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.202,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63997268676758,"lon":139.64599609375,"time":1585549654.824,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399825,"lon":139.6459151,"time":1585549653.626,"speed":2.454690933227539,"bearing":96.93065643310547,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549653.626318,"delta_ms":0},{"type":"getStatus","timestamp":1585549655.841,"event_timestamp":1585549654.342121,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549655.841,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.215,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549655.841,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399809,"lon":139.6459311,"time":1585549654.625,"speed":1.4603365659713746,"bearing":96.85648345947266,"altitude":77.98883056640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549654.62615,"delta_ms":0},{"type":"getStatus","timestamp":1585549656.857,"event_timestamp":1585549655.358591,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549656.857,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.232,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549655.841,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399801,"lon":139.6459357,"time":1585549655.624,"speed":0.4894818961620331,"bearing":96.58348083496094,"altitude":78.95465087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549655.624671,"delta_ms":0},{"type":"getStatus","timestamp":1585549657.88,"event_timestamp":1585549656.380834,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549657.88,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.256,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549656.857,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.63998,"lon":139.6459319,"time":1585549656.618,"speed":0.45801666378974917,"bearing":97.03456115722656,"altitude":79.5638427734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549656.618286,"delta_ms":0},{"type":"getStatus","timestamp":1585549658.908,"event_timestamp":1585549657.409255,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549658.908,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.29,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549657.88,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399808,"lon":139.6459268,"time":1585549657.635,"speed":0.05928323417901993,"bearing":292.5732421875,"altitude":79.777099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549657.635557,"delta_ms":0},{"type":"getStatus","timestamp":1585549659.981,"event_timestamp":1585549658.481567,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549659.981,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.346,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549658.908,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399815,"lon":139.6459233,"time":1585549658.615,"speed":0.21842792630195619,"bearing":285.55023193359377,"altitude":79.7281494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549658.615761,"delta_ms":0},{"type":"getStatus","timestamp":1585549661.021,"event_timestamp":1585549659.522514,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549661.021,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.406,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549659.981,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399815,"lon":139.6459231,"time":1585549659.627,"speed":0.09718748927116394,"bearing":281.54962158203127,"altitude":80.38250732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549659.627645,"delta_ms":0},{"type":"getStatus","timestamp":1585549662.052,"event_timestamp":1585549660.552556,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549662.052,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.425,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549661.021,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.63998,"lon":139.6459231,"time":1585549660.639,"speed":0.09264273196458817,"bearing":205.74131774902345,"altitude":80.7293701171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549660.63954,"delta_ms":0},{"type":"getStatus","timestamp":1585549663.081,"event_timestamp":1585549661.581423,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549663.081,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.442,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549662.052,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399785,"lon":139.6459231,"time":1585549661.633,"speed":0.13419683277606965,"bearing":188.00889587402345,"altitude":80.7841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549661.633377,"delta_ms":0},{"type":"getStatus","timestamp":1585549664.118,"event_timestamp":1585549662.619185,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549664.118,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.485,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549663.081,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399778,"lon":139.6459228,"time":1585549662.641,"speed":0.1055164560675621,"bearing":192.137451171875,"altitude":81.48193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549662.641316,"delta_ms":0},{"type":"getStatus","timestamp":1585549665.135,"event_timestamp":1585549663.636953,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549665.135,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.494,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549664.118,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399775,"lon":139.6459278,"time":1585549663.637,"speed":0.4360392093658447,"bearing":97.0643310546875,"altitude":81.3468017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549663.637698,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.639976,"lon":139.645941,"time":1585549664.635,"speed":1.8147437572479249,"bearing":97.09520721435547,"altitude":81.75396728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549664.636132,"delta_ms":0},{"type":"getStatus","timestamp":1585549666.166,"event_timestamp":1585549664.667874,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549666.166,"speed":2.7855842113494875,"bearing":97.81446838378906,"altitude":77.30572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":1.531,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549665.135,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399726,"lon":139.6459702,"time":1585549665.625,"speed":2.938620090484619,"bearing":97.04901885986328,"altitude":81.67242431640625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549665.625245,"delta_ms":0},{"type":"getStatus","timestamp":1585549667.196,"event_timestamp":1585549665.697755,"result":{"route_state":"tracking","location":{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549667.196,"speed":2.3700127601623537,"bearing":97.81446838378906,"altitude":81.67242431640625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4956.732421875,"remaining_leg_duration":881.507,"step_index":0,"remaining_step_distance":12.539588928222657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":1.571,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996887207031,"lon":139.64601135253907,"time":1585549666.166,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399683,"lon":139.646005,"time":1585549666.626,"speed":3.640915870666504,"bearing":97.2306137084961,"altitude":81.2784423828125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"result":true,"event_timestamp":1585549666.626965,"delta_ms":0},{"type":"getStatus","timestamp":1585549668.226,"event_timestamp":1585549666.727079,"result":{"route_state":"tracking","location":{"lat":35.63996505737305,"lon":139.64605712890626,"time":1585549668.226,"speed":3.296738862991333,"bearing":97.81446838378906,"altitude":81.2784423828125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4952.57177734375,"remaining_leg_duration":880.507,"step_index":0,"remaining_step_distance":8.37890625,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.6,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63996505737305,"lon":139.64605712890626,"time":1585549668.226,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399623,"lon":139.6460563,"time":1585549667.632,"speed":3.9166605472564699,"bearing":96.0059814453125,"altitude":81.26129150390625,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"result":true,"event_timestamp":1585549667.6327,"delta_ms":0},{"type":"getStatus","timestamp":1585549669.258,"event_timestamp":1585549667.759419,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64613342285157,"time":1585549669.258,"speed":3.88371205329895,"bearing":97.81446838378906,"altitude":81.26129150390625,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4945.56005859375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":1.3674087524414063,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.626,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64613342285157,"time":1585549669.258,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399582,"lon":139.6461029,"time":1585549668.634,"speed":3.1830434799194338,"bearing":94.96583557128906,"altitude":81.40087890625,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"result":true,"event_timestamp":1585549668.634592,"delta_ms":0},{"type":"getStatus","timestamp":1585549670.287,"event_timestamp":1585549668.788505,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549670.287,"speed":3.505580425262451,"bearing":97.81446838378906,"altitude":81.40087890625,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.653,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549670.287,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399559,"lon":139.6461336,"time":1585549669.624,"speed":1.965486764907837,"bearing":94.93628692626953,"altitude":81.0858154296875,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585549669.624496,"delta_ms":0},{"type":"getStatus","timestamp":1585549671.309,"event_timestamp":1585549669.810237,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549671.309,"speed":2.668553113937378,"bearing":97.81446838378906,"altitude":81.0858154296875,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.685,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549670.287,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399552,"lon":139.6461509,"time":1585549670.621,"speed":1.6220709085464478,"bearing":93.9709243774414,"altitude":80.94244384765625,"accuracyHorizontal":3.7290000915527345,"provider":"fused"},"result":true,"event_timestamp":1585549670.621684,"delta_ms":0},{"type":"getStatus","timestamp":1585549672.341,"event_timestamp":1585549670.842478,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549672.341,"speed":1.9359263181686402,"bearing":97.81446838378906,"altitude":80.94244384765625,"accuracyHorizontal":3.7290000915527345,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.72,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549671.309,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399557,"lon":139.646158,"time":1585549671.623,"speed":1.579969882965088,"bearing":94.07418823242188,"altitude":79.860107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549671.624054,"delta_ms":0},{"type":"getStatus","timestamp":1585549673.372,"event_timestamp":1585549671.873489,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549673.372,"speed":1.6704314947128297,"bearing":97.81446838378906,"altitude":79.860107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.749,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549672.341,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399575,"lon":139.6461534,"time":1585549672.637,"speed":0.46756377816200259,"bearing":82.18026733398438,"altitude":79.4522705078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549672.637885,"delta_ms":0},{"type":"getStatus","timestamp":1585549674.405,"event_timestamp":1585549672.906647,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549674.405,"speed":0.5525165796279907,"bearing":97.81446838378906,"altitude":79.4522705078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.768,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549673.372,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399587,"lon":139.6461529,"time":1585549673.628,"speed":0.8796678185462952,"bearing":94.04576110839844,"altitude":79.58624267578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549673.6284,"delta_ms":0},{"type":"getStatus","timestamp":1585549675.443,"event_timestamp":1585549673.943995,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549675.443,"speed":0.5694407820701599,"bearing":97.81446838378906,"altitude":79.58624267578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.815,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549674.405,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399578,"lon":139.6461648,"time":1585549674.634,"speed":1.6599059104919434,"bearing":102.1319808959961,"altitude":79.76312255859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549674.634816,"delta_ms":0},{"type":"getStatus","timestamp":1585549676.479,"event_timestamp":1585549674.980877,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549676.479,"speed":1.158980369567871,"bearing":97.81446838378906,"altitude":79.76312255859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.845,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549675.443,"bearing":97.81446838378906}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6399491,"lon":139.646188,"time":1585549675.633,"speed":2.7512054443359377,"bearing":130.79513549804688,"altitude":80.0435791015625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549675.633934,"delta_ms":0},{"type":"getStatus","timestamp":1585549677.509,"event_timestamp":1585549676.011316,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549677.509,"speed":2.2487094402313234,"bearing":97.81446838378906,"altitude":80.0435791015625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.876,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549676.479,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399285,"lon":139.646207,"time":1585549676.628,"speed":3.0708136558532717,"bearing":149.64125061035157,"altitude":80.84173583984375,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"result":true,"event_timestamp":1585549676.628231,"delta_ms":0},{"type":"getStatus","timestamp":1585549678.564,"event_timestamp":1585549677.065283,"result":{"route_state":"tracking","location":{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549678.564,"speed":2.680119752883911,"bearing":97.81446838378906,"altitude":80.84173583984375,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4944.19287109375,"remaining_leg_duration":878.507,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.936,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549677.509,"bearing":97.81446838378906}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6399111,"lon":139.6462184,"time":1585549677.238,"speed":3.8060693740844728,"bearing":164.8036651611328,"altitude":80.84173583984375,"accuracyHorizontal":4.511000156402588,"provider":"fused"},"result":true,"event_timestamp":1585549677.239065,"delta_ms":0},{"type":"getStatus","timestamp":1585549679.594,"event_timestamp":1585549678.095862,"result":{"route_state":"tracking","location":{"lat":35.63984298706055,"lon":139.64620971679688,"time":1585549679.594,"speed":3.3116955757141115,"bearing":154.75657653808595,"altitude":80.84173583984375,"accuracyHorizontal":4.511000156402588,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4930.6962890625,"remaining_leg_duration":874.692,"step_index":1,"remaining_step_distance":1059.5478515625,"remaining_step_duration":308.0,"state_message":"","in_tunnel":false,"predicted":2.356,"shape_index":2,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"東電世田谷前","type":"turn","modifier":"left","components":[{"type":"text","text":"東電世田谷前"}]},"remaining_step_distance":1073.0,"index":0},"key_points":[{"lat":35.63995361328125,"lon":139.64614868164063,"time":1585549678.564,"bearing":97.81446838378906},{"lat":35.63984298706055,"lon":139.64620971679688,"time":1585549679.594,"bearing":154.75657653808595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.639866,"lon":139.6462284,"time":1585549678.625,"speed":4.239264965057373,"bearing":181.8923797607422,"altitude":80.9306640625,"accuracyHorizontal":5.836999893188477,"provider":"fused"},"result":true,"event_timestamp":1585549678.625321,"delta_ms":0},{"type":"getStatus","timestamp":1585549680.629,"event_timestamp":1585549679.130115,"result":{"route_state":"tracking","location":{"lat":35.639801025390628,"lon":139.646240234375,"time":1585549680.629,"speed":3.8725106716156008,"bearing":154.75657653808595,"altitude":80.9306640625,"accuracyHorizontal":5.836999893188477,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4925.294921875,"remaining_leg_duration":872.692,"step_index":1,"remaining_step_distance":1054.1466064453126,"remaining_step_duration":307.0,"state_message":"","in_tunnel":false,"predicted":2.004,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.639801025390628,"lon":139.646240234375,"time":1585549680.629,"bearing":154.75657653808595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6398285,"lon":139.6462316,"time":1585549679.628,"speed":4.5033860206604,"bearing":177.85476684570313,"altitude":81.0750732421875,"accuracyHorizontal":6.642000198364258,"provider":"fused"},"result":true,"event_timestamp":1585549679.628964,"delta_ms":0},{"type":"getStatus","timestamp":1585549681.661,"event_timestamp":1585549680.162005,"result":{"route_state":"tracking","location":{"lat":35.63975143432617,"lon":139.64625549316407,"time":1585549681.661,"speed":4.269060134887695,"bearing":154.75657653808595,"altitude":81.0750732421875,"accuracyHorizontal":6.642000198364258,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4919.69970703125,"remaining_leg_duration":871.692,"step_index":1,"remaining_step_distance":1048.55126953125,"remaining_step_duration":305.0,"state_message":"","in_tunnel":false,"predicted":2.033,"shape_index":2,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"1 キロメートル直進です","announcement":"1 キロメートル直進です","remaining_step_distance":1053.0,"index":0},"key_points":[{"lat":35.63975143432617,"lon":139.64625549316407,"time":1585549681.661,"bearing":154.75657653808595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6397426,"lon":139.646277,"time":1585549680.629,"speed":7.1966328620910648,"bearing":154.94480895996095,"altitude":80.8358154296875,"accuracyHorizontal":6.642000198364258,"provider":"fused"},"result":true,"event_timestamp":1585549680.629236,"delta_ms":0},{"type":"getStatus","timestamp":1585549682.693,"event_timestamp":1585549681.194008,"result":{"route_state":"tracking","location":{"lat":35.639671325683597,"lon":139.64630126953126,"time":1585549682.693,"speed":6.304439067840576,"bearing":154.75657653808595,"altitude":80.8358154296875,"accuracyHorizontal":6.642000198364258,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4909.8701171875,"remaining_leg_duration":868.692,"step_index":1,"remaining_step_distance":1038.7218017578126,"remaining_step_duration":302.0,"state_message":"","in_tunnel":false,"predicted":2.064,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.639671325683597,"lon":139.64630126953126,"time":1585549682.693,"bearing":154.75657653808595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6396632,"lon":139.6463256,"time":1585549681.636,"speed":7.523480415344238,"bearing":152.04922485351563,"altitude":81.3499755859375,"accuracyHorizontal":7.230000019073486,"provider":"fused"},"result":true,"event_timestamp":1585549681.636749,"delta_ms":0},{"type":"getStatus","timestamp":1585549683.718,"event_timestamp":1585549682.218876,"result":{"route_state":"tracking","location":{"lat":35.63957595825195,"lon":139.6463623046875,"time":1585549683.718,"speed":7.344019889831543,"bearing":154.75657653808595,"altitude":81.3499755859375,"accuracyHorizontal":7.230000019073486,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4897.9228515625,"remaining_leg_duration":865.692,"step_index":1,"remaining_step_distance":1026.7744140625,"remaining_step_duration":299.0,"state_message":"","in_tunnel":false,"predicted":2.082,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.63957595825195,"lon":139.6463623046875,"time":1585549683.718,"bearing":154.75657653808595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6395921,"lon":139.6463705,"time":1585549682.623,"speed":7.697860240936279,"bearing":151.99798583984376,"altitude":81.05804443359375,"accuracyHorizontal":6.843999862670898,"provider":"fused"},"result":true,"event_timestamp":1585549682.624034,"delta_ms":0},{"type":"getStatus","timestamp":1585549684.733,"event_timestamp":1585549683.233496,"result":{"route_state":"tracking","location":{"lat":35.639495849609378,"lon":139.6464080810547,"time":1585549684.733,"speed":7.855103015899658,"bearing":154.75657653808595,"altitude":81.05804443359375,"accuracyHorizontal":6.843999862670898,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4888.09033203125,"remaining_leg_duration":862.692,"step_index":1,"remaining_step_distance":1016.942138671875,"remaining_step_duration":296.0,"state_message":"","in_tunnel":false,"predicted":2.11,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.639495849609378,"lon":139.6464080810547,"time":1585549684.733,"bearing":154.75657653808595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6395212,"lon":139.6464148,"time":1585549683.613,"speed":8.470562934875489,"bearing":151.96029663085938,"altitude":81.5445556640625,"accuracyHorizontal":5.9029998779296879,"provider":"fused"},"result":true,"event_timestamp":1585549683.61336,"delta_ms":0},{"type":"getStatus","timestamp":1585549685.749,"event_timestamp":1585549684.24947,"result":{"route_state":"tracking","location":{"lat":35.63939666748047,"lon":139.646484375,"time":1585549685.749,"speed":8.488980293273926,"bearing":152.51968383789063,"altitude":81.5445556640625,"accuracyHorizontal":5.9029998779296879,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4875.0927734375,"remaining_leg_duration":858.692,"step_index":1,"remaining_step_distance":1003.9443969726563,"remaining_step_duration":292.0,"state_message":"","in_tunnel":false,"predicted":2.136,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63945388793945,"lon":139.6464385986328,"time":1585549685.156,"bearing":154.75657653808595},{"lat":35.63939666748047,"lon":139.646484375,"time":1585549685.749,"bearing":152.51968383789063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.639445,"lon":139.6464631,"time":1585549684.616,"speed":9.30635929107666,"bearing":151.9557342529297,"altitude":81.55169677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549684.616461,"delta_ms":0},{"type":"getStatus","timestamp":1585549686.772,"event_timestamp":1585549685.273519,"result":{"route_state":"tracking","location":{"lat":35.63929748535156,"lon":139.64654541015626,"time":1585549686.772,"speed":9.270369529724121,"bearing":152.51968383789063,"altitude":81.55169677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4862.77734375,"remaining_leg_duration":854.692,"step_index":1,"remaining_step_distance":991.6292114257813,"remaining_step_duration":289.0,"state_message":"","in_tunnel":false,"predicted":2.156,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63929748535156,"lon":139.64654541015626,"time":1585549686.772,"bearing":152.51968383789063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6393613,"lon":139.6465157,"time":1585549685.617,"speed":9.711167335510254,"bearing":151.9844512939453,"altitude":81.338623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549685.617306,"delta_ms":0},{"type":"getStatus","timestamp":1585549687.802,"event_timestamp":1585549686.30318,"result":{"route_state":"tracking","location":{"lat":35.63919448852539,"lon":139.6466064453125,"time":1585549687.802,"speed":9.789488792419434,"bearing":152.51968383789063,"altitude":81.338623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4850.064453125,"remaining_leg_duration":851.692,"step_index":1,"remaining_step_distance":978.9163818359375,"remaining_step_duration":285.0,"state_message":"","in_tunnel":false,"predicted":2.185,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63919448852539,"lon":139.6466064453125,"time":1585549687.802,"bearing":152.51968383789063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6392807,"lon":139.6465664,"time":1585549686.62,"speed":9.632221221923829,"bearing":152.00440979003907,"altitude":81.54962158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549686.620182,"delta_ms":0},{"type":"getStatus","timestamp":1585549688.82,"event_timestamp":1585549687.32075,"result":{"route_state":"tracking","location":{"lat":35.63911437988281,"lon":139.6466522216797,"time":1585549688.82,"speed":9.797552108764649,"bearing":152.51968383789063,"altitude":81.54962158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4840.2412109375,"remaining_leg_duration":848.692,"step_index":1,"remaining_step_distance":969.0930786132813,"remaining_step_duration":282.0,"state_message":"","in_tunnel":false,"predicted":2.2,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63911437988281,"lon":139.6466522216797,"time":1585549688.82,"bearing":152.51968383789063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6392018,"lon":139.6466156,"time":1585549687.615,"speed":9.74721908569336,"bearing":151.9952392578125,"altitude":81.6412353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549687.615916,"delta_ms":0},{"type":"getStatus","timestamp":1585549689.855,"event_timestamp":1585549688.355843,"result":{"route_state":"tracking","location":{"lat":35.6390266418457,"lon":139.64671325683595,"time":1585549689.855,"speed":9.89959716796875,"bearing":154.091552734375,"altitude":81.6412353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4829.0283203125,"remaining_leg_duration":844.692,"step_index":1,"remaining_step_distance":957.8799438476563,"remaining_step_duration":279.0,"state_message":"","in_tunnel":false,"predicted":2.24,"shape_index":4,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63907241821289,"lon":139.6466827392578,"time":1585549689.32,"bearing":152.51968383789063},{"lat":35.6390266418457,"lon":139.64671325683595,"time":1585549689.855,"bearing":154.091552734375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6391229,"lon":139.6466638,"time":1585549688.619,"speed":9.36048412322998,"bearing":152.02090454101563,"altitude":81.74127197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549688.619907,"delta_ms":0},{"type":"getStatus","timestamp":1585549690.886,"event_timestamp":1585549689.387687,"result":{"route_state":"tracking","location":{"lat":35.63894271850586,"lon":139.64675903320313,"time":1585549690.886,"speed":9.66407585144043,"bearing":154.091552734375,"altitude":81.74127197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4818.82080078125,"remaining_leg_duration":841.692,"step_index":1,"remaining_step_distance":947.6727294921875,"remaining_step_duration":276.0,"state_message":"","in_tunnel":false,"predicted":2.267,"shape_index":4,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63894271850586,"lon":139.64675903320313,"time":1585549690.886,"bearing":154.091552734375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6390502,"lon":139.646708,"time":1585549689.619,"speed":9.223474502563477,"bearing":152.00735473632813,"altitude":81.865966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549689.619951,"delta_ms":0},{"type":"getStatus","timestamp":1585549691.911,"event_timestamp":1585549690.411484,"result":{"route_state":"tracking","location":{"lat":35.63887023925781,"lon":139.6468048095703,"time":1585549691.911,"speed":9.384846687316895,"bearing":154.091552734375,"altitude":81.865966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4809.75390625,"remaining_leg_duration":839.692,"step_index":1,"remaining_step_distance":938.6057739257813,"remaining_step_duration":273.0,"state_message":"","in_tunnel":false,"predicted":2.292,"shape_index":4,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63887023925781,"lon":139.6468048095703,"time":1585549691.911,"bearing":154.091552734375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6389839,"lon":139.6467468,"time":1585549690.623,"speed":7.513702869415283,"bearing":152.135498046875,"altitude":82.74786376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549690.623785,"delta_ms":0},{"type":"getStatus","timestamp":1585549692.946,"event_timestamp":1585549691.447229,"result":{"route_state":"tracking","location":{"lat":35.63882827758789,"lon":139.64683532714845,"time":1585549692.946,"speed":8.125672340393067,"bearing":154.091552734375,"altitude":82.74786376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4804.34130859375,"remaining_leg_duration":837.692,"step_index":1,"remaining_step_distance":933.193115234375,"remaining_step_duration":272.0,"state_message":"","in_tunnel":false,"predicted":2.323,"shape_index":4,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63882827758789,"lon":139.64683532714845,"time":1585549692.946,"bearing":154.091552734375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6389229,"lon":139.6467831,"time":1585549691.613,"speed":8.300763130187989,"bearing":152.9495391845703,"altitude":82.7459716796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549691.614046,"delta_ms":0},{"type":"getStatus","timestamp":1585549693.967,"event_timestamp":1585549692.468647,"result":{"route_state":"tracking","location":{"lat":35.638763427734378,"lon":139.64686584472657,"time":1585549693.967,"speed":8.183989524841309,"bearing":154.091552734375,"altitude":82.7459716796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4796.64599609375,"remaining_leg_duration":835.692,"step_index":1,"remaining_step_distance":925.497802734375,"remaining_step_duration":269.0,"state_message":"","in_tunnel":false,"predicted":2.354,"shape_index":4,"intersection_index":2,"road_name":"","key_points":[{"lat":35.638763427734378,"lon":139.64686584472657,"time":1585549693.967,"bearing":154.091552734375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6388546,"lon":139.6468239,"time":1585549692.633,"speed":8.71029281616211,"bearing":152.97891235351563,"altitude":83.1524658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549692.633286,"delta_ms":0},{"type":"getStatus","timestamp":1585549694.984,"event_timestamp":1585549693.485409,"result":{"route_state":"tracking","location":{"lat":35.63868713378906,"lon":139.64691162109376,"time":1585549694.984,"speed":8.433634757995606,"bearing":155.47471618652345,"altitude":83.1524658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4787.19677734375,"remaining_leg_duration":832.692,"step_index":1,"remaining_step_distance":916.0487060546875,"remaining_step_duration":267.0,"state_message":"","in_tunnel":false,"predicted":2.351,"shape_index":5,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63874053955078,"lon":139.64688110351563,"time":1585549694.278,"bearing":154.091552734375},{"lat":35.63868713378906,"lon":139.64691162109376,"time":1585549694.984,"bearing":155.47471618652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6387827,"lon":139.6468665,"time":1585549693.633,"speed":8.941657066345215,"bearing":153.97169494628907,"altitude":83.474853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549693.633329,"delta_ms":0},{"type":"getStatus","timestamp":1585549696.01,"event_timestamp":1585549694.511235,"result":{"route_state":"tracking","location":{"lat":35.63861083984375,"lon":139.64695739746095,"time":1585549696.01,"speed":8.699520111083985,"bearing":155.47471618652345,"altitude":83.474853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4777.74853515625,"remaining_leg_duration":830.692,"step_index":1,"remaining_step_distance":906.6002197265625,"remaining_step_duration":264.0,"state_message":"","in_tunnel":false,"predicted":2.377,"shape_index":5,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63861083984375,"lon":139.64695739746095,"time":1585549696.01,"bearing":155.47471618652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6387077,"lon":139.64691,"time":1585549694.628,"speed":9.455434799194336,"bearing":154.96302795410157,"altitude":84.425537109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549694.628243,"delta_ms":0},{"type":"getStatus","timestamp":1585549697.025,"event_timestamp":1585549695.52614,"result":{"route_state":"tracking","location":{"lat":35.63852310180664,"lon":139.64700317382813,"time":1585549697.025,"speed":9.214990615844727,"bearing":155.47471618652345,"altitude":84.425537109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4767.14599609375,"remaining_leg_duration":826.692,"step_index":1,"remaining_step_distance":895.9976806640625,"remaining_step_duration":261.0,"state_message":"","in_tunnel":false,"predicted":2.397,"shape_index":5,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63852310180664,"lon":139.64700317382813,"time":1585549697.025,"bearing":155.47471618652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6386324,"lon":139.6469521,"time":1585549695.623,"speed":8.961007118225098,"bearing":156.0135498046875,"altitude":83.76171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549695.623554,"delta_ms":0},{"type":"getStatus","timestamp":1585549698.048,"event_timestamp":1585549696.549553,"result":{"route_state":"tracking","location":{"lat":35.63844680786133,"lon":139.6470489501953,"time":1585549698.048,"speed":9.0912504196167,"bearing":155.47471618652345,"altitude":83.76171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4757.69921875,"remaining_leg_duration":824.692,"step_index":1,"remaining_step_distance":886.5512084960938,"remaining_step_duration":258.0,"state_message":"","in_tunnel":false,"predicted":2.425,"shape_index":5,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63844680786133,"lon":139.6470489501953,"time":1585549698.048,"bearing":155.47471618652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6385606,"lon":139.6469891,"time":1585549696.633,"speed":8.852533340454102,"bearing":156.00531005859376,"altitude":83.04443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549696.633553,"delta_ms":0},{"type":"getStatus","timestamp":1585549699.069,"event_timestamp":1585549697.569634,"result":{"route_state":"tracking","location":{"lat":35.63838195800781,"lon":139.64707946777345,"time":1585549699.069,"speed":8.887219429016114,"bearing":155.47471618652345,"altitude":83.04443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4749.98583984375,"remaining_leg_duration":821.692,"step_index":1,"remaining_step_distance":878.83740234375,"remaining_step_duration":256.0,"state_message":"","in_tunnel":false,"predicted":2.436,"shape_index":5,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63838195800781,"lon":139.64707946777345,"time":1585549699.069,"bearing":155.47471618652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.638487,"lon":139.6470276,"time":1585549697.622,"speed":9.093545913696289,"bearing":155.9871826171875,"altitude":82.651611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549697.622523,"delta_ms":0},{"type":"getStatus","timestamp":1585549700.086,"event_timestamp":1585549698.586784,"result":{"route_state":"tracking","location":{"lat":35.6383056640625,"lon":139.64712524414063,"time":1585549700.086,"speed":9.031864166259766,"bearing":155.47471618652345,"altitude":82.651611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4740.54052734375,"remaining_leg_duration":819.692,"step_index":1,"remaining_step_distance":869.3921508789063,"remaining_step_duration":253.0,"state_message":"","in_tunnel":false,"predicted":2.464,"shape_index":5,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6383056640625,"lon":139.64712524414063,"time":1585549700.086,"bearing":155.47471618652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6384108,"lon":139.6470664,"time":1585549698.628,"speed":8.91453742980957,"bearing":156.00938415527345,"altitude":82.731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549698.628737,"delta_ms":0},{"type":"getStatus","timestamp":1585549701.102,"event_timestamp":1585549699.60262,"result":{"route_state":"tracking","location":{"lat":35.63822555541992,"lon":139.6471710205078,"time":1585549701.102,"speed":8.943942070007325,"bearing":156.8092803955078,"altitude":82.731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4730.7080078125,"remaining_leg_duration":816.692,"step_index":1,"remaining_step_distance":859.5595703125,"remaining_step_duration":250.0,"state_message":"","in_tunnel":false,"predicted":2.474,"shape_index":6,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6383056640625,"lon":139.64712524414063,"time":1585549700.086,"bearing":155.47471618652345},{"lat":35.63822555541992,"lon":139.6471710205078,"time":1585549701.102,"bearing":156.8092803955078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6383348,"lon":139.6471062,"time":1585549699.636,"speed":9.34895133972168,"bearing":155.97866821289063,"altitude":82.5677490234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549699.636266,"delta_ms":0},{"type":"getStatus","timestamp":1585549702.125,"event_timestamp":1585549700.626163,"result":{"route_state":"tracking","location":{"lat":35.638145446777347,"lon":139.64720153808595,"time":1585549702.125,"speed":9.220684051513672,"bearing":156.8092803955078,"altitude":82.5677490234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4721.416015625,"remaining_leg_duration":813.692,"step_index":1,"remaining_step_distance":850.2678833007813,"remaining_step_duration":248.0,"state_message":"","in_tunnel":false,"predicted":2.489,"shape_index":6,"intersection_index":4,"road_name":"","key_points":[{"lat":35.638145446777347,"lon":139.64720153808595,"time":1585549702.125,"bearing":156.8092803955078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6382566,"lon":139.6471493,"time":1585549700.63,"speed":9.661209106445313,"bearing":155.98326110839845,"altitude":82.2850341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549700.630555,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6381758,"lon":139.6471917,"time":1585549701.628,"speed":9.736313819885254,"bearing":156.9848175048828,"altitude":82.470458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549701.628848,"delta_ms":0},{"type":"getStatus","timestamp":1585549703.15,"event_timestamp":1585549701.650704,"result":{"route_state":"tracking","location":{"lat":35.638057708740237,"lon":139.6472625732422,"time":1585549703.15,"speed":9.667101860046387,"bearing":156.8092803955078,"altitude":82.470458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4710.2705078125,"remaining_leg_duration":810.692,"step_index":1,"remaining_step_distance":839.1221923828125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.522,"shape_index":6,"intersection_index":4,"road_name":"","key_points":[{"lat":35.638057708740237,"lon":139.6472625732422,"time":1585549703.15,"bearing":156.8092803955078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6380958,"lon":139.6472325,"time":1585549702.624,"speed":9.535755157470704,"bearing":157.01077270507813,"altitude":81.95001220703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549702.624284,"delta_ms":0},{"type":"getStatus","timestamp":1585549704.172,"event_timestamp":1585549702.673591,"result":{"route_state":"tracking","location":{"lat":35.63797378540039,"lon":139.64730834960938,"time":1585549704.172,"speed":9.607682228088379,"bearing":156.8092803955078,"altitude":81.95001220703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4700.0517578125,"remaining_leg_duration":807.692,"step_index":1,"remaining_step_distance":828.9034423828125,"remaining_step_duration":241.0,"state_message":"","in_tunnel":false,"predicted":1.548,"shape_index":6,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63797378540039,"lon":139.64730834960938,"time":1585549704.172,"bearing":156.8092803955078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6380192,"lon":139.6472697,"time":1585549703.619,"speed":9.036833763122559,"bearing":156.07078552246095,"altitude":82.7117919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549703.619875,"delta_ms":0},{"type":"getStatus","timestamp":1585549705.196,"event_timestamp":1585549703.697519,"result":{"route_state":"tracking","location":{"lat":35.637901306152347,"lon":139.6473388671875,"time":1585549705.196,"speed":9.212686538696289,"bearing":156.8092803955078,"altitude":82.7117919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4691.5537109375,"remaining_leg_duration":804.692,"step_index":1,"remaining_step_distance":820.4053955078125,"remaining_step_duration":239.0,"state_message":"","in_tunnel":false,"predicted":1.577,"shape_index":6,"intersection_index":4,"road_name":"","key_points":[{"lat":35.637901306152347,"lon":139.6473388671875,"time":1585549705.196,"bearing":156.8092803955078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6379498,"lon":139.6473093,"time":1585549704.614,"speed":8.680639266967774,"bearing":155.03274536132813,"altitude":82.299072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549704.614888,"delta_ms":0},{"type":"getStatus","timestamp":1585549706.213,"event_timestamp":1585549704.713841,"result":{"route_state":"tracking","location":{"lat":35.63783264160156,"lon":139.64736938476563,"time":1585549706.213,"speed":8.85358715057373,"bearing":156.8092803955078,"altitude":82.299072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4683.43896484375,"remaining_leg_duration":802.692,"step_index":1,"remaining_step_distance":812.2904663085938,"remaining_step_duration":237.0,"state_message":"","in_tunnel":false,"predicted":1.599,"shape_index":6,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63783264160156,"lon":139.64736938476563,"time":1585549706.213,"bearing":156.8092803955078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6378759,"lon":139.6473513,"time":1585549705.625,"speed":9.330180168151856,"bearing":154.96128845214845,"altitude":82.6387939453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549705.625165,"delta_ms":0},{"type":"getStatus","timestamp":1585549707.234,"event_timestamp":1585549705.734907,"result":{"route_state":"tracking","location":{"lat":35.637752532958987,"lon":139.6474151611328,"time":1585549707.234,"speed":9.144240379333496,"bearing":156.9187469482422,"altitude":82.6387939453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4673.61083984375,"remaining_leg_duration":799.692,"step_index":1,"remaining_step_distance":802.4624633789063,"remaining_step_duration":234.0,"state_message":"","in_tunnel":false,"predicted":1.609,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.637813568115237,"lon":139.6473846435547,"time":1585549706.475,"bearing":156.8092803955078},{"lat":35.637752532958987,"lon":139.6474151611328,"time":1585549707.234,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6377973,"lon":139.6473953,"time":1585549706.622,"speed":9.378353118896485,"bearing":154.9966278076172,"altitude":82.53900146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549706.622637,"delta_ms":0},{"type":"getStatus","timestamp":1585549708.255,"event_timestamp":1585549706.756239,"result":{"route_state":"tracking","location":{"lat":35.63767623901367,"lon":139.6474609375,"time":1585549708.255,"speed":9.311797142028809,"bearing":156.9187469482422,"altitude":82.53900146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4664.17138671875,"remaining_leg_duration":796.692,"step_index":1,"remaining_step_distance":793.023193359375,"remaining_step_duration":231.0,"state_message":"","in_tunnel":false,"predicted":1.633,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63767623901367,"lon":139.6474609375,"time":1585549708.255,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6377172,"lon":139.6474404,"time":1585549707.637,"speed":9.42908763885498,"bearing":154.99868774414063,"altitude":82.02496337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549707.637201,"delta_ms":0},{"type":"getStatus","timestamp":1585549709.283,"event_timestamp":1585549707.784334,"result":{"route_state":"tracking","location":{"lat":35.63758850097656,"lon":139.6475067138672,"time":1585549709.283,"speed":9.415486335754395,"bearing":156.9187469482422,"altitude":82.02496337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4653.564453125,"remaining_leg_duration":793.692,"step_index":1,"remaining_step_distance":782.416015625,"remaining_step_duration":228.0,"state_message":"","in_tunnel":false,"predicted":1.646,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63758850097656,"lon":139.6475067138672,"time":1585549709.283,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6376392,"lon":139.6474833,"time":1585549708.616,"speed":9.197013854980469,"bearing":155.01429748535157,"altitude":81.43359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549708.616304,"delta_ms":0},{"type":"getStatus","timestamp":1585549710.306,"event_timestamp":1585549708.806656,"result":{"route_state":"tracking","location":{"lat":35.637508392333987,"lon":139.64755249023438,"time":1585549710.306,"speed":9.325129508972168,"bearing":156.9187469482422,"altitude":81.43359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4643.7333984375,"remaining_leg_duration":791.692,"step_index":1,"remaining_step_distance":772.5851440429688,"remaining_step_duration":225.0,"state_message":"","in_tunnel":false,"predicted":1.69,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.637508392333987,"lon":139.64755249023438,"time":1585549710.306,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6375641,"lon":139.6475246,"time":1585549709.624,"speed":8.869194984436036,"bearing":156.00831604003907,"altitude":81.5775146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549709.624848,"delta_ms":0},{"type":"getStatus","timestamp":1585549711.328,"event_timestamp":1585549709.828543,"result":{"route_state":"tracking","location":{"lat":35.6374397277832,"lon":139.6475830078125,"time":1585549711.328,"speed":9.060546875,"bearing":156.9187469482422,"altitude":81.5775146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4635.62451171875,"remaining_leg_duration":788.692,"step_index":1,"remaining_step_distance":764.4761352539063,"remaining_step_duration":223.0,"state_message":"","in_tunnel":false,"predicted":1.704,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.6374397277832,"lon":139.6475830078125,"time":1585549711.328,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6374946,"lon":139.6475637,"time":1585549710.625,"speed":8.021324157714844,"bearing":155.08572387695313,"altitude":81.2864990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549710.625769,"delta_ms":0},{"type":"getStatus","timestamp":1585549712.354,"event_timestamp":1585549710.854784,"result":{"route_state":"tracking","location":{"lat":35.637367248535159,"lon":139.64761352539063,"time":1585549712.354,"speed":8.44843864440918,"bearing":156.9187469482422,"altitude":81.2864990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4627.1181640625,"remaining_leg_duration":786.692,"step_index":1,"remaining_step_distance":755.969970703125,"remaining_step_duration":220.0,"state_message":"","in_tunnel":false,"predicted":1.729,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.637367248535159,"lon":139.64761352539063,"time":1585549712.354,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6374264,"lon":139.6476031,"time":1585549711.63,"speed":8.891182899475098,"bearing":155.9327392578125,"altitude":81.76727294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549711.631128,"delta_ms":0},{"type":"getStatus","timestamp":1585549713.38,"event_timestamp":1585549711.880519,"result":{"route_state":"tracking","location":{"lat":35.63729476928711,"lon":139.6476593017578,"time":1585549713.38,"speed":8.638147354125977,"bearing":156.9187469482422,"altitude":81.76727294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4618.0732421875,"remaining_leg_duration":783.692,"step_index":1,"remaining_step_distance":746.9251708984375,"remaining_step_duration":217.0,"state_message":"","in_tunnel":false,"predicted":1.75,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63729476928711,"lon":139.6476593017578,"time":1585549713.38,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6373533,"lon":139.6476417,"time":1585549712.621,"speed":8.453756332397461,"bearing":156.02919006347657,"altitude":81.8035888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549712.621587,"delta_ms":0},{"type":"getStatus","timestamp":1585549714.395,"event_timestamp":1585549712.895561,"result":{"route_state":"tracking","location":{"lat":35.63722229003906,"lon":139.64768981933595,"time":1585549714.395,"speed":8.574973106384278,"bearing":156.9187469482422,"altitude":81.8035888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4609.56787109375,"remaining_leg_duration":781.692,"step_index":1,"remaining_step_distance":738.4194946289063,"remaining_step_duration":215.0,"state_message":"","in_tunnel":false,"predicted":1.774,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63722229003906,"lon":139.64768981933595,"time":1585549714.395,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6372846,"lon":139.6476795,"time":1585549713.624,"speed":7.732137680053711,"bearing":156.05287170410157,"altitude":81.23388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549713.624589,"delta_ms":0},{"type":"getStatus","timestamp":1585549715.41,"event_timestamp":1585549713.910599,"result":{"route_state":"tracking","location":{"lat":35.63716506958008,"lon":139.64772033691407,"time":1585549715.41,"speed":8.034173965454102,"bearing":156.9187469482422,"altitude":81.23388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4602.6259765625,"remaining_leg_duration":779.692,"step_index":1,"remaining_step_distance":731.4774780273438,"remaining_step_duration":213.0,"state_message":"","in_tunnel":false,"predicted":1.786,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63716506958008,"lon":139.64772033691407,"time":1585549715.41,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6372213,"lon":139.6477111,"time":1585549714.625,"speed":7.524991989135742,"bearing":156.01272583007813,"altitude":79.96441650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549714.625259,"delta_ms":0},{"type":"getStatus","timestamp":1585549716.428,"event_timestamp":1585549714.928743,"result":{"route_state":"tracking","location":{"lat":35.63710403442383,"lon":139.6477508544922,"time":1585549716.428,"speed":7.670476913452148,"bearing":156.9187469482422,"altitude":79.96441650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4595.29248046875,"remaining_leg_duration":776.692,"step_index":1,"remaining_step_distance":724.1441040039063,"remaining_step_duration":211.0,"state_message":"","in_tunnel":false,"predicted":1.803,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63710403442383,"lon":139.6477508544922,"time":1585549716.428,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6371598,"lon":139.6477425,"time":1585549715.616,"speed":7.586704254150391,"bearing":156.98374938964845,"altitude":79.6263427734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549715.61714,"delta_ms":0},{"type":"getStatus","timestamp":1585549717.453,"event_timestamp":1585549715.954041,"result":{"route_state":"tracking","location":{"lat":35.63704299926758,"lon":139.64779663085938,"time":1585549717.453,"speed":7.596879482269287,"bearing":156.9187469482422,"altitude":79.6263427734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4587.4169921875,"remaining_leg_duration":774.692,"step_index":1,"remaining_step_distance":716.2689208984375,"remaining_step_duration":209.0,"state_message":"","in_tunnel":false,"predicted":1.837,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63704299926758,"lon":139.64779663085938,"time":1585549717.453,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6370966,"lon":139.6477749,"time":1585549716.63,"speed":7.617435932159424,"bearing":157.9851837158203,"altitude":79.30560302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549716.631183,"delta_ms":0},{"type":"getStatus","timestamp":1585549718.479,"event_timestamp":1585549716.97988,"result":{"route_state":"tracking","location":{"lat":35.63697052001953,"lon":139.6478271484375,"time":1585549718.479,"speed":7.624579429626465,"bearing":156.9187469482422,"altitude":79.30560302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4578.91455078125,"remaining_leg_duration":772.692,"step_index":1,"remaining_step_distance":707.7662963867188,"remaining_step_duration":206.0,"state_message":"","in_tunnel":false,"predicted":1.849,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63697052001953,"lon":139.6478271484375,"time":1585549718.479,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6370325,"lon":139.6478073,"time":1585549717.616,"speed":7.784172534942627,"bearing":157.9866485595703,"altitude":80.00946044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549717.616505,"delta_ms":0},{"type":"getStatus","timestamp":1585549719.501,"event_timestamp":1585549718.002609,"result":{"route_state":"tracking","location":{"lat":35.63690948486328,"lon":139.64785766601563,"time":1585549719.501,"speed":7.736403942108154,"bearing":156.9187469482422,"altitude":80.00946044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4571.58154296875,"remaining_leg_duration":770.692,"step_index":1,"remaining_step_distance":700.433349609375,"remaining_step_duration":204.0,"state_message":"","in_tunnel":false,"predicted":1.885,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63690948486328,"lon":139.64785766601563,"time":1585549719.501,"bearing":156.9187469482422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6369641,"lon":139.647842,"time":1585549718.611,"speed":8.197017669677735,"bearing":156.9818878173828,"altitude":80.63958740234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549718.611285,"delta_ms":0},{"type":"getStatus","timestamp":1585549720.534,"event_timestamp":1585549719.035815,"result":{"route_state":"tracking","location":{"lat":35.63683319091797,"lon":139.6479034423828,"time":1585549720.534,"speed":8.044682502746582,"bearing":156.9187469482422,"altitude":80.63958740234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4562.14404296875,"remaining_leg_duration":767.692,"step_index":1,"remaining_step_distance":690.9959716796875,"remaining_step_duration":201.0,"state_message":"","in_tunnel":false,"predicted":1.923,"shape_index":7,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63683319091797,"lon":139.6479034423828,"time":1585549720.534,"bearing":156.9187469482422}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6368946,"lon":139.6478797,"time":1585549719.616,"speed":7.8403167724609379,"bearing":156.03225708007813,"altitude":81.0867919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549719.617105,"delta_ms":0},{"type":"getStatus","timestamp":1585549721.554,"event_timestamp":1585549720.054805,"result":{"route_state":"tracking","location":{"lat":35.63676452636719,"lon":139.64793395996095,"time":1585549721.554,"speed":7.963213920593262,"bearing":156.93968200683595,"altitude":81.0867919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4554.03076171875,"remaining_leg_duration":764.692,"step_index":1,"remaining_step_distance":682.8826293945313,"remaining_step_duration":199.0,"state_message":"","in_tunnel":false,"predicted":1.938,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63679504394531,"lon":139.64791870117188,"time":1585549721.094,"bearing":156.9187469482422},{"lat":35.63676452636719,"lon":139.64793395996095,"time":1585549721.554,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6368201,"lon":139.6479355,"time":1585549720.622,"speed":11.277297973632813,"bearing":153.8120574951172,"altitude":79.67266845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549720.623111,"delta_ms":0},{"type":"getStatus","timestamp":1585549722.581,"event_timestamp":1585549721.081767,"result":{"route_state":"tracking","location":{"lat":35.63664627075195,"lon":139.6479949951172,"time":1585549722.581,"speed":10.090246200561524,"bearing":156.93968200683595,"altitude":79.67266845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4539.7548828125,"remaining_leg_duration":760.692,"step_index":1,"remaining_step_distance":668.6068115234375,"remaining_step_duration":195.0,"state_message":"","in_tunnel":false,"predicted":1.959,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63664627075195,"lon":139.6479949951172,"time":1585549722.581,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6367435,"lon":139.6479899,"time":1585549721.615,"speed":7.803665637969971,"bearing":155.22555541992188,"altitude":79.50836181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549721.615514,"delta_ms":0},{"type":"getStatus","timestamp":1585549723.604,"event_timestamp":1585549722.105206,"result":{"route_state":"tracking","location":{"lat":35.636592864990237,"lon":139.6480255126953,"time":1585549723.604,"speed":8.786637306213379,"bearing":156.93968200683595,"altitude":79.50836181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4533.20361328125,"remaining_leg_duration":758.692,"step_index":1,"remaining_step_distance":662.0554809570313,"remaining_step_duration":193.0,"state_message":"","in_tunnel":false,"predicted":1.989,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636592864990237,"lon":139.6480255126953,"time":1585549723.604,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366884,"lon":139.6480211,"time":1585549722.621,"speed":6.831298828125,"bearing":156.05035400390626,"altitude":79.2525634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549722.621508,"delta_ms":0},{"type":"getStatus","timestamp":1585549724.621,"event_timestamp":1585549723.121617,"result":{"route_state":"tracking","location":{"lat":35.63654327392578,"lon":139.64805603027345,"time":1585549724.621,"speed":7.5196123123168949,"bearing":156.93968200683595,"altitude":79.2525634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4527.03955078125,"remaining_leg_duration":757.692,"step_index":1,"remaining_step_distance":655.891357421875,"remaining_step_duration":191.0,"state_message":"","in_tunnel":false,"predicted":2.0,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63654327392578,"lon":139.64805603027345,"time":1585549724.621,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366407,"lon":139.6480448,"time":1585549723.619,"speed":6.199018478393555,"bearing":153.09300231933595,"altitude":79.95587158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549723.619241,"delta_ms":0},{"type":"getStatus","timestamp":1585549725.653,"event_timestamp":1585549724.153838,"result":{"route_state":"tracking","location":{"lat":35.636512756347659,"lon":139.6480712890625,"time":1585549725.653,"speed":6.498523712158203,"bearing":156.93968200683595,"altitude":79.95587158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4523.3740234375,"remaining_leg_duration":755.692,"step_index":1,"remaining_step_distance":652.2258911132813,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.034,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636512756347659,"lon":139.6480712890625,"time":1585549725.653,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366002,"lon":139.6480659,"time":1585549724.621,"speed":5.108980655670166,"bearing":150.15249633789063,"altitude":79.552001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549724.621852,"delta_ms":0},{"type":"getStatus","timestamp":1585549726.67,"event_timestamp":1585549725.171495,"result":{"route_state":"tracking","location":{"lat":35.63649368286133,"lon":139.6480712890625,"time":1585549726.67,"speed":5.457765102386475,"bearing":156.93968200683595,"altitude":79.552001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.42041015625,"remaining_leg_duration":755.692,"step_index":1,"remaining_step_distance":650.2719116210938,"remaining_step_duration":189.0,"state_message":"","in_tunnel":false,"predicted":2.049,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63649368286133,"lon":139.6480712890625,"time":1585549726.67,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365701,"lon":139.6480857,"time":1585549725.644,"speed":3.593148708343506,"bearing":148.20297241210938,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549725.645066,"delta_ms":0},{"type":"getStatus","timestamp":1585549727.688,"event_timestamp":1585549726.189046,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549727.688,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.044,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549727.688,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365521,"lon":139.64809639999999,"time":1585549726.629,"speed":2.5896310806274416,"bearing":152.1005859375,"altitude":79.59466552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549726.629416,"delta_ms":0},{"type":"getStatus","timestamp":1585549728.712,"event_timestamp":1585549727.212974,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549728.712,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.083,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549727.688,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365376,"lon":139.6480982,"time":1585549727.621,"speed":1.9333491325378419,"bearing":155.10861206054688,"altitude":80.03912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549727.621291,"delta_ms":0},{"type":"getStatus","timestamp":1585549729.729,"event_timestamp":1585549728.230858,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549729.729,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.108,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549728.712,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636529,"lon":139.6480972,"time":1585549728.625,"speed":1.0784529447555543,"bearing":156.32080078125,"altitude":80.5318603515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549728.625541,"delta_ms":0},{"type":"getStatus","timestamp":1585549730.763,"event_timestamp":1585549729.264954,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549730.763,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.138,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549729.729,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636526,"lon":139.648094,"time":1585549729.626,"speed":0.3470991849899292,"bearing":156.95713806152345,"altitude":80.661865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549729.626536,"delta_ms":0},{"type":"getStatus","timestamp":1585549731.827,"event_timestamp":1585549730.32831,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549731.827,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.201,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549730.763,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365257,"lon":139.6480933,"time":1585549730.622,"speed":0.7068653702735901,"bearing":155.6424560546875,"altitude":80.68316650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549730.622459,"delta_ms":0},{"type":"getStatus","timestamp":1585549732.859,"event_timestamp":1585549731.359799,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549732.859,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.237,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549731.827,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365246,"lon":139.6480965,"time":1585549731.624,"speed":0.6838762760162354,"bearing":154.77108764648438,"altitude":81.1517333984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549731.624643,"delta_ms":0},{"type":"getStatus","timestamp":1585549733.885,"event_timestamp":1585549732.386391,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549733.885,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.261,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549732.859,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365265,"lon":139.6481,"time":1585549732.633,"speed":0.34247562289237978,"bearing":117.11990356445313,"altitude":81.830810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549732.633556,"delta_ms":0},{"type":"getStatus","timestamp":1585549734.924,"event_timestamp":1585549733.425968,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549734.924,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.291,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549733.885,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365276,"lon":139.6481036,"time":1585549733.639,"speed":0.46277114748954775,"bearing":155.5349884033203,"altitude":82.31109619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549733.640188,"delta_ms":0},{"type":"getStatus","timestamp":1585549735.977,"event_timestamp":1585549734.477385,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549735.977,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.338,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549734.924,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365284,"lon":139.648108,"time":1585549734.633,"speed":0.4483400881290436,"bearing":154.498779296875,"altitude":83.0594482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549734.633642,"delta_ms":0},{"type":"getStatus","timestamp":1585549736.995,"event_timestamp":1585549735.4963,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549736.995,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.362,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549735.977,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365307,"lon":139.6481123,"time":1585549735.615,"speed":0.235947385430336,"bearing":154.1883544921875,"altitude":82.7972412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549735.615448,"delta_ms":0},{"type":"getStatus","timestamp":1585549738.03,"event_timestamp":1585549736.532481,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549738.03,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.415,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549736.995,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365355,"lon":139.648117,"time":1585549736.631,"speed":0.20364847779273988,"bearing":148.39723205566407,"altitude":83.366455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549736.631624,"delta_ms":0},{"type":"getStatus","timestamp":1585549739.085,"event_timestamp":1585549737.585303,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549739.085,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.454,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549738.03,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365413,"lon":139.6481221,"time":1585549737.631,"speed":0.4036925733089447,"bearing":46.866180419921878,"altitude":83.64813232421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549737.631952,"delta_ms":0},{"type":"getStatus","timestamp":1585549740.107,"event_timestamp":1585549738.607501,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549740.107,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.476,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549739.085,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365464,"lon":139.6481257,"time":1585549738.629,"speed":0.5493180155754089,"bearing":35.04411315917969,"altitude":83.440185546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549738.629975,"delta_ms":0},{"type":"getStatus","timestamp":1585549741.123,"event_timestamp":1585549739.624755,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549741.123,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.494,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549740.107,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365478,"lon":139.6481266,"time":1585549739.647,"speed":0.32962194085121157,"bearing":32.855857849121097,"altitude":83.6195068359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549739.647981,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365493,"lon":139.6481229,"time":1585549740.625,"speed":0.24104073643684388,"bearing":331.2851867675781,"altitude":83.93798828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549740.62624,"delta_ms":0},{"type":"getStatus","timestamp":1585549742.146,"event_timestamp":1585549740.64742,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549742.146,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.521,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549741.123,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365503,"lon":139.6481198,"time":1585549741.621,"speed":0.26355600357055666,"bearing":306.66766357421877,"altitude":83.90966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549741.622158,"delta_ms":0},{"type":"getStatus","timestamp":1585549743.177,"event_timestamp":1585549741.678655,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549743.177,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.556,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549742.146,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365522,"lon":139.6481179,"time":1585549742.633,"speed":0.2651733160018921,"bearing":314.5858154296875,"altitude":84.09222412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549742.633364,"delta_ms":0},{"type":"getStatus","timestamp":1585549744.218,"event_timestamp":1585549742.719013,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549744.218,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.585,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549743.177,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636554,"lon":139.6481151,"time":1585549743.633,"speed":0.2961498200893402,"bearing":310.57611083984377,"altitude":84.37005615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549743.633922,"delta_ms":0},{"type":"getStatus","timestamp":1585549745.251,"event_timestamp":1585549743.752643,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549745.251,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.618,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549744.218,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365536,"lon":139.6481144,"time":1585549744.622,"speed":0.3166240155696869,"bearing":154.8321075439453,"altitude":83.90472412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549744.622584,"delta_ms":0},{"type":"getStatus","timestamp":1585549746.288,"event_timestamp":1585549744.789844,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549746.288,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.666,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549745.251,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365553,"lon":139.6481128,"time":1585549745.625,"speed":0.30847710371017458,"bearing":154.34283447265626,"altitude":83.6533203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549745.62554,"delta_ms":0},{"type":"getStatus","timestamp":1585549747.336,"event_timestamp":1585549745.836624,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549747.336,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.711,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549746.288,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365583,"lon":139.648111,"time":1585549746.621,"speed":0.055796314030885699,"bearing":334.0489196777344,"altitude":82.84417724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549746.621869,"delta_ms":0},{"type":"getStatus","timestamp":1585549748.357,"event_timestamp":1585549746.858456,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549748.357,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.736,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549747.336,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365616,"lon":139.6481078,"time":1585549747.623,"speed":0.3038806915283203,"bearing":322.48931884765627,"altitude":83.44317626953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549747.623518,"delta_ms":0},{"type":"getStatus","timestamp":1585549749.391,"event_timestamp":1585549747.892527,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549749.391,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.768,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549748.357,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365624,"lon":139.6481084,"time":1585549748.62,"speed":0.18533089756965638,"bearing":154.472900390625,"altitude":83.729736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549748.621709,"delta_ms":0},{"type":"getStatus","timestamp":1585549750.447,"event_timestamp":1585549748.94823,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549750.447,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.827,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549749.391,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365637,"lon":139.6481093,"time":1585549749.621,"speed":0.17792807519435883,"bearing":153.3240966796875,"altitude":83.5404052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549749.62132,"delta_ms":0},{"type":"getStatus","timestamp":1585549751.481,"event_timestamp":1585549749.981715,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549751.481,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.86,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549750.447,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365637,"lon":139.6481111,"time":1585549750.62,"speed":0.4961176812648773,"bearing":153.8136749267578,"altitude":83.4676513671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549750.621179,"delta_ms":0},{"type":"getStatus","timestamp":1585549752.512,"event_timestamp":1585549751.013899,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549752.512,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.892,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549751.481,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365628,"lon":139.6481124,"time":1585549751.622,"speed":0.48968708515167239,"bearing":153.50970458984376,"altitude":83.8675537109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549751.622708,"delta_ms":0},{"type":"getStatus","timestamp":1585549753.565,"event_timestamp":1585549752.066536,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549753.565,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.943,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549752.512,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365638,"lon":139.6481118,"time":1585549752.626,"speed":0.15510064363479615,"bearing":152.6031036376953,"altitude":83.77093505859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549752.627093,"delta_ms":0},{"type":"getStatus","timestamp":1585549754.593,"event_timestamp":1585549753.094188,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549754.593,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.967,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549753.565,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365651,"lon":139.6481111,"time":1585549753.619,"speed":0.03553251177072525,"bearing":341.1379699707031,"altitude":83.62347412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549753.620077,"delta_ms":0},{"type":"getStatus","timestamp":1585549755.627,"event_timestamp":1585549754.127691,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549755.627,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.008,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549754.593,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365656,"lon":139.6481115,"time":1585549754.618,"speed":0.051375001668930057,"bearing":23.266395568847658,"altitude":83.78961181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549754.618251,"delta_ms":0},{"type":"getStatus","timestamp":1585549756.664,"event_timestamp":1585549755.169825,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549756.664,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.046,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549755.627,"bearing":156.93968200683595}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6365651,"lon":139.6481126,"time":1585549755.621,"speed":0.06524112820625305,"bearing":105.08483123779297,"altitude":83.740966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549755.621545,"delta_ms":0},{"type":"getStatus","timestamp":1585549757.72,"event_timestamp":1585549756.221047,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549757.72,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.099,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549756.664,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365645,"lon":139.6481137,"time":1585549756.621,"speed":0.0947779044508934,"bearing":116.99058532714844,"altitude":83.78570556640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549756.62155,"delta_ms":0},{"type":"getStatus","timestamp":1585549758.751,"event_timestamp":1585549757.252485,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549758.751,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.13,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549757.72,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365645,"lon":139.6481138,"time":1585549757.612,"speed":0.045964524149894717,"bearing":113.88139343261719,"altitude":83.5987548828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549757.612458,"delta_ms":0},{"type":"getStatus","timestamp":1585549759.79,"event_timestamp":1585549758.291218,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549759.79,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.178,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549758.751,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365644,"lon":139.6481143,"time":1585549758.615,"speed":0.045454345643520358,"bearing":109.50103759765625,"altitude":83.3936767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549758.61519,"delta_ms":0},{"type":"getStatus","timestamp":1585549760.84,"event_timestamp":1585549759.341018,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549760.84,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.225,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549759.79,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365628,"lon":139.6481157,"time":1585549759.622,"speed":0.37750673294067385,"bearing":153.85025024414063,"altitude":82.96551513671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549759.622872,"delta_ms":0},{"type":"getStatus","timestamp":1585549761.882,"event_timestamp":1585549760.382829,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549761.882,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.26,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549760.84,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365625,"lon":139.6481168,"time":1585549760.624,"speed":0.371960312128067,"bearing":153.4888916015625,"altitude":82.6337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549760.624468,"delta_ms":0},{"type":"getStatus","timestamp":1585549762.904,"event_timestamp":1585549761.405397,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549762.904,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.28,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549761.882,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365642,"lon":139.648118,"time":1585549761.618,"speed":0.14902465045452119,"bearing":112.09089660644531,"altitude":82.556884765625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549761.618995,"delta_ms":0},{"type":"getStatus","timestamp":1585549763.942,"event_timestamp":1585549762.44444,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549763.942,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.324,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549762.904,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365653,"lon":139.6481198,"time":1585549762.621,"speed":0.3164847195148468,"bearing":153.68304443359376,"altitude":82.16790771484375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585549762.621469,"delta_ms":0},{"type":"getStatus","timestamp":1585549764.994,"event_timestamp":1585549763.495008,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549764.994,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.373,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549763.942,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365645,"lon":139.6481217,"time":1585549763.617,"speed":0.48751795291900637,"bearing":153.8963623046875,"altitude":81.65130615234375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585549763.61755,"delta_ms":0},{"type":"getStatus","timestamp":1585549766.013,"event_timestamp":1585549764.514441,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549766.013,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.396,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549764.994,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365651,"lon":139.6481231,"time":1585549764.627,"speed":0.47858190536499026,"bearing":153.42971801757813,"altitude":81.6923828125,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"result":true,"event_timestamp":1585549764.627569,"delta_ms":0},{"type":"getStatus","timestamp":1585549767.041,"event_timestamp":1585549765.543674,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549767.041,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.414,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549766.013,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365679,"lon":139.648124,"time":1585549765.635,"speed":0.14470027387142182,"bearing":99.7392807006836,"altitude":81.53900146484375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585549765.635347,"delta_ms":0},{"type":"getStatus","timestamp":1585549768.086,"event_timestamp":1585549766.587385,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549768.086,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.451,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549767.041,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365713,"lon":139.6481243,"time":1585549766.631,"speed":0.22278138995170594,"bearing":18.992202758789064,"altitude":81.54302978515625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549766.632088,"delta_ms":0},{"type":"getStatus","timestamp":1585549769.108,"event_timestamp":1585549767.609358,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549769.108,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":2.477,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549768.086,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365722,"lon":139.6481239,"time":1585549767.642,"speed":0.14798682928085328,"bearing":4.367105007171631,"altitude":81.89166259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549767.643032,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365741,"lon":139.6481237,"time":1585549768.628,"speed":0.1886453628540039,"bearing":357.9545593261719,"altitude":82.4971923828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549768.62922,"delta_ms":0},{"type":"getStatus","timestamp":1585549770.137,"event_timestamp":1585549768.637744,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549770.137,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.509,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549769.108,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365698,"lon":139.6481257,"time":1585549769.626,"speed":0.5672534108161926,"bearing":151.9042510986328,"altitude":82.4385986328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549769.627134,"delta_ms":0},{"type":"getStatus","timestamp":1585549771.163,"event_timestamp":1585549769.664693,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549771.163,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.537,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549770.137,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365611,"lon":139.64813,"time":1585549770.619,"speed":1.4788331985473633,"bearing":152.8486328125,"altitude":82.7235107421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549770.619884,"delta_ms":0},{"type":"getStatus","timestamp":1585549772.195,"event_timestamp":1585549770.69651,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549772.195,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.576,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549771.163,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365421,"lon":139.6481407,"time":1585549771.624,"speed":2.84224534034729,"bearing":152.87835693359376,"altitude":82.53765869140625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549771.625211,"delta_ms":0},{"type":"getStatus","timestamp":1585549773.23,"event_timestamp":1585549771.732025,"result":{"route_state":"tracking","location":{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549773.23,"speed":4.112518310546875,"bearing":156.93968200683595,"altitude":79.8182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4518.1455078125,"remaining_leg_duration":754.692,"step_index":1,"remaining_step_distance":646.9974365234375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.606,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63646697998047,"lon":139.64808654785157,"time":1585549772.195,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365123,"lon":139.648158,"time":1585549772.624,"speed":3.6377625465393068,"bearing":152.9350128173828,"altitude":82.596435546875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549772.624975,"delta_ms":0},{"type":"getStatus","timestamp":1585549774.263,"event_timestamp":1585549772.764956,"result":{"route_state":"tracking","location":{"lat":35.63645553588867,"lon":139.64810180664063,"time":1585549774.263,"speed":3.104483127593994,"bearing":156.93968200683595,"altitude":82.596435546875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4516.431640625,"remaining_leg_duration":753.692,"step_index":1,"remaining_step_distance":645.2835693359375,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.639,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63645553588867,"lon":139.64810180664063,"time":1585549774.263,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6364767,"lon":139.6481777,"time":1585549773.623,"speed":4.034242630004883,"bearing":153.96824645996095,"altitude":82.35284423828125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549773.624143,"delta_ms":0},{"type":"getStatus","timestamp":1585549775.293,"event_timestamp":1585549773.794416,"result":{"route_state":"tracking","location":{"lat":35.636409759521487,"lon":139.6481170654297,"time":1585549775.293,"speed":3.8506813049316408,"bearing":156.93968200683595,"altitude":82.35284423828125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4511.2041015625,"remaining_leg_duration":752.692,"step_index":1,"remaining_step_distance":640.0556030273438,"remaining_step_duration":186.0,"state_message":"","in_tunnel":false,"predicted":1.67,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636409759521487,"lon":139.6481170654297,"time":1585549775.293,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364432,"lon":139.6481961,"time":1585549774.623,"speed":3.004627227783203,"bearing":153.1023712158203,"altitude":82.718994140625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549774.62384,"delta_ms":0},{"type":"getStatus","timestamp":1585549776.312,"event_timestamp":1585549774.812785,"result":{"route_state":"tracking","location":{"lat":35.63637924194336,"lon":139.6481475830078,"time":1585549776.312,"speed":3.436521530151367,"bearing":156.93968200683595,"altitude":82.718994140625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4506.9892578125,"remaining_leg_duration":751.692,"step_index":1,"remaining_step_distance":635.8409423828125,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.689,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63637924194336,"lon":139.6481475830078,"time":1585549776.312,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364211,"lon":139.6482084,"time":1585549775.615,"speed":2.1079835891723635,"bearing":153.17015075683595,"altitude":82.74969482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549775.615757,"delta_ms":0},{"type":"getStatus","timestamp":1585549777.331,"event_timestamp":1585549775.831976,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.6481475830078,"time":1585549777.331,"speed":2.717346668243408,"bearing":156.93968200683595,"altitude":82.74969482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4505.43408203125,"remaining_leg_duration":750.692,"step_index":1,"remaining_step_distance":634.2857666015625,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.716,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.6481475830078,"time":1585549777.331,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.63641,"lon":139.6482148,"time":1585549776.617,"speed":0.8723345994949341,"bearing":153.5101776123047,"altitude":83.2940673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549776.61808,"delta_ms":0},{"type":"getStatus","timestamp":1585549778.358,"event_timestamp":1585549776.859149,"result":{"route_state":"tracking","location":{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549778.358,"speed":1.5639816522598267,"bearing":156.93968200683595,"altitude":83.2940673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4505.0439453125,"remaining_leg_duration":750.692,"step_index":1,"remaining_step_distance":633.895751953125,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.741,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549778.358,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364091,"lon":139.6482151,"time":1585549777.619,"speed":0.19008807837963105,"bearing":155.09693908691407,"altitude":83.60333251953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549777.619991,"delta_ms":0},{"type":"getStatus","timestamp":1585549779.383,"event_timestamp":1585549777.883797,"result":{"route_state":"tracking","location":{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549779.383,"speed":1.5639816522598267,"bearing":156.93968200683595,"altitude":83.2940673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4505.0439453125,"remaining_leg_duration":750.692,"step_index":1,"remaining_step_distance":633.895751953125,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.764,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549778.358,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364114,"lon":139.6482137,"time":1585549778.621,"speed":0.24775320291519166,"bearing":152.82225036621095,"altitude":83.9998779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549778.621402,"delta_ms":0},{"type":"getStatus","timestamp":1585549780.413,"event_timestamp":1585549778.914222,"result":{"route_state":"tracking","location":{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549780.413,"speed":1.5639816522598267,"bearing":156.93968200683595,"altitude":83.2940673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4505.0439453125,"remaining_leg_duration":750.692,"step_index":1,"remaining_step_distance":633.895751953125,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.792,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549779.383,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364084,"lon":139.6482152,"time":1585549779.615,"speed":1.2307454347610474,"bearing":152.6898651123047,"altitude":84.01953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549779.616111,"delta_ms":0},{"type":"getStatus","timestamp":1585549781.464,"event_timestamp":1585549779.96531,"result":{"route_state":"tracking","location":{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549781.464,"speed":1.5639816522598267,"bearing":156.93968200683595,"altitude":83.2940673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4505.0439453125,"remaining_leg_duration":750.692,"step_index":1,"remaining_step_distance":633.895751953125,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.849,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63636016845703,"lon":139.6481475830078,"time":1585549780.413,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363948,"lon":139.6482231,"time":1585549780.62,"speed":2.1170060634613039,"bearing":152.87850952148438,"altitude":83.44598388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549780.62038,"delta_ms":0},{"type":"getStatus","timestamp":1585549782.492,"event_timestamp":1585549780.993005,"result":{"route_state":"tracking","location":{"lat":35.636348724365237,"lon":139.64816284179688,"time":1585549782.492,"speed":1.5977839231491089,"bearing":156.93968200683595,"altitude":83.44598388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4503.32421875,"remaining_leg_duration":750.692,"step_index":1,"remaining_step_distance":632.176025390625,"remaining_step_duration":184.0,"state_message":"","in_tunnel":false,"predicted":1.872,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636348724365237,"lon":139.64816284179688,"time":1585549782.492,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363749,"lon":139.648235,"time":1585549781.621,"speed":2.2777297496795656,"bearing":152.98008728027345,"altitude":83.9375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549781.621976,"delta_ms":0},{"type":"getStatus","timestamp":1585549783.526,"event_timestamp":1585549782.027328,"result":{"route_state":"tracking","location":{"lat":35.636314392089847,"lon":139.64816284179688,"time":1585549783.526,"speed":2.0742623805999758,"bearing":156.93968200683595,"altitude":83.9375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4499.81103515625,"remaining_leg_duration":749.692,"step_index":1,"remaining_step_distance":628.6629028320313,"remaining_step_duration":183.0,"state_message":"","in_tunnel":false,"predicted":1.905,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636314392089847,"lon":139.64816284179688,"time":1585549783.526,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363582,"lon":139.6482452,"time":1585549782.618,"speed":1.224197506904602,"bearing":153.23069763183595,"altitude":83.97265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549782.618456,"delta_ms":0},{"type":"getStatus","timestamp":1585549784.557,"event_timestamp":1585549783.057697,"result":{"route_state":"tracking","location":{"lat":35.63630294799805,"lon":139.64817810058595,"time":1585549784.557,"speed":1.611779808998108,"bearing":156.93968200683595,"altitude":83.97265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4498.1015625,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.9532470703125,"remaining_step_duration":183.0,"state_message":"","in_tunnel":false,"predicted":1.939,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63630294799805,"lon":139.64817810058595,"time":1585549784.557,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363542,"lon":139.6482469,"time":1585549783.622,"speed":1.2118457555770875,"bearing":153.04783630371095,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549783.622576,"delta_ms":0},{"type":"getStatus","timestamp":1585549785.579,"event_timestamp":1585549784.079843,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549785.579,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.957,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549785.579,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363576,"lon":139.6482438,"time":1585549784.615,"speed":0.2888818383216858,"bearing":161.09716796875,"altitude":83.55047607421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549784.615824,"delta_ms":0},{"type":"getStatus","timestamp":1585549786.595,"event_timestamp":1585549785.096179,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549786.595,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.98,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549785.579,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363639,"lon":139.6482383,"time":1585549785.619,"speed":0.4025231599807739,"bearing":319.53875732421877,"altitude":83.54376220703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549785.619236,"delta_ms":0},{"type":"getStatus","timestamp":1585549787.616,"event_timestamp":1585549786.117564,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549787.616,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.997,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549786.595,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363674,"lon":139.6482344,"time":1585549786.614,"speed":0.4731006622314453,"bearing":318.4617614746094,"altitude":83.59210205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549786.614277,"delta_ms":0},{"type":"getStatus","timestamp":1585549788.658,"event_timestamp":1585549787.158976,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549788.658,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.044,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549787.616,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363692,"lon":139.6482314,"time":1585549787.619,"speed":0.39096760749816897,"bearing":312.38330078125,"altitude":83.565185546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549787.619935,"delta_ms":0},{"type":"getStatus","timestamp":1585549789.685,"event_timestamp":1585549788.1857,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549789.685,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.066,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549788.658,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363713,"lon":139.6482299,"time":1585549788.614,"speed":0.3222907781600952,"bearing":321.2806091308594,"altitude":83.62713623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549788.614867,"delta_ms":0},{"type":"getStatus","timestamp":1585549790.722,"event_timestamp":1585549789.224406,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549790.722,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.108,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549789.685,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363727,"lon":139.6482278,"time":1585549789.618,"speed":0.2714327871799469,"bearing":314.32537841796877,"altitude":83.552001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549789.618305,"delta_ms":0},{"type":"getStatus","timestamp":1585549791.778,"event_timestamp":1585549790.278899,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549791.778,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.16,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549790.722,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363745,"lon":139.6482254,"time":1585549790.614,"speed":0.282827764749527,"bearing":314.11517333984377,"altitude":83.62451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549790.614595,"delta_ms":0},{"type":"getStatus","timestamp":1585549792.827,"event_timestamp":1585549791.328214,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549792.827,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.213,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549791.778,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363732,"lon":139.648227,"time":1585549791.621,"speed":0.26611781120300295,"bearing":152.7090301513672,"altitude":83.59912109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549791.621759,"delta_ms":0},{"type":"getStatus","timestamp":1585549793.845,"event_timestamp":1585549792.346511,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549793.845,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.224,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549792.827,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363716,"lon":139.6482292,"time":1585549792.629,"speed":0.38833269476890566,"bearing":152.91221618652345,"altitude":83.94683837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549792.629353,"delta_ms":0},{"type":"getStatus","timestamp":1585549794.883,"event_timestamp":1585549793.384265,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549794.883,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.254,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549793.845,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363712,"lon":139.648231,"time":1585549793.626,"speed":0.3834891617298126,"bearing":152.548828125,"altitude":83.83251953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549793.627097,"delta_ms":0},{"type":"getStatus","timestamp":1585549795.933,"event_timestamp":1585549794.433323,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549795.933,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.307,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549794.883,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363728,"lon":139.6482314,"time":1585549794.631,"speed":0.11118856072425842,"bearing":119.02710723876953,"altitude":83.80438232421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549794.631992,"delta_ms":0},{"type":"getStatus","timestamp":1585549796.954,"event_timestamp":1585549795.454527,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549796.954,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.323,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549795.933,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363719,"lon":139.6482356,"time":1585549795.632,"speed":1.0196205377578736,"bearing":152.7472686767578,"altitude":84.1220703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549795.632992,"delta_ms":0},{"type":"getStatus","timestamp":1585549797.988,"event_timestamp":1585549796.489879,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549797.988,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.356,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549796.954,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363722,"lon":139.6482412,"time":1585549796.622,"speed":0.9996216893196106,"bearing":152.1404571533203,"altitude":82.87481689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549796.622486,"delta_ms":0},{"type":"getStatus","timestamp":1585549799.034,"event_timestamp":1585549797.535264,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549799.034,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.412,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549797.988,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363756,"lon":139.6482445,"time":1585549797.621,"speed":0.4302559196949005,"bearing":118.71919250488281,"altitude":82.5179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549797.621291,"delta_ms":0},{"type":"getStatus","timestamp":1585549800.064,"event_timestamp":1585549798.564479,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549800.064,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.443,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549799.034,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363795,"lon":139.6482447,"time":1585549798.621,"speed":0.23668646812438966,"bearing":43.4256477355957,"altitude":82.42193603515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549798.621753,"delta_ms":0},{"type":"getStatus","timestamp":1585549801.094,"event_timestamp":1585549799.595139,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549801.094,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.473,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549800.064,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363813,"lon":139.6482441,"time":1585549799.628,"speed":0.18803663551807404,"bearing":11.869755744934082,"altitude":82.132080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549799.62883,"delta_ms":0},{"type":"getStatus","timestamp":1585549802.124,"event_timestamp":1585549800.625219,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549802.124,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":2.496,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549801.094,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363815,"lon":139.6482423,"time":1585549800.67,"speed":0.12146234512329102,"bearing":319.68060302734377,"altitude":82.29010009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549800.670726,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363806,"lon":139.6482399,"time":1585549801.637,"speed":0.15912359952926637,"bearing":263.00396728515627,"altitude":82.30474853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549801.638318,"delta_ms":0},{"type":"getStatus","timestamp":1585549803.16,"event_timestamp":1585549801.661334,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549803.16,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.523,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549802.124,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363783,"lon":139.6482397,"time":1585549802.62,"speed":0.16977810859680177,"bearing":207.36070251464845,"altitude":82.66900634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549802.620826,"delta_ms":0},{"type":"getStatus","timestamp":1585549804.198,"event_timestamp":1585549802.699154,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549804.198,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.578,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549803.16,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363762,"lon":139.6482382,"time":1585549803.624,"speed":0.22973337769508363,"bearing":209.2148895263672,"altitude":82.97503662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549803.624959,"delta_ms":0},{"type":"getStatus","timestamp":1585549805.219,"event_timestamp":1585549803.719724,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549805.219,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.595,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549804.198,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363728,"lon":139.6482381,"time":1585549804.628,"speed":0.44882163405418398,"bearing":149.05813598632813,"altitude":84.29315185546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549804.628724,"delta_ms":0},{"type":"getStatus","timestamp":1585549806.258,"event_timestamp":1585549804.759661,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549806.258,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.63,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549805.219,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363682,"lon":139.6482378,"time":1585549805.622,"speed":0.5290759801864624,"bearing":148.96844482421876,"altitude":85.7232666015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549805.622958,"delta_ms":0},{"type":"getStatus","timestamp":1585549807.308,"event_timestamp":1585549805.808804,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549807.308,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.686,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549806.258,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363642,"lon":139.6482369,"time":1585549806.621,"speed":0.2551804482936859,"bearing":149.39161682128907,"altitude":85.74798583984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549806.622047,"delta_ms":0},{"type":"getStatus","timestamp":1585549808.332,"event_timestamp":1585549806.832504,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549808.332,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.711,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549807.308,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363612,"lon":139.6482312,"time":1585549807.624,"speed":0.2545788884162903,"bearing":150.97674560546876,"altitude":86.5242919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549807.624245,"delta_ms":0},{"type":"getStatus","timestamp":1585549809.367,"event_timestamp":1585549807.868696,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549809.367,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.743,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549808.332,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363587,"lon":139.6482272,"time":1585549808.622,"speed":0.2200917899608612,"bearing":149.7257080078125,"altitude":86.5067138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549808.622621,"delta_ms":0},{"type":"getStatus","timestamp":1585549810.4,"event_timestamp":1585549808.90223,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549810.4,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.778,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549809.367,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363557,"lon":139.6482234,"time":1585549809.625,"speed":0.22202105820178986,"bearing":152.25753784179688,"altitude":87.34796142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549809.625546,"delta_ms":0},{"type":"getStatus","timestamp":1585549811.449,"event_timestamp":1585549809.949311,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549811.449,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.824,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549810.4,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363527,"lon":139.6482199,"time":1585549810.618,"speed":0.30054643750190737,"bearing":203.86387634277345,"altitude":87.23419189453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549810.619162,"delta_ms":0},{"type":"getStatus","timestamp":1585549812.469,"event_timestamp":1585549810.969915,"result":{"route_state":"tracking","location":{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549812.469,"speed":1.3486826419830323,"bearing":156.93968200683595,"altitude":83.60400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4497.31982421875,"remaining_leg_duration":748.692,"step_index":1,"remaining_step_distance":626.171630859375,"remaining_step_duration":182.0,"state_message":"","in_tunnel":false,"predicted":1.851,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.64817810058595,"time":1585549811.449,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363403,"lon":139.6482428,"time":1585549811.614,"speed":3.881568670272827,"bearing":148.79074096679688,"altitude":87.77984619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549811.614624,"delta_ms":0},{"type":"getStatus","timestamp":1585549813.504,"event_timestamp":1585549812.008015,"result":{"route_state":"tracking","location":{"lat":35.63627243041992,"lon":139.648193359375,"time":1585549813.504,"speed":2.5443992614746095,"bearing":156.93968200683595,"altitude":87.77984619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4494.43505859375,"remaining_leg_duration":747.692,"step_index":1,"remaining_step_distance":623.2869873046875,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.89,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63627243041992,"lon":139.648193359375,"time":1585549813.504,"bearing":156.93968200683595}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6363338,"lon":139.648268,"time":1585549812.617,"speed":2.7522165775299074,"bearing":148.9632568359375,"altitude":87.4962158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549812.617951,"delta_ms":0},{"type":"getStatus","timestamp":1585549814.552,"event_timestamp":1585549813.052552,"result":{"route_state":"tracking","location":{"lat":35.63626480102539,"lon":139.648193359375,"time":1585549814.552,"speed":2.5846915245056154,"bearing":156.93968200683595,"altitude":87.4962158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4493.6533203125,"remaining_leg_duration":747.692,"step_index":1,"remaining_step_distance":622.5050659179688,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.935,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63626480102539,"lon":139.648193359375,"time":1585549814.552,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363426,"lon":139.6482809,"time":1585549813.621,"speed":2.618001699447632,"bearing":147.45741271972657,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549813.62137,"delta_ms":0},{"type":"getStatus","timestamp":1585549815.577,"event_timestamp":1585549814.0783,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549815.577,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.956,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549815.577,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363567,"lon":139.6482862,"time":1585549814.618,"speed":0.8045899271965027,"bearing":148.15109252929688,"altitude":87.45928955078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549814.618374,"delta_ms":0},{"type":"getStatus","timestamp":1585549816.6,"event_timestamp":1585549815.100588,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549816.6,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.982,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549815.577,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636366,"lon":139.6482935,"time":1585549815.62,"speed":0.7587724924087524,"bearing":145.3673095703125,"altitude":85.49749755859375,"accuracyHorizontal":3.9769999980926515,"provider":"fused"},"result":true,"event_timestamp":1585549815.62102,"delta_ms":0},{"type":"getStatus","timestamp":1585549817.622,"event_timestamp":1585549816.122725,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549817.622,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.002,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549816.6,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363717,"lon":139.6483025,"time":1585549816.619,"speed":0.8415204286575317,"bearing":147.8594970703125,"altitude":85.597412109375,"accuracyHorizontal":4.054999828338623,"provider":"fused"},"result":true,"event_timestamp":1585549816.619925,"delta_ms":0},{"type":"getStatus","timestamp":1585549818.656,"event_timestamp":1585549817.156586,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549818.656,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.037,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549817.622,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363714,"lon":139.6483085,"time":1585549817.622,"speed":0.790894627571106,"bearing":148.87008666992188,"altitude":86.17193603515625,"accuracyHorizontal":4.131999969482422,"provider":"fused"},"result":true,"event_timestamp":1585549817.622555,"delta_ms":0},{"type":"getStatus","timestamp":1585549819.673,"event_timestamp":1585549818.173467,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549819.673,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.051,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549818.656,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363726,"lon":139.6483119,"time":1585549818.624,"speed":0.740548312664032,"bearing":146.95523071289063,"altitude":86.2535400390625,"accuracyHorizontal":3.996000051498413,"provider":"fused"},"result":true,"event_timestamp":1585549818.624187,"delta_ms":0},{"type":"getStatus","timestamp":1585549820.691,"event_timestamp":1585549819.19271,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549820.691,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.067,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549819.673,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363751,"lon":139.6483099,"time":1585549819.615,"speed":0.14386624097824098,"bearing":146.68727111816407,"altitude":86.895751953125,"accuracyHorizontal":3.996000051498413,"provider":"fused"},"result":true,"event_timestamp":1585549819.615908,"delta_ms":0},{"type":"getStatus","timestamp":1585549821.73,"event_timestamp":1585549820.233304,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549821.73,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.115,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549820.691,"bearing":156.93968200683595}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.636376,"lon":139.6483021,"time":1585549820.62,"speed":0.38310253620147707,"bearing":271.853759765625,"altitude":86.8206787109375,"accuracyHorizontal":3.9800000190734865,"provider":"fused"},"result":true,"event_timestamp":1585549820.620366,"delta_ms":0},{"type":"getStatus","timestamp":1585549822.788,"event_timestamp":1585549821.28887,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549822.788,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.168,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549821.73,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363748,"lon":139.6483,"time":1585549821.621,"speed":0.2465941458940506,"bearing":149.3548126220703,"altitude":86.6949462890625,"accuracyHorizontal":3.9149999618530275,"provider":"fused"},"result":true,"event_timestamp":1585549821.62161,"delta_ms":0},{"type":"getStatus","timestamp":1585549823.835,"event_timestamp":1585549822.335773,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549823.835,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.214,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549822.788,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363723,"lon":139.6482932,"time":1585549822.625,"speed":0.24305012822151185,"bearing":151.58421325683595,"altitude":87.02130126953125,"accuracyHorizontal":3.8499999046325685,"provider":"fused"},"result":true,"event_timestamp":1585549822.62592,"delta_ms":0},{"type":"getStatus","timestamp":1585549824.868,"event_timestamp":1585549823.369321,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549824.868,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.243,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549823.835,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.63637,"lon":139.6482856,"time":1585549823.63,"speed":0.3933000862598419,"bearing":232.9710693359375,"altitude":87.05712890625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549823.630285,"delta_ms":0},{"type":"getStatus","timestamp":1585549825.908,"event_timestamp":1585549824.409342,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549825.908,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.278,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549824.868,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363691,"lon":139.6482786,"time":1585549824.626,"speed":0.5233537554740906,"bearing":252.9125518798828,"altitude":87.08489990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549824.626334,"delta_ms":0},{"type":"getStatus","timestamp":1585549826.966,"event_timestamp":1585549825.466772,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549826.966,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.34,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549825.908,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363676,"lon":139.6482744,"time":1585549825.624,"speed":0.18790468573570252,"bearing":150.0614013671875,"altitude":86.53619384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549825.625075,"delta_ms":0},{"type":"getStatus","timestamp":1585549828.007,"event_timestamp":1585549826.508823,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549828.007,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.383,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549826.966,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363643,"lon":139.648268,"time":1585549826.625,"speed":0.18927313387393952,"bearing":153.4879913330078,"altitude":85.396240234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549826.625331,"delta_ms":0},{"type":"getStatus","timestamp":1585549829.055,"event_timestamp":1585549827.555795,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549829.055,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.43,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549828.007,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363619,"lon":139.6482593,"time":1585549827.628,"speed":0.4415231943130493,"bearing":239.7520751953125,"altitude":85.6025390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549827.628837,"delta_ms":0},{"type":"getStatus","timestamp":1585549830.084,"event_timestamp":1585549828.58465,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549830.084,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.456,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549829.055,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636359,"lon":139.6482487,"time":1585549828.629,"speed":0.7712843418121338,"bearing":248.65464782714845,"altitude":85.65875244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549828.629418,"delta_ms":0},{"type":"getStatus","timestamp":1585549831.117,"event_timestamp":1585549829.617552,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549831.117,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":2.488,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549830.084,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363578,"lon":139.6482439,"time":1585549829.654,"speed":0.592739462852478,"bearing":250.60980224609376,"altitude":85.67767333984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549829.654418,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363562,"lon":139.6482392,"time":1585549830.629,"speed":0.5120693445205689,"bearing":249.4457550048828,"altitude":85.3883056640625,"accuracyHorizontal":5.048999786376953,"provider":"fused"},"result":true,"event_timestamp":1585549830.629832,"delta_ms":0},{"type":"getStatus","timestamp":1585549832.151,"event_timestamp":1585549830.652436,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549832.151,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.522,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549831.117,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363559,"lon":139.6482412,"time":1585549831.621,"speed":0.19101636111736298,"bearing":235.46495056152345,"altitude":84.82989501953125,"accuracyHorizontal":5.815999984741211,"provider":"fused"},"result":true,"event_timestamp":1585549831.621845,"delta_ms":0},{"type":"getStatus","timestamp":1585549833.187,"event_timestamp":1585549831.68763,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549833.187,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.566,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549832.151,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363538,"lon":139.648243,"time":1585549832.624,"speed":0.2486179769039154,"bearing":149.1291046142578,"altitude":84.50543212890625,"accuracyHorizontal":7.3480000495910648,"provider":"fused"},"result":true,"event_timestamp":1585549832.625058,"delta_ms":0},{"type":"getStatus","timestamp":1585549834.223,"event_timestamp":1585549832.72351,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549834.223,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.599,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549833.187,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636352,"lon":139.6482446,"time":1585549833.617,"speed":0.22077323496341706,"bearing":149.05923461914063,"altitude":83.63134765625,"accuracyHorizontal":7.73199987411499,"provider":"fused"},"result":true,"event_timestamp":1585549833.617836,"delta_ms":0},{"type":"getStatus","timestamp":1585549835.264,"event_timestamp":1585549833.76517,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549835.264,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.647,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549834.223,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363491,"lon":139.6482463,"time":1585549834.622,"speed":0.6103556156158447,"bearing":148.89999389648438,"altitude":83.9849853515625,"accuracyHorizontal":9.64799976348877,"provider":"fused"},"result":true,"event_timestamp":1585549834.622604,"delta_ms":0},{"type":"getStatus","timestamp":1585549836.31,"event_timestamp":1585549834.810246,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549836.31,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.688,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549835.264,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363402,"lon":139.64825,"time":1585549835.621,"speed":1.6211867332458497,"bearing":148.95025634765626,"altitude":82.59271240234375,"accuracyHorizontal":9.64799976348877,"provider":"fused"},"result":true,"event_timestamp":1585549835.621512,"delta_ms":0},{"type":"getStatus","timestamp":1585549837.331,"event_timestamp":1585549835.83304,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549837.331,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.71,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549836.31,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363134,"lon":139.6482587,"time":1585549836.618,"speed":2.8013899326324465,"bearing":155.80714416503907,"altitude":81.447021484375,"accuracyHorizontal":8.6899995803833,"provider":"fused"},"result":true,"event_timestamp":1585549836.619116,"delta_ms":0},{"type":"getStatus","timestamp":1585549838.367,"event_timestamp":1585549836.869741,"result":{"route_state":"tracking","location":{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549838.367,"speed":2.3331780433654787,"bearing":156.93968200683595,"altitude":87.2108154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4492.328125,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":621.1797485351563,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.749,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63625717163086,"lon":139.64820861816407,"time":1585549837.331,"bearing":156.93968200683595}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6362814,"lon":139.6482668,"time":1585549837.615,"speed":3.041635036468506,"bearing":157.9348602294922,"altitude":82.164794921875,"accuracyHorizontal":7.184000015258789,"provider":"fused"},"result":true,"event_timestamp":1585549837.615478,"delta_ms":0},{"type":"getStatus","timestamp":1585549839.413,"event_timestamp":1585549837.913916,"result":{"route_state":"tracking","location":{"lat":35.63623809814453,"lon":139.64820861816407,"time":1585549839.413,"speed":2.8254382610321047,"bearing":156.93968200683595,"altitude":82.164794921875,"accuracyHorizontal":7.184000015258789,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4490.3779296875,"remaining_leg_duration":746.692,"step_index":1,"remaining_step_distance":619.2296142578125,"remaining_step_duration":180.0,"state_message":"","in_tunnel":false,"predicted":1.798,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63623809814453,"lon":139.64820861816407,"time":1585549839.413,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362544,"lon":139.648272,"time":1585549838.62,"speed":1.7424317598342896,"bearing":158.22537231445313,"altitude":82.1456298828125,"accuracyHorizontal":6.36299991607666,"provider":"fused"},"result":true,"event_timestamp":1585549838.620231,"delta_ms":0},{"type":"getStatus","timestamp":1585549840.433,"event_timestamp":1585549838.934571,"result":{"route_state":"tracking","location":{"lat":35.63621139526367,"lon":139.64822387695313,"time":1585549840.433,"speed":2.2658920288085939,"bearing":156.93968200683595,"altitude":82.1456298828125,"accuracyHorizontal":6.36299991607666,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4487.10205078125,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":615.9539184570313,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":1.813,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63621139526367,"lon":139.64822387695313,"time":1585549840.433,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362409,"lon":139.6482718,"time":1585549839.613,"speed":0.9726998805999756,"bearing":158.24142456054688,"altitude":80.702392578125,"accuracyHorizontal":5.541999816894531,"provider":"fused"},"result":true,"event_timestamp":1585549839.613576,"delta_ms":0},{"type":"getStatus","timestamp":1585549841.453,"event_timestamp":1585549839.954369,"result":{"route_state":"tracking","location":{"lat":35.636207580566409,"lon":139.64822387695313,"time":1585549841.453,"speed":1.5159986019134522,"bearing":156.93968200683595,"altitude":80.702392578125,"accuracyHorizontal":5.541999816894531,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4486.7109375,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":615.5628662109375,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":1.84,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636207580566409,"lon":139.64822387695313,"time":1585549841.453,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636235,"lon":139.6482649,"time":1585549840.614,"speed":0.9657876491546631,"bearing":158.34085083007813,"altitude":80.60479736328125,"accuracyHorizontal":4.7210001945495609,"provider":"fused"},"result":true,"event_timestamp":1585549840.6145189,"delta_ms":0},{"type":"getStatus","timestamp":1585549842.478,"event_timestamp":1585549840.978362,"result":{"route_state":"tracking","location":{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549842.478,"speed":1.2109559774398804,"bearing":156.93968200683595,"altitude":80.60479736328125,"accuracyHorizontal":4.7210001945495609,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.92822265625,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":614.7797241210938,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":1.864,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549842.478,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362319,"lon":139.6482572,"time":1585549841.614,"speed":0.23539113998413087,"bearing":158.747314453125,"altitude":81.06298828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549841.614205,"delta_ms":0},{"type":"getStatus","timestamp":1585549843.498,"event_timestamp":1585549841.998308,"result":{"route_state":"tracking","location":{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549843.498,"speed":1.2109559774398804,"bearing":156.93968200683595,"altitude":80.60479736328125,"accuracyHorizontal":4.7210001945495609,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.92822265625,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":614.7797241210938,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":1.884,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549842.478,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362315,"lon":139.6482493,"time":1585549842.623,"speed":0.19491465389728547,"bearing":157.51979064941407,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549842.623865,"delta_ms":0},{"type":"getStatus","timestamp":1585549844.539,"event_timestamp":1585549843.040058,"result":{"route_state":"tracking","location":{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549844.539,"speed":1.2109559774398804,"bearing":156.93968200683595,"altitude":80.60479736328125,"accuracyHorizontal":4.7210001945495609,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.92822265625,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":614.7797241210938,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":1.916,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549843.498,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362267,"lon":139.6482513,"time":1585549843.617,"speed":0.7477787733078003,"bearing":157.69943237304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549843.618004,"delta_ms":0},{"type":"getStatus","timestamp":1585549845.585,"event_timestamp":1585549844.085928,"result":{"route_state":"tracking","location":{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549845.585,"speed":1.2109559774398804,"bearing":156.93968200683595,"altitude":80.60479736328125,"accuracyHorizontal":4.7210001945495609,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.92822265625,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":614.7797241210938,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":1.968,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549844.539,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362219,"lon":139.6482544,"time":1585549844.62,"speed":0.25075763463974,"bearing":158.79354858398438,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549844.620711,"delta_ms":0},{"type":"getStatus","timestamp":1585549846.646,"event_timestamp":1585549845.147199,"result":{"route_state":"tracking","location":{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549846.646,"speed":1.2109559774398804,"bearing":156.93968200683595,"altitude":80.60479736328125,"accuracyHorizontal":4.7210001945495609,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.92822265625,"remaining_leg_duration":745.692,"step_index":1,"remaining_step_distance":614.7797241210938,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":2.026,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636199951171878,"lon":139.64822387695313,"time":1585549845.585,"bearing":156.93968200683595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362178,"lon":139.6482564,"time":1585549845.626,"speed":0.8212451934814453,"bearing":158.8082733154297,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549845.626515,"delta_ms":0},{"type":"getStatus","timestamp":1585549847.705,"event_timestamp":1585549846.205846,"result":{"route_state":"tracking","location":{"lat":35.63619613647461,"lon":139.64822387695313,"time":1585549847.705,"speed":0.6365987062454224,"bearing":156.93968200683595,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.53564453125,"remaining_leg_duration":744.692,"step_index":1,"remaining_step_distance":614.3875732421875,"remaining_step_duration":179.0,"state_message":"","in_tunnel":false,"predicted":2.079,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63619613647461,"lon":139.64822387695313,"time":1585549847.705,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362091,"lon":139.6482606,"time":1585549846.63,"speed":0.8298566341400147,"bearing":159.99407958984376,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549846.630738,"delta_ms":0},{"type":"getStatus","timestamp":1585549848.752,"event_timestamp":1585549847.252594,"result":{"route_state":"tracking","location":{"lat":35.63618850708008,"lon":139.6482391357422,"time":1585549848.752,"speed":0.8065642714500427,"bearing":156.93968200683595,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4484.216796875,"remaining_leg_duration":744.692,"step_index":1,"remaining_step_distance":613.0684814453125,"remaining_step_duration":178.0,"state_message":"","in_tunnel":false,"predicted":2.122,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63618850708008,"lon":139.6482391357422,"time":1585549848.752,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361993,"lon":139.6482648,"time":1585549847.626,"speed":1.1746275424957276,"bearing":156.92312622070313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549847.627135,"delta_ms":0},{"type":"getStatus","timestamp":1585549849.772,"event_timestamp":1585549848.272508,"result":{"route_state":"tracking","location":{"lat":35.63617706298828,"lon":139.64825439453126,"time":1585549849.772,"speed":1.0082762241363526,"bearing":156.93968200683595,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4482.49755859375,"remaining_leg_duration":744.692,"step_index":1,"remaining_step_distance":611.3493041992188,"remaining_step_duration":178.0,"state_message":"","in_tunnel":false,"predicted":2.146,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63617706298828,"lon":139.64825439453126,"time":1585549849.772,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361868,"lon":139.6482719,"time":1585549848.631,"speed":1.40701162815094,"bearing":150.00650024414063,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549848.63165,"delta_ms":0},{"type":"getStatus","timestamp":1585549850.808,"event_timestamp":1585549849.30827,"result":{"route_state":"tracking","location":{"lat":35.636165618896487,"lon":139.64825439453126,"time":1585549850.808,"speed":1.2572895288467408,"bearing":156.93968200683595,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4481.33056640625,"remaining_leg_duration":743.692,"step_index":1,"remaining_step_distance":610.1821899414063,"remaining_step_duration":178.0,"state_message":"","in_tunnel":false,"predicted":2.177,"shape_index":8,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636165618896487,"lon":139.64825439453126,"time":1585549850.808,"bearing":156.93968200683595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361737,"lon":139.6482829,"time":1585549849.634,"speed":1.5568552017211915,"bearing":135.2161865234375,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549849.63451,"delta_ms":0},{"type":"getStatus","timestamp":1585549851.846,"event_timestamp":1585549850.347351,"result":{"route_state":"tracking","location":{"lat":35.636146545410159,"lon":139.64825439453126,"time":1585549851.846,"speed":1.5154473781585694,"bearing":158.37380981445313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4479.3095703125,"remaining_leg_duration":743.692,"step_index":1,"remaining_step_distance":608.1615600585938,"remaining_step_duration":177.0,"state_message":"","in_tunnel":false,"predicted":2.212,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[{"lat":35.63615417480469,"lon":139.64825439453126,"time":1585549851.43,"bearing":156.93968200683595},{"lat":35.636146545410159,"lon":139.64825439453126,"time":1585549851.846,"bearing":158.37380981445313}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361627,"lon":139.6482982,"time":1585549850.632,"speed":1.7313748598098755,"bearing":113.39159393310547,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549850.634813,"delta_ms":2},{"type":"getStatus","timestamp":1585549852.887,"event_timestamp":1585549851.387951,"result":{"route_state":"tracking","location":{"lat":35.6361198425293,"lon":139.6482696533203,"time":1585549852.887,"speed":1.6985158920288087,"bearing":158.37380981445313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4476.09619140625,"remaining_leg_duration":742.692,"step_index":1,"remaining_step_distance":604.9481201171875,"remaining_step_duration":176.0,"state_message":"","in_tunnel":false,"predicted":2.255,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6361198425293,"lon":139.6482696533203,"time":1585549852.887,"bearing":158.37380981445313}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361573,"lon":139.6483202,"time":1585549851.635,"speed":2.026839256286621,"bearing":90.01643371582031,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549851.6355,"delta_ms":0},{"type":"getStatus","timestamp":1585549853.919,"event_timestamp":1585549852.420659,"result":{"route_state":"tracking","location":{"lat":35.63610076904297,"lon":139.64828491210938,"time":1585549853.919,"speed":1.8507472276687623,"bearing":158.37380981445313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4473.60498046875,"remaining_leg_duration":741.692,"step_index":1,"remaining_step_distance":602.4564819335938,"remaining_step_duration":175.0,"state_message":"","in_tunnel":false,"predicted":2.284,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[{"lat":35.63610076904297,"lon":139.64828491210938,"time":1585549853.919,"bearing":158.37380981445313}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636161,"lon":139.6483595,"time":1585549852.628,"speed":4.190542221069336,"bearing":80.94646453857422,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549852.628546,"delta_ms":0},{"type":"getStatus","timestamp":1585549854.942,"event_timestamp":1585549853.443335,"result":{"route_state":"tracking","location":{"lat":35.636085510253909,"lon":139.64830017089845,"time":1585549854.942,"speed":3.1589982509613039,"bearing":158.37380981445313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"","in_tunnel":false,"predicted":2.314,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[{"lat":35.636085510253909,"lon":139.64830017089845,"time":1585549854.942,"bearing":158.37380981445313}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361695,"lon":139.6484187,"time":1585549853.629,"speed":4.434998512268066,"bearing":82.98773193359375,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549853.630073,"delta_ms":0},{"type":"getStatus","timestamp":1585549855.976,"event_timestamp":1585549854.47686,"result":{"route_state":"tracking","location":{"lat":35.636085510253909,"lon":139.64830017089845,"time":1585549855.976,"speed":4.04805850982666,"bearing":158.37380981445313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"","in_tunnel":false,"predicted":2.347,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[{"lat":35.636085510253909,"lon":139.64830017089845,"time":1585549854.942,"bearing":158.37380981445313}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361762,"lon":139.648475,"time":1585549854.655,"speed":3.929631471633911,"bearing":83.01557922363281,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549854.655622,"delta_ms":0},{"type":"getStatus","timestamp":1585549856.998,"event_timestamp":1585549855.500361,"result":{"route_state":"tracking","location":{"lat":35.636085510253909,"lon":139.64830017089845,"time":1585549856.998,"speed":4.04805850982666,"bearing":158.37380981445313,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"","in_tunnel":false,"predicted":2.343,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[{"lat":35.636085510253909,"lon":139.64830017089845,"time":1585549855.976,"bearing":158.37380981445313}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6361821,"lon":139.6485197,"time":1585549855.624,"speed":2.9576051235198976,"bearing":82.04651641845703,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549855.624596,"delta_ms":0},{"type":"getStatus","timestamp":1585549858.042,"event_timestamp":1585549856.548125,"result":{"route_state":"tracking","location":{"lat":35.63618469238281,"lon":139.64862060546876,"time":1585549858.042,"speed":3.620152235031128,"bearing":84.29085540771485,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6361879,"lon":139.6485566,"time":1585549856.643,"speed":3.404212236404419,"bearing":81.96453094482422,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549856.644045,"delta_ms":0},{"type":"getStatus","timestamp":1585549859.098,"event_timestamp":1585549857.599774,"result":{"route_state":"tracking","location":{"lat":35.63618469238281,"lon":139.6486358642578,"time":1585549859.098,"speed":3.554564952850342,"bearing":84.29085540771485,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6361931,"lon":139.6485864,"time":1585549857.643,"speed":1.4160388708114625,"bearing":82.19881439208985,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549857.643486,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361955,"lon":139.6485979,"time":1585549858.623,"speed":1.3618155717849732,"bearing":82.01061248779297,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549858.623336,"delta_ms":0},{"type":"getStatus","timestamp":1585549860.135,"event_timestamp":1585549858.636796,"result":{"route_state":"tracking","location":{"lat":35.63620376586914,"lon":139.64886474609376,"time":1585549860.135,"speed":1.7070821523666382,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361999,"lon":139.6486231,"time":1585549859.615,"speed":3.5920393466949465,"bearing":80.9110336303711,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549859.615376,"delta_ms":0},{"type":"getStatus","timestamp":1585549861.184,"event_timestamp":1585549859.685276,"result":{"route_state":"offRoute","location":{"lat":35.63620376586914,"lon":139.64886474609376,"time":1585549861.184,"speed":2.7891998291015627,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4471.466796875,"remaining_leg_duration":740.692,"step_index":1,"remaining_step_distance":600.3185424804688,"remaining_step_duration":175.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":9,"intersection_index":7,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585549859.742327,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":12},{"type":"updateLocation","location":{"lat":35.6362076,"lon":139.64867,"time":1585549860.671,"speed":3.8999297618865969,"bearing":79.97718811035156,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549860.672085,"delta_ms":0},{"type":"getStatus","timestamp":1585549862.239,"event_timestamp":1585549860.74023,"result":{"route_state":"invalid","location":{"lat":35.63620376586914,"lon":139.64886474609376,"time":1585549862.239,"speed":3.5663182735443117,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4939.526,\"duration\":824.921,\"geometry\":\"u}`~bA_unjiG{AuZ{Aia@{AwXgDun@_Ccf@qCwl@mEku@dZcQdZcQrUgNxWcQbViM|TkKfNuEnNuDhWqH|^iLnh@gOxGyBzj@ce@lPiMvH}@xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":824.921,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4939.526,\"duration\":824.921,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":402.0,\"duration\":83.239,\"geometry\":\"u}`~bA_unjiG{AuZ{Aia@{AwXgDun@_Ccf@qCwl@mEku@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.648865,35.636204],\"bearing_before\":0.0,\"bearing_after\":83.0,\"instruction\":\"東方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":402.0,\"announcement\":\"東方向です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e東方向です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":338.1,\"announcement\":\"300 メートル先、向天神橋を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、向天神橋を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":72.4,\"announcement\":\"向天神橋を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e向天神橋を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":402.0,\"primary\":{\"text\":\"向天神橋\",\"components\":[{\"text\":\"向天神橋\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":83.239,\"intersections\":[{\"location\":[139.648865,35.636204],\"bearings\":[83],\"entry\":[true],\"out\":0},{\"location\":[139.649307,35.63625],\"bearings\":[84,169,263],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.649857,35.636295],\"bearings\":[82,170,264],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.650269,35.636341],\"bearings\":[82,169,262,351],\"entry\":[true,true,false,false],\"in\":2,\"out\":0},{\"location\":[139.651031,35.636425],\"bearings\":[83,262,351],\"entry\":[true,false,false],\"in\":1,\"out\":0},{\"location\":[139.651657,35.63649],\"bearings\":[83,173,263,353],\"entry\":[true,true,false,true],\"in\":2,\"out\":0},{\"location\":[139.65239,35.636562],\"bearings\":[82,263,352],\"entry\":[true,false,true],\"in\":1,\"out\":0}]},{\"distance\":687.0,\"duration\":187.759,\"geometry\":\"qza~bAugwjiGdZcQdZcQrUgNxWcQbViM|TkKfNuEnNuDhWqH|^iLnh@gOxGyBzj@ce@lPiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.653259,35.636665],\"bearing_before\":82.0,\"bearing_after\":152.0,\"instruction\":\"向天神橋を右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":667.0,\"announcement\":\"700 メートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":256.1,\"announcement\":\"300 メートル先、駒沢を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、駒沢を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":54.9,\"announcement\":\"駒沢を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e駒沢を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":687.0,\"primary\":{\"text\":\"駒沢\",\"components\":[{\"text\":\"駒沢\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":187.759,\"intersections\":[{\"location\":[139.653259,35.636665],\"bearings\":[82,152,262,329],\"entry\":[true,true,false,true],\"in\":2,\"out\":1},{\"location\":[139.653549,35.63623],\"bearings\":[152,245,332],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.653839,35.635796],\"bearings\":[56,151,237,332],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.654083,35.635433],\"bearings\":[56,149,237,331],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.654602,35.634666],\"bearings\":[110,155,333],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.6548,35.634315],\"bearings\":[56,160,237,335],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.654907,35.634071],\"bearings\":[63,163,340],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.654999,35.633823],\"bearings\":[56,162,229,343],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.655151,35.633434],\"bearings\":[68,161,246,342],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.655365,35.632923],\"bearings\":[63,162,249,341],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.655624,35.632259],\"bearings\":[86,161,342],\"entry\":[false,true,false],\"in\":2,\"out\":1},{\"location\":[139.655685,35.632118],\"bearings\":[55,145,235,341],\"entry\":[false,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.656296,35.631416],\"bearings\":[58,146,238,325],\"entry\":[true,true,true,false],\"in\":3,\"out\":1}]},{\"distance\":3376.0,\"duration\":411.897,\"geometry\":\"aaw}bAws}jiGvH}@xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656525,35.631138],\"bearing_before\":146.0,\"bearing_after\":254.0,\"instruction\":\"駒沢を右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3356.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":573.7,\"announcement\":\"600 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e600 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":122.9,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3376.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":122.9,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":411.897,\"intersections\":[{\"location\":[139.656525,35.631138],\"bearings\":[73,163,171,251,326],\"entry\":[true,true,true,false,false],\"in\":4,\"out\":2},{\"location\":[139.656555,35.630981],\"bearings\":[0,75,180,254,351],\"entry\":[true,false,true,true,false],\"in\":4,\"out\":3},{\"location\":[139.65596,35.63084],\"bearings\":[74,163,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.655441,35.630711],\"bearings\":[73,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654648,35.630508],\"bearings\":[73,258],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654541,35.630489],\"bearings\":[78,172,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.654205,35.630405],\"bearings\":[73,254],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.653809,35.630314],\"bearings\":[74,175,248,282,283],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"slight right\"]}]},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":71.184,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.4,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.4,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":71.184,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.435,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.7,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.7,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.435,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.624,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.624,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[40.4,50.0,37.6,69.7,57.1,66.8,79.5,55.1,55.1,46.0,51.4,46.1,43.0,28.8,28.8,45.5,60.1,77.5,16.7,95.7,37.3,17.6,56.1,49.1,75.2,9.9,31.8,37.3,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[6.604,6.423,4.837,10.448,15.801,12.648,14.314,11.012,9.01,5.519,6.604,5.928,6.729,9.44,9.431,10.229,12.726,12.135,1.499,24.604,14.912,1.587,2.766,2.422,3.71,0.488,1.567,1.84,2.226,2.715,1.706,3.475,0.292,4.148,0.356,0.909,4.14,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.092,7.668,4.37,7.049,12.214,8.105,8.869,4.419,0.959,0.23,2.046,6.097,0.371,4.311,2.755,3.214,10.342,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.307,6.001,19.308,11.535,15.172,7.748,8.877,1.205,1.415,11.044,3.527,0.629,0.45,6.6,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6488647,35.6362038;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"82.74601,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"14yX7xV_OckoV40gKMNNvclqIgq-9rv1SrOsXwfpctAPj4Yiiv7gOg\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585549860.811038,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4935.48193359375,"remaining_leg_duration":824.920999999,"step_index":0,"remaining_step_distance":400.92523193359377,"remaining_step_duration":83.239,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":20},{"type":"updateLocation","location":{"lat":35.6362186,"lon":139.6487308,"time":1585549861.642,"speed":5.439152240753174,"bearing":79.91291046142578,"altitude":73.5999984741211,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549861.642869,"delta_ms":0},{"type":"getStatus","timestamp":1585549863.28,"event_timestamp":1585549861.780735,"result":{"route_state":"tracking","location":{"lat":35.63620376586914,"lon":139.64886474609376,"time":1585549863.28,"speed":4.865316867828369,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4935.48193359375,"remaining_leg_duration":824.920999999,"step_index":0,"remaining_step_distance":400.92523193359377,"remaining_step_duration":83.0,"state_message":"","in_tunnel":false,"predicted":1.638,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"東方向です","announcement":"東方向です","remaining_step_distance":400.92523193359377,"index":0},"banner_instruction":{"primary":{"text":"向天神橋","type":"turn","modifier":"right","components":[{"type":"text","text":"向天神橋"}]},"remaining_step_distance":400.92523193359377,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362292,"lon":139.6488062,"time":1585549862.627,"speed":6.196996212005615,"bearing":80.96672058105469,"altitude":73.5999984741211,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549862.627488,"delta_ms":0},{"type":"getStatus","timestamp":1585549864.317,"event_timestamp":1585549862.81787,"result":{"route_state":"tracking","location":{"lat":35.636207580566409,"lon":139.64891052246095,"time":1585549864.317,"speed":5.988403797149658,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4931.3173828125,"remaining_leg_duration":823.920999999,"step_index":0,"remaining_step_distance":396.7607116699219,"remaining_step_duration":82.0,"state_message":"","in_tunnel":false,"predicted":1.69,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.636207580566409,"lon":139.64891052246095,"time":1585549864.317,"bearing":82.74600982666016}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362381,"lon":139.648888,"time":1585549863.658,"speed":7.129110336303711,"bearing":81.96553802490235,"altitude":73.5999984741211,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549863.658395,"delta_ms":0},{"type":"getStatus","timestamp":1585549865.34,"event_timestamp":1585549863.841118,"result":{"route_state":"tracking","location":{"lat":35.6362190246582,"lon":139.64901733398438,"time":1585549865.34,"speed":6.997525215148926,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4921.57275390625,"remaining_leg_duration":821.920999999,"step_index":0,"remaining_step_distance":387.01593017578127,"remaining_step_duration":80.0,"state_message":"","in_tunnel":false,"predicted":1.682,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6362190246582,"lon":139.64901733398438,"time":1585549865.34,"bearing":82.74600982666016}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362471,"lon":139.6489738,"time":1585549864.63,"speed":7.254194736480713,"bearing":81.99388122558594,"altitude":73.5999984741211,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549864.630953,"delta_ms":0},{"type":"getStatus","timestamp":1585549866.368,"event_timestamp":1585549864.869608,"result":{"route_state":"tracking","location":{"lat":35.636226654052737,"lon":139.64910888671876,"time":1585549866.368,"speed":7.2907938957214359,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4913.2470703125,"remaining_leg_duration":819.920999999,"step_index":0,"remaining_step_distance":378.6902770996094,"remaining_step_duration":79.0,"state_message":"","in_tunnel":false,"predicted":1.738,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.636226654052737,"lon":139.64910888671876,"time":1585549866.368,"bearing":82.74600982666016}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362574,"lon":139.6490726,"time":1585549865.621,"speed":9.082658767700196,"bearing":81.953857421875,"altitude":73.5999984741211,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549865.62174,"delta_ms":0},{"type":"getStatus","timestamp":1585549867.405,"event_timestamp":1585549865.905872,"result":{"route_state":"tracking","location":{"lat":35.6362419128418,"lon":139.64923095703126,"time":1585549867.405,"speed":8.707282066345215,"bearing":82.74600982666016,"altitude":73.5999984741211,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4902.07861328125,"remaining_leg_duration":817.920999999,"step_index":0,"remaining_step_distance":367.52191162109377,"remaining_step_duration":76.0,"state_message":"","in_tunnel":false,"predicted":1.784,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6362419128418,"lon":139.64923095703126,"time":1585549867.405,"bearing":82.74600982666016}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362691,"lon":139.649184,"time":1585549866.622,"speed":9.497682571411133,"bearing":81.99044799804688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549866.626085,"delta_ms":3},{"type":"getStatus","timestamp":1585549868.446,"event_timestamp":1585549866.947215,"result":{"route_state":"tracking","location":{"lat":35.636253356933597,"lon":139.6493682861328,"time":1585549868.446,"speed":9.39589786529541,"bearing":84.1454849243164,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4889.58740234375,"remaining_leg_duration":814.920999999,"step_index":0,"remaining_step_distance":355.0304260253906,"remaining_step_duration":74.0,"state_message":"","in_tunnel":false,"predicted":1.824,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63624954223633,"lon":139.64930725097657,"time":1585549867.984,"bearing":82.74600982666016},{"lat":35.636253356933597,"lon":139.6493682861328,"time":1585549868.446,"bearing":84.1454849243164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362818,"lon":139.6492958,"time":1585549867.655,"speed":9.510772705078125,"bearing":82.00064849853516,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549867.655391,"delta_ms":0},{"type":"getStatus","timestamp":1585549869.472,"event_timestamp":1585549867.972981,"result":{"route_state":"tracking","location":{"lat":35.63626480102539,"lon":139.64950561523438,"time":1585549869.472,"speed":9.592233657836914,"bearing":84.1454849243164,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4877.09765625,"remaining_leg_duration":812.920999999,"step_index":0,"remaining_step_distance":342.54071044921877,"remaining_step_duration":71.0,"state_message":"","in_tunnel":false,"predicted":1.817,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63626480102539,"lon":139.64950561523438,"time":1585549869.472,"bearing":84.1454849243164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362928,"lon":139.6494065,"time":1585549868.714,"speed":9.979240417480469,"bearing":82.00116729736328,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549868.714517,"delta_ms":0},{"type":"getStatus","timestamp":1585549870.493,"event_timestamp":1585549868.993655,"result":{"route_state":"tracking","location":{"lat":35.63627243041992,"lon":139.6496124267578,"time":1585549870.493,"speed":9.909771919250489,"bearing":84.1454849243164,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4867.39697265625,"remaining_leg_duration":810.920999999,"step_index":0,"remaining_step_distance":332.8398742675781,"remaining_step_duration":69.0,"state_message":"","in_tunnel":false,"predicted":1.779,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"300 メートル先、向天神橋を右折です","announcement":"300 メートル先、向天神橋を右折です","remaining_step_distance":338.1000061035156,"index":1},"key_points":[{"lat":35.63627243041992,"lon":139.6496124267578,"time":1585549870.493,"bearing":84.1454849243164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363035,"lon":139.6495169,"time":1585549869.63,"speed":10.219656944274903,"bearing":82.99633026123047,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549869.631177,"delta_ms":0},{"type":"getStatus","timestamp":1585549871.521,"event_timestamp":1585549870.021936,"result":{"route_state":"tracking","location":{"lat":35.63628387451172,"lon":139.6497344970703,"time":1585549871.521,"speed":10.272418975830079,"bearing":84.1454849243164,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4856.28173828125,"remaining_leg_duration":808.920999999,"step_index":0,"remaining_step_distance":321.7246398925781,"remaining_step_duration":67.0,"state_message":"","in_tunnel":false,"predicted":1.891,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63628387451172,"lon":139.6497344970703,"time":1585549871.521,"bearing":84.1454849243164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363136,"lon":139.6496282,"time":1585549870.621,"speed":9.409066200256348,"bearing":82.03626251220703,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549870.621753,"delta_ms":0},{"type":"getStatus","timestamp":1585549872.547,"event_timestamp":1585549871.047755,"result":{"route_state":"tracking","location":{"lat":35.63629150390625,"lon":139.6498260498047,"time":1585549872.547,"speed":9.728157997131348,"bearing":84.1454849243164,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4847.955078125,"remaining_leg_duration":806.920999999,"step_index":0,"remaining_step_distance":313.3982238769531,"remaining_step_duration":65.0,"state_message":"","in_tunnel":false,"predicted":1.926,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63629150390625,"lon":139.6498260498047,"time":1585549872.547,"bearing":84.1454849243164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363231,"lon":139.6497264,"time":1585549871.631,"speed":8.025564193725586,"bearing":82.01667785644531,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549871.631783,"delta_ms":0},{"type":"getStatus","timestamp":1585549873.577,"event_timestamp":1585549872.079277,"result":{"route_state":"tracking","location":{"lat":35.63629913330078,"lon":139.64991760253907,"time":1585549873.577,"speed":8.589485168457032,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4839.62744140625,"remaining_leg_duration":804.920999999,"step_index":0,"remaining_step_distance":305.0707092285156,"remaining_step_duration":63.0,"state_message":"","in_tunnel":false,"predicted":1.946,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.636295318603519,"lon":139.6498565673828,"time":1585549872.892,"bearing":84.1454849243164},{"lat":35.63629913330078,"lon":139.64991760253907,"time":1585549873.577,"bearing":82.21505737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363311,"lon":139.6498069,"time":1585549872.634,"speed":6.858683109283447,"bearing":82.0021743774414,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549872.634465,"delta_ms":0},{"type":"getStatus","timestamp":1585549874.606,"event_timestamp":1585549873.106832,"result":{"route_state":"tracking","location":{"lat":35.63631057739258,"lon":139.6499786376953,"time":1585549874.606,"speed":7.54503059387207,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4833.99169921875,"remaining_leg_duration":803.920999999,"step_index":0,"remaining_step_distance":299.4346923828125,"remaining_step_duration":62.0,"state_message":"","in_tunnel":false,"predicted":1.972,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631057739258,"lon":139.6499786376953,"time":1585549874.606,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363371,"lon":139.6498736,"time":1585549873.636,"speed":5.429286479949951,"bearing":82.99744415283203,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549873.637153,"delta_ms":0},{"type":"getStatus","timestamp":1585549875.628,"event_timestamp":1585549874.129354,"result":{"route_state":"tracking","location":{"lat":35.636314392089847,"lon":139.65003967285157,"time":1585549875.628,"speed":6.122121810913086,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4828.4638671875,"remaining_leg_duration":802.920999999,"step_index":0,"remaining_step_distance":293.90704345703127,"remaining_step_duration":61.0,"state_message":"","in_tunnel":false,"predicted":1.992,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.636314392089847,"lon":139.65003967285157,"time":1585549875.628,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363418,"lon":139.6499244,"time":1585549874.64,"speed":4.0074028968811039,"bearing":82.02909851074219,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549874.641119,"delta_ms":0},{"type":"getStatus","timestamp":1585549876.653,"event_timestamp":1585549875.153845,"result":{"route_state":"tracking","location":{"lat":35.636314392089847,"lon":139.65003967285157,"time":1585549876.653,"speed":4.574206352233887,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4828.4638671875,"remaining_leg_duration":802.920999999,"step_index":0,"remaining_step_distance":293.90704345703127,"remaining_step_duration":61.0,"state_message":"","in_tunnel":false,"predicted":2.013,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.636314392089847,"lon":139.65003967285157,"time":1585549875.628,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363458,"lon":139.6499593,"time":1585549875.638,"speed":3.0162200927734377,"bearing":82.00733947753906,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549875.638357,"delta_ms":0},{"type":"getStatus","timestamp":1585549877.691,"event_timestamp":1585549876.194323,"result":{"route_state":"tracking","location":{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549877.691,"speed":3.493274688720703,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4825.6708984375,"remaining_leg_duration":801.920999999,"step_index":0,"remaining_step_distance":291.1139831542969,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":2.053,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549877.691,"bearing":82.21505737304688}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6363485,"lon":139.6499855,"time":1585549876.62,"speed":2.4804725646972658,"bearing":81.99628448486328,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549876.621146,"delta_ms":0},{"type":"getStatus","timestamp":1585549878.75,"event_timestamp":1585549877.250873,"result":{"route_state":"tracking","location":{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549878.75,"speed":2.718817710876465,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4825.6708984375,"remaining_leg_duration":801.920999999,"step_index":0,"remaining_step_distance":291.1139831542969,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":2.13,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549877.691,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363505,"lon":139.650006,"time":1585549877.62,"speed":1.7706153392791749,"bearing":81.99456024169922,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549877.620423,"delta_ms":0},{"type":"getStatus","timestamp":1585549879.785,"event_timestamp":1585549878.289766,"result":{"route_state":"tracking","location":{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549879.785,"speed":2.039457321166992,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4825.6708984375,"remaining_leg_duration":801.920999999,"step_index":0,"remaining_step_distance":291.1139831542969,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":2.165,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549878.75,"bearing":82.21505737304688}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6363511,"lon":139.6500185,"time":1585549878.629,"speed":1.0604995489120484,"bearing":81.99244689941406,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549878.630077,"delta_ms":0},{"type":"getStatus","timestamp":1585549880.834,"event_timestamp":1585549879.334766,"result":{"route_state":"tracking","location":{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549880.834,"speed":1.4003151655197144,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4825.6708984375,"remaining_leg_duration":801.920999999,"step_index":0,"remaining_step_distance":291.1139831542969,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":2.205,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631820678711,"lon":139.6500701904297,"time":1585549879.785,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363515,"lon":139.6500265,"time":1585549879.626,"speed":1.2498562335968018,"bearing":82.00334167480469,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549879.62647,"delta_ms":0},{"type":"getStatus","timestamp":1585549881.857,"event_timestamp":1585549880.358434,"result":{"route_state":"tracking","location":{"lat":35.63631820678711,"lon":139.65008544921876,"time":1585549881.857,"speed":1.185336709022522,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4824.3017578125,"remaining_leg_duration":801.920999999,"step_index":0,"remaining_step_distance":289.7446594238281,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":2.231,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631820678711,"lon":139.65008544921876,"time":1585549881.857,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363521,"lon":139.6500398,"time":1585549880.644,"speed":1.9853663444519044,"bearing":82.99305725097656,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549880.645147,"delta_ms":0},{"type":"getStatus","timestamp":1585549882.893,"event_timestamp":1585549881.394632,"result":{"route_state":"tracking","location":{"lat":35.63631820678711,"lon":139.65008544921876,"time":1585549882.893,"speed":1.5479503870010377,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4824.3017578125,"remaining_leg_duration":801.920999999,"step_index":0,"remaining_step_distance":289.7446594238281,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":2.249,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63631820678711,"lon":139.65008544921876,"time":1585549881.857,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363517,"lon":139.6500633,"time":1585549881.648,"speed":2.849285364151001,"bearing":84.99945831298828,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549881.648577,"delta_ms":0},{"type":"getStatus","timestamp":1585549883.919,"event_timestamp":1585549882.420555,"result":{"route_state":"tracking","location":{"lat":35.63632583618164,"lon":139.65013122558595,"time":1585549883.919,"speed":2.4213523864746095,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4820.0849609375,"remaining_leg_duration":800.920999999,"step_index":0,"remaining_step_distance":285.52801513671877,"remaining_step_duration":59.0,"state_message":"","in_tunnel":false,"predicted":2.271,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63632583618164,"lon":139.65013122558595,"time":1585549883.919,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363508,"lon":139.6500991,"time":1585549882.645,"speed":3.878392457962036,"bearing":87.9901351928711,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549882.645654,"delta_ms":0},{"type":"getStatus","timestamp":1585549884.944,"event_timestamp":1585549883.444995,"result":{"route_state":"tracking","location":{"lat":35.636329650878909,"lon":139.65017700195313,"time":1585549884.944,"speed":3.303468704223633,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4815.923828125,"remaining_leg_duration":799.920999999,"step_index":0,"remaining_step_distance":281.36688232421877,"remaining_step_duration":58.0,"state_message":"","in_tunnel":false,"predicted":2.299,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.636329650878909,"lon":139.65017700195313,"time":1585549884.944,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363492,"lon":139.6501377,"time":1585549883.647,"speed":4.61274528503418,"bearing":87.99038696289063,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549883.648079,"delta_ms":0},{"type":"getStatus","timestamp":1585549885.971,"event_timestamp":1585549884.472026,"result":{"route_state":"tracking","location":{"lat":35.6363410949707,"lon":139.65025329589845,"time":1585549885.971,"speed":4.018716335296631,"bearing":82.21505737304688,"altitude":73.5999984741211,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4808.912109375,"remaining_leg_duration":798.920999999,"step_index":0,"remaining_step_distance":274.355224609375,"remaining_step_duration":57.0,"state_message":"","in_tunnel":false,"predicted":2.324,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6363410949707,"lon":139.65025329589845,"time":1585549885.971,"bearing":82.21505737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363519,"lon":139.6501891,"time":1585549884.634,"speed":5.237723350524902,"bearing":79.42546081542969,"altitude":73.5999984741211,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"result":true,"event_timestamp":1585549884.635242,"delta_ms":0},{"type":"getStatus","timestamp":1585549887.002,"event_timestamp":1585549885.503816,"result":{"route_state":"tracking","location":{"lat":35.63634490966797,"lon":139.6503143310547,"time":1585549887.002,"speed":4.748243808746338,"bearing":82.29185485839844,"altitude":73.5999984741211,"accuracyHorizontal":3.813999891281128,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4803.38037109375,"remaining_leg_duration":797.920999999,"step_index":0,"remaining_step_distance":268.8233947753906,"remaining_step_duration":56.0,"state_message":"","in_tunnel":false,"predicted":2.368,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363410949707,"lon":139.6502685546875,"time":1585549886.228,"bearing":82.21505737304688},{"lat":35.63634490966797,"lon":139.6503143310547,"time":1585549887.002,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363621,"lon":139.6502535,"time":1585549885.63,"speed":4.830305576324463,"bearing":78.99907684326172,"altitude":73.5999984741211,"accuracyHorizontal":3.8239998817443849,"provider":"fused"},"result":true,"event_timestamp":1585549885.63028,"delta_ms":0},{"type":"getStatus","timestamp":1585549888.046,"event_timestamp":1585549886.547685,"result":{"route_state":"tracking","location":{"lat":35.636348724365237,"lon":139.65037536621095,"time":1585549888.046,"speed":4.879037380218506,"bearing":82.29185485839844,"altitude":73.5999984741211,"accuracyHorizontal":3.8239998817443849,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4797.84375,"remaining_leg_duration":795.920999999,"step_index":0,"remaining_step_distance":263.2866516113281,"remaining_step_duration":55.0,"state_message":"","in_tunnel":false,"predicted":2.416,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636348724365237,"lon":139.65037536621095,"time":1585549888.046,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363767,"lon":139.6503439,"time":1585549886.635,"speed":4.5221333503723148,"bearing":80.98860168457031,"altitude":72.19999694824219,"accuracyHorizontal":3.8369998931884767,"provider":"fused"},"result":true,"event_timestamp":1585549886.635983,"delta_ms":0},{"type":"getStatus","timestamp":1585549889.072,"event_timestamp":1585549887.57294,"result":{"route_state":"tracking","location":{"lat":35.636356353759769,"lon":139.6504364013672,"time":1585549889.072,"speed":5.117675304412842,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.8369998931884767,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4792.26416015625,"remaining_leg_duration":794.920999999,"step_index":0,"remaining_step_distance":257.7074279785156,"remaining_step_duration":54.0,"state_message":"","in_tunnel":false,"predicted":2.437,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636356353759769,"lon":139.6504364013672,"time":1585549889.072,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363811,"lon":139.6503805,"time":1585549887.639,"speed":4.123198986053467,"bearing":83.00724029541016,"altitude":72.19999694824219,"accuracyHorizontal":3.8369998931884767,"provider":"fused"},"result":true,"event_timestamp":1585549887.639839,"delta_ms":0},{"type":"getStatus","timestamp":1585549890.108,"event_timestamp":1585549888.609431,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549890.108,"speed":4.574911117553711,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.8369998931884767,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":2.469,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549890.108,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363837,"lon":139.6504147,"time":1585549888.64,"speed":3.241323232650757,"bearing":82.0000991821289,"altitude":72.19999694824219,"accuracyHorizontal":3.8310000896453859,"provider":"fused"},"result":true,"event_timestamp":1585549888.641319,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363864,"lon":139.6504397,"time":1585549889.626,"speed":1.8821922540664673,"bearing":81.9940185546875,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549889.627042,"delta_ms":0},{"type":"getStatus","timestamp":1585549891.134,"event_timestamp":1585549889.635505,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549891.134,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.508,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549890.108,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363872,"lon":139.6504505,"time":1585549890.633,"speed":0.5812535285949707,"bearing":83.00211334228516,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549890.633289,"delta_ms":0},{"type":"getStatus","timestamp":1585549892.158,"event_timestamp":1585549890.659432,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549892.158,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.525,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549891.134,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363865,"lon":139.6504505,"time":1585549891.637,"speed":0.5805580019950867,"bearing":83.00666046142578,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549891.637899,"delta_ms":0},{"type":"getStatus","timestamp":1585549893.193,"event_timestamp":1585549891.694032,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549893.193,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.556,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549892.158,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636387,"lon":139.6504474,"time":1585549892.635,"speed":0.12131891399621964,"bearing":57.483116149902347,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549892.635467,"delta_ms":0},{"type":"getStatus","timestamp":1585549894.224,"event_timestamp":1585549892.725522,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549894.224,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.589,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549893.193,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363888,"lon":139.6504434,"time":1585549893.615,"speed":0.22293837368488313,"bearing":308.9043884277344,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549893.615563,"delta_ms":0},{"type":"getStatus","timestamp":1585549895.268,"event_timestamp":1585549893.76896,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549895.268,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.653,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549894.224,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363896,"lon":139.6504435,"time":1585549894.621,"speed":0.2666526436805725,"bearing":82.908447265625,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549894.621753,"delta_ms":0},{"type":"getStatus","timestamp":1585549896.313,"event_timestamp":1585549894.814327,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549896.313,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.692,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549895.268,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363898,"lon":139.6504498,"time":1585549895.625,"speed":1.1418837308883668,"bearing":83.96338653564453,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549895.626062,"delta_ms":0},{"type":"getStatus","timestamp":1585549897.372,"event_timestamp":1585549895.873392,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549897.372,"speed":2.4505300521850588,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4786.68115234375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":252.12411499023438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.747,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.65049743652345,"time":1585549896.313,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363875,"lon":139.6504663,"time":1585549896.627,"speed":1.9113590717315674,"bearing":93.97726440429688,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549896.628017,"delta_ms":0},{"type":"getStatus","timestamp":1585549898.431,"event_timestamp":1585549896.931447,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.6505126953125,"time":1585549898.431,"speed":1.498020887374878,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4785.31005859375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":250.75338745117188,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.804,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.6505126953125,"time":1585549898.431,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636379,"lon":139.6504877,"time":1585549897.625,"speed":1.8695528507232667,"bearing":114.95209503173828,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549897.625639,"delta_ms":0},{"type":"getStatus","timestamp":1585549899.471,"event_timestamp":1585549897.973632,"result":{"route_state":"tracking","location":{"lat":35.6363639831543,"lon":139.6505126953125,"time":1585549899.471,"speed":1.683064341545105,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4785.31005859375,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":250.75338745117188,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.846,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6363639831543,"lon":139.6505126953125,"time":1585549898.431,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6363665,"lon":139.6505023,"time":1585549898.63,"speed":1.3809980154037476,"bearing":133.93377685546876,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549898.631031,"delta_ms":0},{"type":"getStatus","timestamp":1585549900.521,"event_timestamp":1585549899.023994,"result":{"route_state":"tracking","location":{"lat":35.63636779785156,"lon":139.65052795410157,"time":1585549900.521,"speed":1.4580527544021607,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4783.888671875,"remaining_leg_duration":793.920999999,"step_index":0,"remaining_step_distance":249.33163452148438,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.891,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63636779785156,"lon":139.65052795410157,"time":1585549900.521,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6363516,"lon":139.6505089,"time":1585549899.633,"speed":1.7581069469451905,"bearing":146.94837951660157,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549899.634064,"delta_ms":0},{"type":"getStatus","timestamp":1585549901.59,"event_timestamp":1585549900.091819,"result":{"route_state":"tracking","location":{"lat":35.63636779785156,"lon":139.65054321289063,"time":1585549901.59,"speed":1.6525009870529175,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.5185546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.9615478515625,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.957,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63636779785156,"lon":139.65054321289063,"time":1585549901.59,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363376,"lon":139.6505108,"time":1585549900.627,"speed":1.1416068077087403,"bearing":159.91482543945313,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549900.628133,"delta_ms":0},{"type":"getStatus","timestamp":1585549902.615,"event_timestamp":1585549901.115673,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549902.615,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.988,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549902.615,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363259,"lon":139.6505072,"time":1585549901.623,"speed":1.5762643814086915,"bearing":173.95921325683595,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549901.623543,"delta_ms":0},{"type":"getStatus","timestamp":1585549903.644,"event_timestamp":1585549902.144819,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549903.644,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.021,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549902.615,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363115,"lon":139.6505001,"time":1585549902.622,"speed":1.5309115648269654,"bearing":190.89674377441407,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549902.622429,"delta_ms":0},{"type":"getStatus","timestamp":1585549904.671,"event_timestamp":1585549903.172806,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549904.671,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.049,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549903.644,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362983,"lon":139.650486,"time":1585549903.622,"speed":2.033822536468506,"bearing":208.90911865234376,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549903.622817,"delta_ms":0},{"type":"getStatus","timestamp":1585549905.71,"event_timestamp":1585549904.212749,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549905.71,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.088,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549904.671,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6362846,"lon":139.6504636,"time":1585549904.638,"speed":1.9695063829421998,"bearing":227.87368774414063,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549904.638608,"delta_ms":0},{"type":"getStatus","timestamp":1585549906.768,"event_timestamp":1585549905.270502,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549906.768,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.13,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549905.71,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362785,"lon":139.6504397,"time":1585549905.62,"speed":1.6509833335876465,"bearing":246.8964385986328,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549905.620866,"delta_ms":0},{"type":"getStatus","timestamp":1585549907.801,"event_timestamp":1585549906.305797,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549907.801,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.181,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549906.768,"bearing":82.29185485839844}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.636278,"lon":139.6504195,"time":1585549906.62,"speed":1.2131223678588868,"bearing":260.9361572265625,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549906.620981,"delta_ms":0},{"type":"getStatus","timestamp":1585549908.863,"event_timestamp":1585549907.364606,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549908.863,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.243,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549907.801,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636278,"lon":139.6504057,"time":1585549907.632,"speed":1.0705965757369996,"bearing":261.998291015625,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549907.633221,"delta_ms":0},{"type":"getStatus","timestamp":1585549909.913,"event_timestamp":1585549908.415058,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549909.913,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.281,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549908.863,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362763,"lon":139.6503946,"time":1585549908.633,"speed":0.8237643837928772,"bearing":254.08755493164063,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549908.633817,"delta_ms":0},{"type":"getStatus","timestamp":1585549910.963,"event_timestamp":1585549909.464986,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549910.963,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.33,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549909.913,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362736,"lon":139.6503855,"time":1585549909.622,"speed":0.7214453220367432,"bearing":255.0226287841797,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549909.622551,"delta_ms":0},{"type":"getStatus","timestamp":1585549912.022,"event_timestamp":1585549910.522747,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549912.022,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.4,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549910.963,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362684,"lon":139.6503795,"time":1585549910.62,"speed":0.6201070547103882,"bearing":259.9986267089844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549910.620299,"delta_ms":0},{"type":"getStatus","timestamp":1585549913.083,"event_timestamp":1585549911.585238,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549913.083,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.463,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549912.022,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362627,"lon":139.6503745,"time":1585549911.634,"speed":0.7493451237678528,"bearing":260.99267578125,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549911.634377,"delta_ms":0},{"type":"getStatus","timestamp":1585549914.115,"event_timestamp":1585549912.616338,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549914.115,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.481,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549913.083,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362585,"lon":139.6503692,"time":1585549912.646,"speed":0.6804847717285156,"bearing":261.0058288574219,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549912.647099,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362601,"lon":139.6503641,"time":1585549913.629,"speed":0.2704583406448364,"bearing":261.013916015625,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549913.629622,"delta_ms":0},{"type":"getStatus","timestamp":1585549915.142,"event_timestamp":1585549913.642899,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549915.142,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.513,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549914.115,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362625,"lon":139.6503635,"time":1585549914.635,"speed":0.1501353234052658,"bearing":261.0077819824219,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549914.635821,"delta_ms":0},{"type":"getStatus","timestamp":1585549916.168,"event_timestamp":1585549914.670345,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549916.168,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.533,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549915.142,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362644,"lon":139.6503631,"time":1585549915.627,"speed":0.23983493447303773,"bearing":260.994140625,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549915.627671,"delta_ms":0},{"type":"getStatus","timestamp":1585549917.211,"event_timestamp":1585549915.713578,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549917.211,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.584,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549916.168,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362663,"lon":139.6503611,"time":1585549916.624,"speed":0.29997721314430239,"bearing":259.99951171875,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549916.62431,"delta_ms":0},{"type":"getStatus","timestamp":1585549918.268,"event_timestamp":1585549916.768968,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549918.268,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.644,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549917.211,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362675,"lon":139.6503593,"time":1585549917.621,"speed":0.1501377671957016,"bearing":260.0087585449219,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549917.621911,"delta_ms":0},{"type":"getStatus","timestamp":1585549919.297,"event_timestamp":1585549917.799081,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549919.297,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.676,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549918.268,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362685,"lon":139.6503595,"time":1585549918.627,"speed":0.14993731677532197,"bearing":259.99859619140627,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549918.627913,"delta_ms":0},{"type":"getStatus","timestamp":1585549920.355,"event_timestamp":1585549918.856267,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549920.355,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.728,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549919.297,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.63627,"lon":139.6503604,"time":1585549919.638,"speed":0.08305881172418595,"bearing":342.3858642578125,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549919.638504,"delta_ms":0},{"type":"getStatus","timestamp":1585549921.416,"event_timestamp":1585549919.917687,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549921.416,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.778,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549920.355,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636271,"lon":139.6503615,"time":1585549920.621,"speed":0.11316461116075516,"bearing":26.506084442138673,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549920.621689,"delta_ms":0},{"type":"getStatus","timestamp":1585549922.449,"event_timestamp":1585549920.950415,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549922.449,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.828,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549921.416,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362721,"lon":139.6503637,"time":1585549921.635,"speed":0.17841239273548127,"bearing":51.61521530151367,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549921.636137,"delta_ms":0},{"type":"getStatus","timestamp":1585549923.507,"event_timestamp":1585549922.008904,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549923.507,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.872,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549922.449,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362734,"lon":139.6503651,"time":1585549922.631,"speed":0.18729540705680848,"bearing":44.69163131713867,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549922.632019,"delta_ms":0},{"type":"getStatus","timestamp":1585549924.547,"event_timestamp":1585549923.047629,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549924.547,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.916,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549923.507,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636273,"lon":139.6503648,"time":1585549923.624,"speed":0.04866068437695503,"bearing":49.60026168823242,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549923.624953,"delta_ms":0},{"type":"getStatus","timestamp":1585549925.589,"event_timestamp":1585549924.090754,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549925.589,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.965,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549924.547,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362713,"lon":139.6503652,"time":1585549924.626,"speed":0.1025242730975151,"bearing":158.5573272705078,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549924.626617,"delta_ms":0},{"type":"getStatus","timestamp":1585549926.663,"event_timestamp":1585549925.164359,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549926.663,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.037,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549925.589,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362711,"lon":139.6503662,"time":1585549925.626,"speed":0.08766835182905197,"bearing":127.11949920654297,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549925.627143,"delta_ms":0},{"type":"getStatus","timestamp":1585549927.73,"event_timestamp":1585549926.231414,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549927.73,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.104,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549926.663,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362701,"lon":139.6503664,"time":1585549926.634,"speed":0.09329073876142502,"bearing":156.9625701904297,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549926.634443,"delta_ms":0},{"type":"getStatus","timestamp":1585549928.796,"event_timestamp":1585549927.297095,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549928.796,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.162,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549927.73,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362698,"lon":139.6503666,"time":1585549927.623,"speed":0.06395569443702698,"bearing":156.69329833984376,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549927.623631,"delta_ms":0},{"type":"getStatus","timestamp":1585549929.824,"event_timestamp":1585549928.325571,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549929.824,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.201,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549928.796,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362702,"lon":139.6503667,"time":1585549928.615,"speed":0.01966017670929432,"bearing":92.41646575927735,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549928.61564,"delta_ms":0},{"type":"getStatus","timestamp":1585549930.894,"event_timestamp":1585549929.398439,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549930.894,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.279,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549929.824,"bearing":82.29185485839844}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6362703,"lon":139.6503671,"time":1585549929.638,"speed":0.030788011848926545,"bearing":77.77557373046875,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549929.63845,"delta_ms":0},{"type":"getStatus","timestamp":1585549931.958,"event_timestamp":1585549930.458852,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549931.958,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.32,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549930.894,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362702,"lon":139.6503673,"time":1585549930.655,"speed":0.018533825874328615,"bearing":89.99324798583985,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549930.656006,"delta_ms":0},{"type":"getStatus","timestamp":1585549932.993,"event_timestamp":1585549931.494269,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549932.993,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.338,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549931.958,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362702,"lon":139.6503673,"time":1585549931.62,"speed":0.011867617256939412,"bearing":96.57084655761719,"altitude":72.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549931.621115,"delta_ms":0},{"type":"getStatus","timestamp":1585549934.054,"event_timestamp":1585549932.555215,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549934.054,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.434,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549932.993,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362701,"lon":139.6503679,"time":1585549932.637,"speed":0.034332580864429477,"bearing":100.20708465576172,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549932.637498,"delta_ms":0},{"type":"getStatus","timestamp":1585549935.11,"event_timestamp":1585549933.611808,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549935.11,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.473,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549934.054,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636271,"lon":139.6503686,"time":1585549933.656,"speed":0.07659662514925003,"bearing":42.49991226196289,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549933.658262,"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362711,"lon":139.650369,"time":1585549934.632,"speed":0.04928230121731758,"bearing":54.55413818359375,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549934.632955,"delta_ms":0},{"type":"getStatus","timestamp":1585549936.152,"event_timestamp":1585549934.653022,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549936.152,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.52,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549935.11,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636271,"lon":139.6503693,"time":1585549935.631,"speed":0.03630378097295761,"bearing":82.56851959228516,"altitude":72.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549935.632121,"delta_ms":0},{"type":"getStatus","timestamp":1585549937.191,"event_timestamp":1585549935.692023,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549937.191,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.56,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549936.152,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362705,"lon":139.6503696,"time":1585549936.633,"speed":0.041716352105140689,"bearing":131.89022827148438,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549936.634045,"delta_ms":0},{"type":"getStatus","timestamp":1585549938.244,"event_timestamp":1585549936.745899,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549938.244,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.611,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549937.191,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362691,"lon":139.6503695,"time":1585549937.628,"speed":0.10334333777427674,"bearing":175.7865753173828,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549937.628565,"delta_ms":0},{"type":"getStatus","timestamp":1585549939.295,"event_timestamp":1585549937.796106,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549939.295,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.667,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549938.244,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362687,"lon":139.6503694,"time":1585549938.628,"speed":0.07159876823425293,"bearing":180.6080322265625,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549938.628379,"delta_ms":0},{"type":"getStatus","timestamp":1585549940.354,"event_timestamp":1585549938.855611,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549940.354,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.726,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549939.295,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362685,"lon":139.6503694,"time":1585549939.616,"speed":0.042696695774793628,"bearing":182.8903350830078,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549939.61637,"delta_ms":0},{"type":"getStatus","timestamp":1585549941.414,"event_timestamp":1585549939.915618,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549941.414,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.798,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549940.354,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362696,"lon":139.6503694,"time":1585549940.62,"speed":0.054028648883104327,"bearing":358.4540100097656,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549940.620607,"delta_ms":0},{"type":"getStatus","timestamp":1585549942.476,"event_timestamp":1585549940.978239,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549942.476,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.856,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549941.414,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636271,"lon":139.6503701,"time":1585549941.623,"speed":0.11628080159425736,"bearing":18.270259857177736,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549941.623729,"delta_ms":0},{"type":"getStatus","timestamp":1585549943.53,"event_timestamp":1585549942.030655,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549943.53,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.907,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549942.476,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362706,"lon":139.6503696,"time":1585549942.633,"speed":0.0293302983045578,"bearing":332.4986877441406,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549942.633908,"delta_ms":0},{"type":"getStatus","timestamp":1585549944.585,"event_timestamp":1585549943.085825,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549944.585,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.952,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549943.53,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362724,"lon":139.6503694,"time":1585549943.631,"speed":0.12421512603759766,"bearing":353.694091796875,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549943.63162,"delta_ms":0},{"type":"getStatus","timestamp":1585549945.629,"event_timestamp":1585549944.130867,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549945.629,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.998,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549944.585,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362732,"lon":139.6503692,"time":1585549944.641,"speed":0.14994463324546815,"bearing":258.997314453125,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549944.641218,"delta_ms":0},{"type":"getStatus","timestamp":1585549946.689,"event_timestamp":1585549945.189874,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549946.689,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.048,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549945.629,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362735,"lon":139.6503689,"time":1585549945.624,"speed":0.14984852075576783,"bearing":258.9913330078125,"altitude":74.1861572265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549945.625337,"delta_ms":0},{"type":"getStatus","timestamp":1585549947.732,"event_timestamp":1585549946.234005,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549947.732,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.108,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549946.689,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362739,"lon":139.6503688,"time":1585549946.62,"speed":0.0755678042769432,"bearing":276.8649597167969,"altitude":74.05633544921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549946.621045,"delta_ms":0},{"type":"getStatus","timestamp":1585549948.79,"event_timestamp":1585549947.293162,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549948.79,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.17,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549947.732,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6362746,"lon":139.6503693,"time":1585549947.61,"speed":0.05286312475800514,"bearing":356.07244873046877,"altitude":73.968505859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549947.610421,"delta_ms":0},{"type":"getStatus","timestamp":1585549949.853,"event_timestamp":1585549948.353733,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549949.853,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.243,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549948.79,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362753,"lon":139.6503697,"time":1585549948.642,"speed":0.07120727002620697,"bearing":15.143420219421387,"altitude":73.92047119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549948.642169,"delta_ms":0},{"type":"getStatus","timestamp":1585549950.889,"event_timestamp":1585549949.390489,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549950.889,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.247,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549949.853,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362757,"lon":139.6503699,"time":1585549949.644,"speed":0.0545327253639698,"bearing":20.251047134399415,"altitude":73.89007568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549949.644419,"delta_ms":0},{"type":"getStatus","timestamp":1585549951.954,"event_timestamp":1585549950.455041,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549951.954,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.31,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549950.889,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362767,"lon":139.6503696,"time":1585549950.645,"speed":0.08526957035064697,"bearing":355.84027099609377,"altitude":73.76873779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549950.645901,"delta_ms":0},{"type":"getStatus","timestamp":1585549953.001,"event_timestamp":1585549951.502828,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549953.001,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.356,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549951.954,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362776,"lon":139.6503696,"time":1585549951.628,"speed":0.0939987450838089,"bearing":357.2751770019531,"altitude":73.70269775390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549951.628172,"delta_ms":0},{"type":"getStatus","timestamp":1585549954.068,"event_timestamp":1585549952.568976,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549954.068,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.44,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549953.001,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362778,"lon":139.6503698,"time":1585549952.63,"speed":0.058885712176561359,"bearing":10.072297096252442,"altitude":73.6689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549952.630679,"delta_ms":0},{"type":"getStatus","timestamp":1585549955.119,"event_timestamp":1585549953.619489,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549955.119,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.489,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549954.068,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362789,"lon":139.6503697,"time":1585549953.647,"speed":0.08991415798664093,"bearing":357.6358947753906,"altitude":73.6361083984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549953.647985,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362795,"lon":139.6503702,"time":1585549954.624,"speed":0.07943705469369888,"bearing":17.518266677856447,"altitude":73.7115478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549954.624961,"delta_ms":0},{"type":"getStatus","timestamp":1585549956.142,"event_timestamp":1585549954.643819,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549956.142,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.518,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549955.119,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362744,"lon":139.6503693,"time":1585549955.632,"speed":0.2935483157634735,"bearing":186.81361389160157,"altitude":73.2509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549955.632623,"delta_ms":0},{"type":"getStatus","timestamp":1585549957.185,"event_timestamp":1585549955.687122,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549957.185,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.553,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549956.142,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362692,"lon":139.6503678,"time":1585549956.628,"speed":0.46782299876213076,"bearing":191.47496032714845,"altitude":73.1036376953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549956.628908,"delta_ms":0},{"type":"getStatus","timestamp":1585549958.231,"event_timestamp":1585549956.731577,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549958.231,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.603,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549957.185,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636266,"lon":139.6503668,"time":1585549957.626,"speed":0.4114172160625458,"bearing":192.87496948242188,"altitude":72.9461669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549957.626497,"delta_ms":0},{"type":"getStatus","timestamp":1585549959.271,"event_timestamp":1585549957.772234,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549959.271,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.645,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549958.231,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362631,"lon":139.650366,"time":1585549958.632,"speed":0.3616020381450653,"bearing":192.5165252685547,"altitude":72.720458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549958.632808,"delta_ms":0},{"type":"getStatus","timestamp":1585549960.336,"event_timestamp":1585549958.8382,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549960.336,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.704,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549959.271,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362609,"lon":139.6503657,"time":1585549959.629,"speed":0.29346856474876406,"bearing":190.26072692871095,"altitude":72.6668701171875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549959.629672,"delta_ms":0},{"type":"getStatus","timestamp":1585549961.383,"event_timestamp":1585549959.884937,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549961.383,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.754,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549960.336,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362599,"lon":139.6503653,"time":1585549960.622,"speed":0.1934909224510193,"bearing":192.9798583984375,"altitude":72.4580078125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549960.622319,"delta_ms":0},{"type":"getStatus","timestamp":1585549962.448,"event_timestamp":1585549960.948379,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549962.448,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.826,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549961.383,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362591,"lon":139.650365,"time":1585549961.628,"speed":0.1322876513004303,"bearing":195.00881958007813,"altitude":72.28057861328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585549961.628721,"delta_ms":0},{"type":"getStatus","timestamp":1585549963.479,"event_timestamp":1585549961.980253,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549963.479,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.851,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549962.448,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362608,"lon":139.6503648,"time":1585549962.635,"speed":0.054190803319215778,"bearing":337.4656066894531,"altitude":72.243896484375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585549962.635472,"delta_ms":0},{"type":"getStatus","timestamp":1585549964.523,"event_timestamp":1585549963.024504,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549964.523,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.888,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549963.479,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362636,"lon":139.6503642,"time":1585549963.622,"speed":0.20534475147724152,"bearing":348.3470764160156,"altitude":72.30047607421875,"accuracyHorizontal":3.8499999046325685,"provider":"fused"},"result":true,"event_timestamp":1585549963.622789,"delta_ms":0},{"type":"getStatus","timestamp":1585549965.595,"event_timestamp":1585549964.095441,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549965.595,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.973,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549964.523,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362643,"lon":139.6503639,"time":1585549964.632,"speed":0.13483130931854249,"bearing":344.9514465332031,"altitude":72.22491455078125,"accuracyHorizontal":4.054999828338623,"provider":"fused"},"result":true,"event_timestamp":1585549964.632416,"delta_ms":0},{"type":"getStatus","timestamp":1585549966.624,"event_timestamp":1585549965.12546,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549966.624,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.992,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549965.595,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362644,"lon":139.650364,"time":1585549965.613,"speed":0.062256716191768649,"bearing":351.179931640625,"altitude":72.1787109375,"accuracyHorizontal":4.0289998054504398,"provider":"fused"},"result":true,"event_timestamp":1585549965.613888,"delta_ms":0},{"type":"getStatus","timestamp":1585549967.688,"event_timestamp":1585549966.189795,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549967.688,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.075,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549966.624,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362632,"lon":139.650364,"time":1585549966.623,"speed":0.052256640046834949,"bearing":184.35317993164063,"altitude":72.08905029296875,"accuracyHorizontal":4.054999828338623,"provider":"fused"},"result":true,"event_timestamp":1585549966.623981,"delta_ms":0},{"type":"getStatus","timestamp":1585549968.741,"event_timestamp":1585549967.242134,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549968.741,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.118,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549967.688,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636264,"lon":139.650364,"time":1585549967.639,"speed":0.034309595823287967,"bearing":358.3417663574219,"altitude":72.04071044921875,"accuracyHorizontal":4.093999862670898,"provider":"fused"},"result":true,"event_timestamp":1585549967.639633,"delta_ms":0},{"type":"getStatus","timestamp":1585549969.796,"event_timestamp":1585549968.29787,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549969.796,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.157,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549968.741,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362641,"lon":139.6503642,"time":1585549968.628,"speed":0.02056785486638546,"bearing":37.25260925292969,"altitude":71.9935302734375,"accuracyHorizontal":4.1579999923706059,"provider":"fused"},"result":true,"event_timestamp":1585549968.628206,"delta_ms":0},{"type":"getStatus","timestamp":1585549970.859,"event_timestamp":1585549969.360079,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549970.859,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.231,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549969.796,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362639,"lon":139.6503641,"time":1585549969.641,"speed":0.005726811476051807,"bearing":209.25112915039063,"altitude":71.8568115234375,"accuracyHorizontal":4.1579999923706059,"provider":"fused"},"result":true,"event_timestamp":1585549969.641669,"delta_ms":0},{"type":"getStatus","timestamp":1585549971.911,"event_timestamp":1585549970.412325,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549971.911,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.27,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549970.859,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362635,"lon":139.6503648,"time":1585549970.641,"speed":0.04568563774228096,"bearing":126.91910552978516,"altitude":71.685302734375,"accuracyHorizontal":4.210000038146973,"provider":"fused"},"result":true,"event_timestamp":1585549970.641521,"delta_ms":0},{"type":"getStatus","timestamp":1585549972.979,"event_timestamp":1585549971.479386,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549972.979,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.338,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549971.911,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362638,"lon":139.650365,"time":1585549971.625,"speed":0.03006434068083763,"bearing":68.92787170410156,"altitude":71.61883544921875,"accuracyHorizontal":4.2230000495910648,"provider":"fused"},"result":true,"event_timestamp":1585549971.625654,"delta_ms":0},{"type":"getStatus","timestamp":1585549974.013,"event_timestamp":1585549972.514884,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549974.013,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.388,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549972.979,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362629,"lon":139.6503653,"time":1585549972.625,"speed":0.06272605806589127,"bearing":155.68856811523438,"altitude":71.411376953125,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549972.625574,"delta_ms":0},{"type":"getStatus","timestamp":1585549975.071,"event_timestamp":1585549973.57153,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549975.071,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.446,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549974.013,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362629,"lon":139.6503651,"time":1585549973.648,"speed":0.019768228754401208,"bearing":176.6387176513672,"altitude":71.09039306640625,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549973.648601,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362625,"lon":139.6503642,"time":1585549974.633,"speed":0.059720478951931,"bearing":229.88821411132813,"altitude":70.9759521484375,"accuracyHorizontal":4.210000038146973,"provider":"fused"},"result":true,"event_timestamp":1585549974.633733,"delta_ms":0},{"type":"getStatus","timestamp":1585549976.137,"event_timestamp":1585549974.638382,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549976.137,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.504,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549975.071,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362604,"lon":139.6503638,"time":1585549975.629,"speed":0.15274687111377717,"bearing":196.2950897216797,"altitude":71.054443359375,"accuracyHorizontal":4.131999969482422,"provider":"fused"},"result":true,"event_timestamp":1585549975.630016,"delta_ms":0},{"type":"getStatus","timestamp":1585549977.181,"event_timestamp":1585549975.682918,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549977.181,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.552,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549976.137,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362581,"lon":139.650364,"time":1585549976.636,"speed":0.21383050084114076,"bearing":181.66250610351563,"altitude":70.93450927734375,"accuracyHorizontal":4.054999828338623,"provider":"fused"},"result":true,"event_timestamp":1585549976.636211,"delta_ms":0},{"type":"getStatus","timestamp":1585549978.242,"event_timestamp":1585549976.74383,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549978.242,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.606,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549977.181,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362562,"lon":139.6503644,"time":1585549977.625,"speed":0.2123614400625229,"bearing":175.5099334716797,"altitude":70.752685546875,"accuracyHorizontal":3.9769999980926515,"provider":"fused"},"result":true,"event_timestamp":1585549977.625657,"delta_ms":0},{"type":"getStatus","timestamp":1585549979.298,"event_timestamp":1585549977.79895,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549979.298,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.673,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549978.242,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362544,"lon":139.6503644,"time":1585549978.625,"speed":0.20614728331565858,"bearing":177.3087615966797,"altitude":70.581298828125,"accuracyHorizontal":3.9639999866485597,"provider":"fused"},"result":true,"event_timestamp":1585549978.626109,"delta_ms":0},{"type":"getStatus","timestamp":1585549980.351,"event_timestamp":1585549978.852007,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549980.351,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.726,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549979.298,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362528,"lon":139.6503642,"time":1585549979.627,"speed":0.1870630532503128,"bearing":182.62057495117188,"altitude":70.35992431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549979.627932,"delta_ms":0},{"type":"getStatus","timestamp":1585549981.388,"event_timestamp":1585549979.890401,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549981.388,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.761,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549980.351,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362521,"lon":139.6503639,"time":1585549980.632,"speed":0.12401512265205383,"bearing":187.73507690429688,"altitude":70.28619384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549980.632209,"delta_ms":0},{"type":"getStatus","timestamp":1585549982.433,"event_timestamp":1585549980.934749,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549982.433,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.801,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549981.388,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362512,"lon":139.650364,"time":1585549981.635,"speed":0.10929811000823975,"bearing":181.3225555419922,"altitude":70.0572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549981.636029,"delta_ms":0},{"type":"getStatus","timestamp":1585549983.489,"event_timestamp":1585549981.990694,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549983.489,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.854,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549982.433,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362509,"lon":139.6503636,"time":1585549982.631,"speed":0.07039450854063034,"bearing":199.18826293945313,"altitude":69.87200927734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549982.631839,"delta_ms":0},{"type":"getStatus","timestamp":1585549984.532,"event_timestamp":1585549983.033488,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549984.532,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.901,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549983.489,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362511,"lon":139.6503632,"time":1585549983.622,"speed":0.03755045309662819,"bearing":242.7020721435547,"altitude":69.69097900390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549983.62217,"delta_ms":0},{"type":"getStatus","timestamp":1585549985.6,"event_timestamp":1585549984.10352,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549985.6,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.978,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549984.532,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6362513,"lon":139.6503626,"time":1585549984.621,"speed":0.045475248247385028,"bearing":277.5942077636719,"altitude":69.44000244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549984.622104,"delta_ms":0},{"type":"getStatus","timestamp":1585549986.648,"event_timestamp":1585549985.150168,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549986.648,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.027,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549985.6,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362514,"lon":139.6503626,"time":1585549985.634,"speed":0.020221156999468805,"bearing":293.5986022949219,"altitude":69.42620849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549985.634453,"delta_ms":0},{"type":"getStatus","timestamp":1585549987.714,"event_timestamp":1585549986.218218,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549987.714,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.08,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549986.648,"bearing":82.29185485839844}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6362517,"lon":139.6503625,"time":1585549986.618,"speed":0.028272077441215516,"bearing":332.817626953125,"altitude":69.1861572265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549986.619073,"delta_ms":0},{"type":"getStatus","timestamp":1585549988.78,"event_timestamp":1585549987.281413,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549988.78,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.162,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549987.714,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362517,"lon":139.6503625,"time":1585549987.611,"speed":0.009194162674248219,"bearing":320.5914611816406,"altitude":69.20684814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549987.611167,"delta_ms":0},{"type":"getStatus","timestamp":1585549989.834,"event_timestamp":1585549988.335306,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549989.834,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.223,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549988.78,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362513,"lon":139.6503626,"time":1585549988.62,"speed":0.020357448607683183,"bearing":173.12225341796876,"altitude":69.167724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549988.620239,"delta_ms":0},{"type":"getStatus","timestamp":1585549990.9,"event_timestamp":1585549989.401574,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549990.9,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.28,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549989.834,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362514,"lon":139.6503627,"time":1585549989.629,"speed":0.007301722653210163,"bearing":101.35616302490235,"altitude":69.142333984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585549989.62988,"delta_ms":0},{"type":"getStatus","timestamp":1585549991.953,"event_timestamp":1585549990.454654,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549991.953,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.324,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549990.9,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362525,"lon":139.6503629,"time":1585549990.621,"speed":0.07030361890792847,"bearing":10.760468482971192,"altitude":69.1124267578125,"accuracyHorizontal":3.9639999866485597,"provider":"fused"},"result":true,"event_timestamp":1585549990.621446,"delta_ms":0},{"type":"getStatus","timestamp":1585549993.019,"event_timestamp":1585549991.520533,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549993.019,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.398,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549991.953,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362534,"lon":139.6503631,"time":1585549991.626,"speed":0.0892142504453659,"bearing":10.72573184967041,"altitude":69.1651611328125,"accuracyHorizontal":4.054999828338623,"provider":"fused"},"result":true,"event_timestamp":1585549991.626554,"delta_ms":0},{"type":"getStatus","timestamp":1585549994.065,"event_timestamp":1585549992.565886,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549994.065,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.439,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549993.019,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362541,"lon":139.6503627,"time":1585549992.649,"speed":0.08262411504983902,"bearing":352.45257568359377,"altitude":69.13330078125,"accuracyHorizontal":4.131999969482422,"provider":"fused"},"result":true,"event_timestamp":1585549992.650025,"delta_ms":0},{"type":"getStatus","timestamp":1585549995.115,"event_timestamp":1585549993.617227,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549995.115,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.466,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549994.065,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362545,"lon":139.6503632,"time":1585549993.669,"speed":0.0621253177523613,"bearing":20.107295989990236,"altitude":69.3240966796875,"accuracyHorizontal":4.210000038146973,"provider":"fused"},"result":true,"event_timestamp":1585549993.670263,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362549,"lon":139.6503635,"time":1585549994.627,"speed":0.05707770586013794,"bearing":23.231632232666017,"altitude":69.48712158203125,"accuracyHorizontal":4.2230000495910648,"provider":"fused"},"result":true,"event_timestamp":1585549994.627643,"delta_ms":0},{"type":"getStatus","timestamp":1585549996.158,"event_timestamp":1585549994.659314,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549996.158,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.531,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549995.115,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636255,"lon":139.6503639,"time":1585549995.624,"speed":0.0428944006562233,"bearing":50.56674575805664,"altitude":69.7177734375,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549995.624471,"delta_ms":0},{"type":"getStatus","timestamp":1585549997.205,"event_timestamp":1585549995.706324,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549997.205,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.581,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549996.158,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362551,"lon":139.6503645,"time":1585549996.627,"speed":0.04905088618397713,"bearing":66.34054565429688,"altitude":69.849853515625,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549996.62844,"delta_ms":0},{"type":"getStatus","timestamp":1585549998.25,"event_timestamp":1585549996.750899,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549998.25,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.623,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549997.205,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362556,"lon":139.6503651,"time":1585549997.622,"speed":0.06184426695108414,"bearing":50.21115493774414,"altitude":69.9732666015625,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549997.62276,"delta_ms":0},{"type":"getStatus","timestamp":1585549999.311,"event_timestamp":1585549997.812512,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549999.311,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.689,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549998.25,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362572,"lon":139.6503652,"time":1585549998.631,"speed":0.11979297548532486,"bearing":12.67136001586914,"altitude":70.03057861328125,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549998.63136,"delta_ms":0},{"type":"getStatus","timestamp":1585550000.366,"event_timestamp":1585549998.867479,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550000.366,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.735,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585549999.311,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362582,"lon":139.6503661,"time":1585549999.621,"speed":0.1277782917022705,"bearing":25.61435890197754,"altitude":70.11846923828125,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585549999.621481,"delta_ms":0},{"type":"getStatus","timestamp":1585550001.424,"event_timestamp":1585549999.92502,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550001.424,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.803,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550000.366,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362596,"lon":139.6503669,"time":1585550000.617,"speed":0.15263092517852784,"bearing":25.14090919494629,"altitude":70.195068359375,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585550000.617623,"delta_ms":0},{"type":"getStatus","timestamp":1585550002.468,"event_timestamp":1585550000.969038,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550002.468,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.851,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550001.424,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362594,"lon":139.6503678,"time":1585550001.628,"speed":0.004446312319487333,"bearing":112.30045318603516,"altitude":72.19999694824219,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585550001.629036,"delta_ms":0},{"type":"getStatus","timestamp":1585550003.509,"event_timestamp":1585550002.010737,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550003.509,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.881,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550002.468,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362595,"lon":139.6503681,"time":1585550002.625,"speed":0.019400639459490777,"bearing":65.51529693603516,"altitude":72.19999694824219,"accuracyHorizontal":4.501999855041504,"provider":"fused"},"result":true,"event_timestamp":1585550002.625351,"delta_ms":0},{"type":"getStatus","timestamp":1585550004.572,"event_timestamp":1585550003.073317,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550004.572,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.947,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550003.509,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362599,"lon":139.6503684,"time":1585550003.626,"speed":0.0354747511446476,"bearing":38.05719757080078,"altitude":72.19999694824219,"accuracyHorizontal":4.716000080108643,"provider":"fused"},"result":true,"event_timestamp":1585550003.627106,"delta_ms":0},{"type":"getStatus","timestamp":1585550005.621,"event_timestamp":1585550004.122566,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550005.621,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.995,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550004.572,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362598,"lon":139.6503687,"time":1585550004.627,"speed":0.025546126067638398,"bearing":79.38641357421875,"altitude":72.19999694824219,"accuracyHorizontal":4.931000232696533,"provider":"fused"},"result":true,"event_timestamp":1585550004.62735,"delta_ms":0},{"type":"getStatus","timestamp":1585550006.681,"event_timestamp":1585550005.182032,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550006.681,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.054,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550005.621,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362595,"lon":139.6503701,"time":1585550005.624,"speed":0.08411543071269989,"bearing":101.64714813232422,"altitude":72.19999694824219,"accuracyHorizontal":5.001999855041504,"provider":"fused"},"result":true,"event_timestamp":1585550005.624665,"delta_ms":0},{"type":"getStatus","timestamp":1585550007.736,"event_timestamp":1585550006.237192,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550007.736,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.112,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550006.681,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362592,"lon":139.6503712,"time":1585550006.626,"speed":0.09355542808771134,"bearing":104.88895416259766,"altitude":72.19999694824219,"accuracyHorizontal":5.181000232696533,"provider":"fused"},"result":true,"event_timestamp":1585550006.626826,"delta_ms":0},{"type":"getStatus","timestamp":1585550008.802,"event_timestamp":1585550007.303098,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550008.802,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.176,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550007.736,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362582,"lon":139.6503723,"time":1585550007.626,"speed":0.12125656753778458,"bearing":127.3971939086914,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550007.626446,"delta_ms":0},{"type":"getStatus","timestamp":1585550009.87,"event_timestamp":1585550008.375971,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550009.87,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.244,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550008.802,"bearing":82.29185485839844}]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6362574,"lon":139.6503739,"time":1585550008.64,"speed":0.15001384913921357,"bearing":125.16819763183594,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550008.640484,"delta_ms":0},{"type":"getStatus","timestamp":1585550010.935,"event_timestamp":1585550009.435973,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550010.935,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.295,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550009.87,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362568,"lon":139.650375,"time":1585550009.65,"speed":0.13094785809516908,"bearing":122.70001220703125,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550009.65118,"delta_ms":0},{"type":"getStatus","timestamp":1585550011.991,"event_timestamp":1585550010.492353,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550011.991,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.341,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550010.935,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636257,"lon":139.6503762,"time":1585550010.628,"speed":0.11278250813484192,"bearing":101.06051635742188,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550010.628315,"delta_ms":0},{"type":"getStatus","timestamp":1585550013.023,"event_timestamp":1585550011.524629,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550013.023,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.395,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550011.991,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362578,"lon":139.6503771,"time":1585550011.643,"speed":0.1028011292219162,"bearing":65.43608093261719,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550011.64332,"delta_ms":0},{"type":"getStatus","timestamp":1585550014.083,"event_timestamp":1585550012.584462,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550014.083,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.44,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550013.023,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362577,"lon":139.6503779,"time":1585550012.653,"speed":0.08169099688529968,"bearing":80.2557144165039,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550012.65347,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362577,"lon":139.6503789,"time":1585550013.619,"speed":0.08633562177419663,"bearing":85.8630599975586,"altitude":72.19999694824219,"accuracyHorizontal":5.360000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550013.619411,"delta_ms":0},{"type":"getStatus","timestamp":1585550015.144,"event_timestamp":1585550013.64564,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550015.144,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.525,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550014.083,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636258,"lon":139.65038,"time":1585550014.627,"speed":0.09863875806331635,"bearing":80.23465728759766,"altitude":72.19999694824219,"accuracyHorizontal":5.144999980926514,"provider":"fused"},"result":true,"event_timestamp":1585550014.62738,"delta_ms":0},{"type":"getStatus","timestamp":1585550016.191,"event_timestamp":1585550014.691932,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550016.191,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.564,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550015.144,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362583,"lon":139.6503811,"time":1585550015.625,"speed":0.10146486014127732,"bearing":71.91653442382813,"altitude":72.19999694824219,"accuracyHorizontal":4.931000232696533,"provider":"fused"},"result":true,"event_timestamp":1585550015.626117,"delta_ms":0},{"type":"getStatus","timestamp":1585550017.232,"event_timestamp":1585550015.732761,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550017.232,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.607,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550016.191,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362588,"lon":139.6503826,"time":1585550016.628,"speed":0.12497113645076752,"bearing":71.09178924560547,"altitude":72.19999694824219,"accuracyHorizontal":4.823999881744385,"provider":"fused"},"result":true,"event_timestamp":1585550016.629034,"delta_ms":0},{"type":"getStatus","timestamp":1585550018.293,"event_timestamp":1585550016.794428,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550018.293,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.665,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550017.232,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636259,"lon":139.6503848,"time":1585550017.634,"speed":0.16696442663669587,"bearing":78.25830078125,"altitude":72.19999694824219,"accuracyHorizontal":4.501999855041504,"provider":"fused"},"result":true,"event_timestamp":1585550017.634444,"delta_ms":0},{"type":"getStatus","timestamp":1585550019.358,"event_timestamp":1585550017.858782,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550019.358,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.724,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550018.293,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636259,"lon":139.6503864,"time":1585550018.622,"speed":0.15274026989936829,"bearing":85.44772338867188,"altitude":72.19999694824219,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585550018.623017,"delta_ms":0},{"type":"getStatus","timestamp":1585550020.416,"event_timestamp":1585550018.917185,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550020.416,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.794,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550019.358,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362598,"lon":139.6503873,"time":1585550019.627,"speed":0.12701836228370667,"bearing":62.921974182128909,"altitude":72.19999694824219,"accuracyHorizontal":4.288000106811523,"provider":"fused"},"result":true,"event_timestamp":1585550019.628093,"delta_ms":0},{"type":"getStatus","timestamp":1585550021.456,"event_timestamp":1585550019.95801,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550021.456,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.829,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550020.416,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362606,"lon":139.6503884,"time":1585550020.626,"speed":0.12957248091697694,"bearing":54.796478271484378,"altitude":72.19999694824219,"accuracyHorizontal":5.001999855041504,"provider":"fused"},"result":true,"event_timestamp":1585550020.626836,"delta_ms":0},{"type":"getStatus","timestamp":1585550022.523,"event_timestamp":1585550021.02409,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550022.523,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.897,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550021.456,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362619,"lon":139.6503914,"time":1585550021.628,"speed":0.21941615641117097,"bearing":59.90904235839844,"altitude":72.19999694824219,"accuracyHorizontal":5.895999908447266,"provider":"fused"},"result":true,"event_timestamp":1585550021.62904,"delta_ms":0},{"type":"getStatus","timestamp":1585550023.57,"event_timestamp":1585550022.072712,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550023.57,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.942,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550022.523,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362633,"lon":139.6503949,"time":1585550022.624,"speed":0.2785731852054596,"bearing":62.07638168334961,"altitude":72.19999694824219,"accuracyHorizontal":6.789000034332275,"provider":"fused"},"result":true,"event_timestamp":1585550022.625096,"delta_ms":0},{"type":"getStatus","timestamp":1585550024.641,"event_timestamp":1585550023.142289,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550024.641,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.017,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550023.57,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362655,"lon":139.6503995,"time":1585550023.631,"speed":0.37285059690475466,"bearing":60.30938720703125,"altitude":72.19999694824219,"accuracyHorizontal":8.361000061035157,"provider":"fused"},"result":true,"event_timestamp":1585550023.631424,"delta_ms":0},{"type":"getStatus","timestamp":1585550025.681,"event_timestamp":1585550024.183294,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550025.681,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.05,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550024.641,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362675,"lon":139.6504033,"time":1585550024.627,"speed":0.38705354928970339,"bearing":58.891414642333987,"altitude":72.19999694824219,"accuracyHorizontal":8.753999710083008,"provider":"fused"},"result":true,"event_timestamp":1585550024.627466,"delta_ms":0},{"type":"getStatus","timestamp":1585550026.742,"event_timestamp":1585550025.243958,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550026.742,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.115,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550025.681,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362688,"lon":139.6504063,"time":1585550025.618,"speed":0.353739857673645,"bearing":60.35575485229492,"altitude":72.19999694824219,"accuracyHorizontal":9.826000213623047,"provider":"fused"},"result":true,"event_timestamp":1585550025.6182759,"delta_ms":0},{"type":"getStatus","timestamp":1585550027.803,"event_timestamp":1585550026.304459,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550027.803,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.185,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550026.742,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362693,"lon":139.6504083,"time":1585550026.613,"speed":0.2792150676250458,"bearing":63.833740234375,"altitude":72.19999694824219,"accuracyHorizontal":10.184000015258789,"provider":"fused"},"result":true,"event_timestamp":1585550026.613412,"delta_ms":0},{"type":"getStatus","timestamp":1585550028.849,"event_timestamp":1585550027.350532,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550028.849,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.236,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550027.803,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362693,"lon":139.6504092,"time":1585550027.626,"speed":0.1884429156780243,"bearing":68.22429656982422,"altitude":72.19999694824219,"accuracyHorizontal":10.505000114440918,"provider":"fused"},"result":true,"event_timestamp":1585550027.627194,"delta_ms":0},{"type":"getStatus","timestamp":1585550029.919,"event_timestamp":1585550028.41986,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550029.919,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.293,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550028.849,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362686,"lon":139.650409,"time":1585550028.643,"speed":0.09163548797369003,"bearing":87.8856430053711,"altitude":72.19999694824219,"accuracyHorizontal":10.541000366210938,"provider":"fused"},"result":true,"event_timestamp":1585550028.644012,"delta_ms":0},{"type":"getStatus","timestamp":1585550030.952,"event_timestamp":1585550029.454418,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550030.952,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.309,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550029.919,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362682,"lon":139.6504083,"time":1585550029.633,"speed":0.029830049723386766,"bearing":121.28592681884766,"altitude":72.19999694824219,"accuracyHorizontal":10.720000267028809,"provider":"fused"},"result":true,"event_timestamp":1585550029.634151,"delta_ms":0},{"type":"getStatus","timestamp":1585550031.994,"event_timestamp":1585550030.495112,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550031.994,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.361,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550030.952,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362671,"lon":139.6504082,"time":1585550030.616,"speed":0.06193450465798378,"bearing":173.3542022705078,"altitude":72.19999694824219,"accuracyHorizontal":10.720000267028809,"provider":"fused"},"result":true,"event_timestamp":1585550030.616657,"delta_ms":0},{"type":"getStatus","timestamp":1585550033.053,"event_timestamp":1585550031.55439,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550033.053,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.437,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550031.994,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362667,"lon":139.6504076,"time":1585550031.648,"speed":0.06083570048213005,"bearing":198.32557678222657,"altitude":72.19999694824219,"accuracyHorizontal":10.720000267028809,"provider":"fused"},"result":true,"event_timestamp":1585550031.648667,"delta_ms":0},{"type":"getStatus","timestamp":1585550034.115,"event_timestamp":1585550032.617466,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550034.115,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.467,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550033.053,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362667,"lon":139.6504069,"time":1585550032.671,"speed":0.04917405918240547,"bearing":231.3162841796875,"altitude":72.19999694824219,"accuracyHorizontal":10.720000267028809,"provider":"fused"},"result":true,"event_timestamp":1585550032.672122,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362669,"lon":139.6504065,"time":1585550033.626,"speed":0.035882819443941119,"bearing":254.75045776367188,"altitude":72.19999694824219,"accuracyHorizontal":10.720000267028809,"provider":"fused"},"result":true,"event_timestamp":1585550033.626565,"delta_ms":0},{"type":"getStatus","timestamp":1585550035.167,"event_timestamp":1585550033.667564,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550035.167,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.541,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550034.115,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362665,"lon":139.6504047,"time":1585550034.629,"speed":0.09321532398462296,"bearing":256.5349426269531,"altitude":72.19999694824219,"accuracyHorizontal":10.505000114440918,"provider":"fused"},"result":true,"event_timestamp":1585550034.630079,"delta_ms":0},{"type":"getStatus","timestamp":1585550036.202,"event_timestamp":1585550034.703078,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550036.202,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.573,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550035.167,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362666,"lon":139.6504048,"time":1585550035.623,"speed":0.048691313713788989,"bearing":263.3272399902344,"altitude":72.19999694824219,"accuracyHorizontal":10.291000366210938,"provider":"fused"},"result":true,"event_timestamp":1585550035.624049,"delta_ms":0},{"type":"getStatus","timestamp":1585550037.252,"event_timestamp":1585550035.753436,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550037.252,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.629,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550036.202,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362667,"lon":139.6504038,"time":1585550036.631,"speed":0.06597951054573059,"bearing":271.2681884765625,"altitude":72.19999694824219,"accuracyHorizontal":10.184000015258789,"provider":"fused"},"result":true,"event_timestamp":1585550036.631712,"delta_ms":0},{"type":"getStatus","timestamp":1585550038.323,"event_timestamp":1585550036.824852,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550038.323,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.692,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550037.252,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362669,"lon":139.6504028,"time":1585550037.627,"speed":0.07722194492816925,"bearing":277.56597900390627,"altitude":72.19999694824219,"accuracyHorizontal":10.005000114440918,"provider":"fused"},"result":true,"event_timestamp":1585550037.627384,"delta_ms":0},{"type":"getStatus","timestamp":1585550039.369,"event_timestamp":1585550037.870939,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550039.369,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.742,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550038.323,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362677,"lon":139.6504009,"time":1585550038.626,"speed":0.12744799256324769,"bearing":290.0096435546875,"altitude":72.19999694824219,"accuracyHorizontal":9.826000213623047,"provider":"fused"},"result":true,"event_timestamp":1585550038.626778,"delta_ms":0},{"type":"getStatus","timestamp":1585550040.438,"event_timestamp":1585550038.939773,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550040.438,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.812,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550039.369,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362686,"lon":139.650399,"time":1585550039.615,"speed":0.16167975962162019,"bearing":296.4471435546875,"altitude":72.19999694824219,"accuracyHorizontal":9.64799976348877,"provider":"fused"},"result":true,"event_timestamp":1585550039.61601,"delta_ms":0},{"type":"getStatus","timestamp":1585550041.477,"event_timestamp":1585550039.978751,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550041.477,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.862,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550040.438,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362694,"lon":139.6503966,"time":1585550040.628,"speed":0.1945011466741562,"bearing":294.459716796875,"altitude":72.19999694824219,"accuracyHorizontal":9.468999862670899,"provider":"fused"},"result":true,"event_timestamp":1585550040.628758,"delta_ms":0},{"type":"getStatus","timestamp":1585550042.536,"event_timestamp":1585550041.037288,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550042.536,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.908,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550041.477,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362699,"lon":139.6503935,"time":1585550041.622,"speed":0.21014286577701569,"bearing":259.0168762207031,"altitude":72.19999694824219,"accuracyHorizontal":9.218999862670899,"provider":"fused"},"result":true,"event_timestamp":1585550041.622311,"delta_ms":0},{"type":"getStatus","timestamp":1585550043.588,"event_timestamp":1585550042.088908,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550043.588,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.966,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550042.536,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362704,"lon":139.650391,"time":1585550042.619,"speed":0.1508105844259262,"bearing":259.0574035644531,"altitude":72.19999694824219,"accuracyHorizontal":9.112000465393067,"provider":"fused"},"result":true,"event_timestamp":1585550042.619735,"delta_ms":0},{"type":"getStatus","timestamp":1585550044.634,"event_timestamp":1585550043.134872,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550044.634,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.015,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550043.588,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362706,"lon":139.6503884,"time":1585550043.622,"speed":0.1515520066022873,"bearing":259.1186828613281,"altitude":72.19999694824219,"accuracyHorizontal":8.789999961853028,"provider":"fused"},"result":true,"event_timestamp":1585550043.622992,"delta_ms":0},{"type":"getStatus","timestamp":1585550045.697,"event_timestamp":1585550044.198065,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550045.697,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.075,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550044.634,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362712,"lon":139.6503858,"time":1585550044.623,"speed":0.18663181364536286,"bearing":273.5506591796875,"altitude":72.19999694824219,"accuracyHorizontal":7.7179999351501469,"provider":"fused"},"result":true,"event_timestamp":1585550044.623539,"delta_ms":0},{"type":"getStatus","timestamp":1585550046.735,"event_timestamp":1585550045.236214,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550046.735,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.112,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550045.697,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362715,"lon":139.6503846,"time":1585550045.625,"speed":0.14382806420326234,"bearing":277.87298583984377,"altitude":72.19999694824219,"accuracyHorizontal":7.145999908447266,"provider":"fused"},"result":true,"event_timestamp":1585550045.625249,"delta_ms":0},{"type":"getStatus","timestamp":1585550047.8,"event_timestamp":1585550046.300559,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550047.8,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.175,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550046.735,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362718,"lon":139.6503836,"time":1585550046.624,"speed":0.11263300478458405,"bearing":287.0377197265625,"altitude":72.19999694824219,"accuracyHorizontal":5.925000190734863,"provider":"fused"},"result":true,"event_timestamp":1585550046.625115,"delta_ms":0},{"type":"getStatus","timestamp":1585550048.833,"event_timestamp":1585550047.335138,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550048.833,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.209,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550047.8,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362724,"lon":139.6503827,"time":1585550047.645,"speed":0.10624141991138458,"bearing":298.81719970703127,"altitude":72.19999694824219,"accuracyHorizontal":4.989999771118164,"provider":"fused"},"result":true,"event_timestamp":1585550047.645745,"delta_ms":0},{"type":"getStatus","timestamp":1585550049.891,"event_timestamp":1585550048.392854,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550049.891,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.246,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550048.833,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362729,"lon":139.6503821,"time":1585550048.636,"speed":0.08876248449087143,"bearing":305.7112121582031,"altitude":72.19999694824219,"accuracyHorizontal":4.808000087738037,"provider":"fused"},"result":true,"event_timestamp":1585550048.636284,"delta_ms":0},{"type":"getStatus","timestamp":1585550050.962,"event_timestamp":1585550049.4632,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550050.962,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.326,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550049.891,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362734,"lon":139.6503816,"time":1585550049.625,"speed":0.07729669660329819,"bearing":314.0423889160156,"altitude":72.19999694824219,"accuracyHorizontal":3.9769999980926515,"provider":"fused"},"result":true,"event_timestamp":1585550049.625472,"delta_ms":0},{"type":"getStatus","timestamp":1585550052.019,"event_timestamp":1585550050.521116,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550052.019,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.394,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550050.962,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362732,"lon":139.6503801,"time":1585550050.632,"speed":0.10135642439126969,"bearing":275.24102783203127,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550050.632636,"delta_ms":0},{"type":"getStatus","timestamp":1585550053.084,"event_timestamp":1585550051.585101,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550053.084,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.452,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550052.019,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362735,"lon":139.650379,"time":1585550051.652,"speed":0.10460519045591355,"bearing":284.50421142578127,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550051.652442,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362732,"lon":139.6503789,"time":1585550052.627,"speed":0.047465529292821887,"bearing":260.7987365722656,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550052.627741,"delta_ms":0},{"type":"getStatus","timestamp":1585550054.144,"event_timestamp":1585550052.645198,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550054.144,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.517,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550053.084,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362731,"lon":139.650379,"time":1585550053.624,"speed":0.021383408457040788,"bearing":238.5330047607422,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550053.6248,"delta_ms":0},{"type":"getStatus","timestamp":1585550055.191,"event_timestamp":1585550053.691614,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550055.191,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.567,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550054.144,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362729,"lon":139.6503787,"time":1585550054.631,"speed":0.026616709306836129,"bearing":230.33753967285157,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550054.631821,"delta_ms":0},{"type":"getStatus","timestamp":1585550056.238,"event_timestamp":1585550054.739022,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550056.238,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.607,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550055.191,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362727,"lon":139.6503785,"time":1585550055.624,"speed":0.028614312410354615,"bearing":223.93763732910157,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550055.624576,"delta_ms":0},{"type":"getStatus","timestamp":1585550057.284,"event_timestamp":1585550055.785819,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550057.284,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.66,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550056.238,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362726,"lon":139.6503785,"time":1585550056.635,"speed":0.018202709034085275,"bearing":200.96224975585938,"altitude":68.53515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550056.63557,"delta_ms":0},{"type":"getStatus","timestamp":1585550058.329,"event_timestamp":1585550056.82991,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550058.329,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.694,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550057.284,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362723,"lon":139.650378,"time":1585550057.624,"speed":0.03795367106795311,"bearing":231.31422424316407,"altitude":68.560302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550057.624553,"delta_ms":0},{"type":"getStatus","timestamp":1585550059.393,"event_timestamp":1585550057.894666,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550059.393,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.769,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550058.329,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362735,"lon":139.6503775,"time":1585550058.624,"speed":0.0722259134054184,"bearing":328.8741455078125,"altitude":68.529052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550058.624354,"delta_ms":0},{"type":"getStatus","timestamp":1585550060.463,"event_timestamp":1585550058.96414,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550060.463,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.839,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550059.393,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362744,"lon":139.6503772,"time":1585550059.623,"speed":0.09351986646652222,"bearing":338.44970703125,"altitude":68.4862060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550059.624076,"delta_ms":0},{"type":"getStatus","timestamp":1585550061.51,"event_timestamp":1585550060.011212,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550061.51,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.887,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550060.463,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362747,"lon":139.650377,"time":1585550060.628,"speed":0.061587247997522357,"bearing":338.95965576171877,"altitude":68.3741455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550060.628978,"delta_ms":0},{"type":"getStatus","timestamp":1585550062.58,"event_timestamp":1585550061.081551,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550062.58,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.952,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550061.51,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362749,"lon":139.6503764,"time":1585550061.627,"speed":0.055182650685310367,"bearing":309.72015380859377,"altitude":68.160888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550061.628117,"delta_ms":0},{"type":"getStatus","timestamp":1585550063.644,"event_timestamp":1585550062.145709,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550063.644,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.017,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550062.58,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362744,"lon":139.6503764,"time":1585550062.62,"speed":0.024847963824868203,"bearing":230.3623046875,"altitude":68.21826171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550062.62065,"delta_ms":0},{"type":"getStatus","timestamp":1585550064.71,"event_timestamp":1585550063.211567,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550064.71,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.09,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550063.644,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362744,"lon":139.6503758,"time":1585550063.628,"speed":0.03961234539747238,"bearing":256.6249084472656,"altitude":68.18389892578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550063.628449,"delta_ms":0},{"type":"getStatus","timestamp":1585550065.78,"event_timestamp":1585550064.281438,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550065.78,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.152,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550064.71,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362745,"lon":139.6503759,"time":1585550064.624,"speed":0.010729210451245308,"bearing":307.7216796875,"altitude":68.09814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550064.624181,"delta_ms":0},{"type":"getStatus","timestamp":1585550066.845,"event_timestamp":1585550065.346391,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550066.845,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.221,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550065.78,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362745,"lon":139.650376,"time":1585550065.638,"speed":0.002417321316897869,"bearing":43.570472717285159,"altitude":68.19158935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550065.638175,"delta_ms":0},{"type":"getStatus","timestamp":1585550067.919,"event_timestamp":1585550066.419483,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550067.919,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.281,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550066.845,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362751,"lon":139.650376,"time":1585550066.623,"speed":0.03543653339147568,"bearing":358.2055969238281,"altitude":68.0372314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550066.623984,"delta_ms":0},{"type":"getStatus","timestamp":1585550068.959,"event_timestamp":1585550067.460057,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550068.959,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.336,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550067.919,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362754,"lon":139.6503757,"time":1585550067.618,"speed":0.04057032987475395,"bearing":334.15216064453127,"altitude":68.09033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550067.618621,"delta_ms":0},{"type":"getStatus","timestamp":1585550070.005,"event_timestamp":1585550068.505832,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550070.005,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.387,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550068.959,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362757,"lon":139.6503747,"time":1585550068.619,"speed":0.06828611344099045,"bearing":301.1082458496094,"altitude":67.93511962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550068.619422,"delta_ms":0},{"type":"getStatus","timestamp":1585550071.045,"event_timestamp":1585550069.546375,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550071.045,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.426,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550070.005,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362762,"lon":139.6503737,"time":1585550069.632,"speed":0.08918111026287079,"bearing":299.7877197265625,"altitude":67.920166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550069.632755,"delta_ms":0},{"type":"getStatus","timestamp":1585550072.09,"event_timestamp":1585550070.591548,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550072.09,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.458,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550071.045,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362762,"lon":139.6503729,"time":1585550070.638,"speed":0.07772786170244217,"bearing":285.5841369628906,"altitude":68.07684326171875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550070.639033,"delta_ms":0},{"type":"getStatus","timestamp":1585550073.134,"event_timestamp":1585550071.635178,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550073.134,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.496,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550072.09,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362766,"lon":139.6503726,"time":1585550071.688,"speed":0.05425317957997322,"bearing":305.79656982421877,"altitude":68.1533203125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550071.68881,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362763,"lon":139.650372,"time":1585550072.634,"speed":0.0509273037314415,"bearing":263.5149230957031,"altitude":68.20208740234375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550072.634923,"delta_ms":0},{"type":"getStatus","timestamp":1585550074.182,"event_timestamp":1585550072.683438,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550074.182,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.548,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550073.134,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362766,"lon":139.6503716,"time":1585550073.63,"speed":0.049309007823467258,"bearing":293.24664306640627,"altitude":68.2344970703125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550073.630586,"delta_ms":0},{"type":"getStatus","timestamp":1585550075.255,"event_timestamp":1585550073.75662,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550075.255,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.625,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550074.182,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362771,"lon":139.6503709,"time":1585550074.625,"speed":0.06677355617284775,"bearing":308.1440124511719,"altitude":68.26080322265625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550074.625525,"delta_ms":0},{"type":"getStatus","timestamp":1585550076.323,"event_timestamp":1585550074.824337,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550076.323,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.698,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550075.255,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362772,"lon":139.6503704,"time":1585550075.619,"speed":0.05525815114378929,"bearing":293.3749084472656,"altitude":68.44061279296875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550075.619279,"delta_ms":0},{"type":"getStatus","timestamp":1585550077.379,"event_timestamp":1585550075.880678,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550077.379,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.76,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550076.323,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636277,"lon":139.65037,"time":1585550076.628,"speed":0.03960666060447693,"bearing":266.7023010253906,"altitude":68.5162353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550076.628372,"delta_ms":0},{"type":"getStatus","timestamp":1585550078.442,"event_timestamp":1585550076.942875,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550078.442,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.814,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550077.379,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362767,"lon":139.65037,"time":1585550077.619,"speed":0.028752190992236139,"bearing":221.6693878173828,"altitude":68.42449951171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550077.619373,"delta_ms":0},{"type":"getStatus","timestamp":1585550079.486,"event_timestamp":1585550077.987286,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550079.486,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.867,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550078.442,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362767,"lon":139.6503696,"time":1585550078.627,"speed":0.031369648873806,"bearing":259.8405456542969,"altitude":68.484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550078.627734,"delta_ms":0},{"type":"getStatus","timestamp":1585550080.527,"event_timestamp":1585550079.028043,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550080.527,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.9,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550079.486,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362766,"lon":139.6503686,"time":1585550079.619,"speed":0.06128256022930145,"bearing":260.7703857421875,"altitude":68.4884033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550079.619508,"delta_ms":0},{"type":"getStatus","timestamp":1585550081.572,"event_timestamp":1585550080.073593,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550081.572,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.953,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550080.527,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362765,"lon":139.6503681,"time":1585550080.618,"speed":0.05670984834432602,"bearing":258.4896545410156,"altitude":68.5328369140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550080.618972,"delta_ms":0},{"type":"getStatus","timestamp":1585550082.613,"event_timestamp":1585550081.115074,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550082.613,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.995,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550081.572,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362766,"lon":139.6503673,"time":1585550081.64,"speed":0.06195995584130287,"bearing":268.7490539550781,"altitude":68.53961181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550081.640232,"delta_ms":0},{"type":"getStatus","timestamp":1585550083.685,"event_timestamp":1585550082.186103,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550083.685,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.045,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550082.613,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636276,"lon":139.6503668,"time":1585550082.63,"speed":0.06551270931959152,"bearing":238.5582733154297,"altitude":68.87396240234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550082.630778,"delta_ms":0},{"type":"getStatus","timestamp":1585550084.731,"event_timestamp":1585550083.232578,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550084.731,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.101,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550083.685,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362759,"lon":139.6503654,"time":1585550083.631,"speed":0.0983305498957634,"bearing":255.03050231933595,"altitude":69.05548095703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550083.631157,"delta_ms":0},{"type":"getStatus","timestamp":1585550085.795,"event_timestamp":1585550084.295948,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550085.795,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.164,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550084.731,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362756,"lon":139.6503643,"time":1585550084.624,"speed":0.10064475238323212,"bearing":254.30718994140626,"altitude":69.073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550084.624865,"delta_ms":0},{"type":"getStatus","timestamp":1585550086.841,"event_timestamp":1585550085.342675,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550086.841,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.217,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550085.795,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362761,"lon":139.6503646,"time":1585550085.622,"speed":0.03157814219594002,"bearing":310.11761474609377,"altitude":69.093017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550085.622861,"delta_ms":0},{"type":"getStatus","timestamp":1585550087.899,"event_timestamp":1585550086.400967,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550087.899,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.277,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550086.841,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362762,"lon":139.6503641,"time":1585550086.625,"speed":0.042283207178115848,"bearing":292.0575256347656,"altitude":69.08721923828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550086.625321,"delta_ms":0},{"type":"getStatus","timestamp":1585550088.97,"event_timestamp":1585550087.470861,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550088.97,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.345,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550087.899,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362758,"lon":139.6503631,"time":1585550087.614,"speed":0.07350253313779831,"bearing":252.00390625,"altitude":69.17608642578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550087.614995,"delta_ms":0},{"type":"getStatus","timestamp":1585550090.031,"event_timestamp":1585550088.5323,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550090.031,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.417,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550088.97,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362755,"lon":139.6503629,"time":1585550088.621,"speed":0.0476096011698246,"bearing":237.6389923095703,"altitude":69.11419677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550088.622155,"delta_ms":0},{"type":"getStatus","timestamp":1585550091.091,"event_timestamp":1585550089.592412,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550091.091,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.47,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550090.031,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362758,"lon":139.6503637,"time":1585550089.638,"speed":0.030290160328149797,"bearing":78.75153350830078,"altitude":69.1495361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550089.638963,"delta_ms":0},{"type":"getStatus","timestamp":1585550092.131,"event_timestamp":1585550090.632311,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550092.131,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.493,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550091.091,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362751,"lon":139.6503637,"time":1585550090.632,"speed":0.04217848181724548,"bearing":166.1497039794922,"altitude":69.3966064453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550090.632628,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362753,"lon":139.6503638,"time":1585550091.632,"speed":0.011717252433300019,"bearing":124.78228759765625,"altitude":69.43023681640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550091.632349,"delta_ms":0},{"type":"getStatus","timestamp":1585550093.172,"event_timestamp":1585550091.673392,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550093.172,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.54,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550092.131,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362752,"lon":139.6503634,"time":1585550092.63,"speed":0.016848424449563028,"bearing":246.78466796875,"altitude":69.46875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550092.630308,"delta_ms":0},{"type":"getStatus","timestamp":1585550094.204,"event_timestamp":1585550092.705303,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550094.204,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.574,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550093.172,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362761,"lon":139.6503636,"time":1585550093.627,"speed":0.052283089607954028,"bearing":3.1002886295318605,"altitude":69.55694580078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550093.627583,"delta_ms":0},{"type":"getStatus","timestamp":1585550095.256,"event_timestamp":1585550093.757998,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550095.256,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.629,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550094.204,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362769,"lon":139.6503639,"time":1585550094.62,"speed":0.07822353392839432,"bearing":13.108831405639649,"altitude":69.64495849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550094.620901,"delta_ms":0},{"type":"getStatus","timestamp":1585550096.334,"event_timestamp":1585550094.83449,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550096.334,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.714,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550095.256,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362768,"lon":139.6503631,"time":1585550095.702,"speed":0.04050257056951523,"bearing":306.20269775390627,"altitude":69.7091064453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550095.702657,"delta_ms":0},{"type":"getStatus","timestamp":1585550097.377,"event_timestamp":1585550095.878695,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550097.377,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.675,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550096.334,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362767,"lon":139.6503621,"time":1585550096.643,"speed":0.06979082524776459,"bearing":273.1214904785156,"altitude":69.67364501953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550096.644136,"delta_ms":0},{"type":"getStatus","timestamp":1585550098.448,"event_timestamp":1585550096.949072,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550098.448,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.805,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550097.377,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362783,"lon":139.6503618,"time":1585550097.632,"speed":0.1148976981639862,"bearing":336.4787902832031,"altitude":69.45123291015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550097.632195,"delta_ms":0},{"type":"getStatus","timestamp":1585550099.51,"event_timestamp":1585550098.011515,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550099.51,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.878,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550098.448,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362795,"lon":139.6503622,"time":1585550098.628,"speed":0.12358952313661576,"bearing":2.237924337387085,"altitude":69.5550537109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550098.62889,"delta_ms":0},{"type":"getStatus","timestamp":1585550100.582,"event_timestamp":1585550099.083264,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550100.582,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.954,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550099.51,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362803,"lon":139.6503627,"time":1585550099.623,"speed":0.10501891374588013,"bearing":14.043379783630371,"altitude":69.4119873046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550099.623985,"delta_ms":0},{"type":"getStatus","timestamp":1585550101.623,"event_timestamp":1585550100.124758,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550101.623,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550100.582,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362825,"lon":139.6503634,"time":1585550100.629,"speed":0.1936207115650177,"bearing":14.066844940185547,"altitude":69.2005615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550100.629415,"delta_ms":0},{"type":"getStatus","timestamp":1585550102.693,"event_timestamp":1585550101.193558,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550102.693,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.064,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550101.623,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362818,"lon":139.6503608,"time":1585550101.63,"speed":0.25932133197784426,"bearing":259.97686767578127,"altitude":69.1201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550101.63103,"delta_ms":0},{"type":"getStatus","timestamp":1585550103.729,"event_timestamp":1585550102.230651,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550103.729,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.099,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550102.693,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362809,"lon":139.6503572,"time":1585550102.615,"speed":0.40903782844543459,"bearing":258.97576904296877,"altitude":69.08441162109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550102.616184,"delta_ms":0},{"type":"getStatus","timestamp":1585550104.791,"event_timestamp":1585550103.292483,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550104.791,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.176,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550103.729,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362791,"lon":139.6503525,"time":1585550103.625,"speed":0.3505229949951172,"bearing":258.0176696777344,"altitude":68.836181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550103.625921,"delta_ms":0},{"type":"getStatus","timestamp":1585550105.862,"event_timestamp":1585550104.363344,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550105.862,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.237,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550104.791,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362774,"lon":139.6503496,"time":1585550104.627,"speed":0.2043979912996292,"bearing":257.2705993652344,"altitude":68.70806884765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550104.627374,"delta_ms":0},{"type":"getStatus","timestamp":1585550106.932,"event_timestamp":1585550105.433473,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550106.932,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.305,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550105.862,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362753,"lon":139.6503488,"time":1585550105.621,"speed":0.19007763266563416,"bearing":257.0050048828125,"altitude":68.5863037109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550105.622135,"delta_ms":0},{"type":"getStatus","timestamp":1585550108.003,"event_timestamp":1585550106.504566,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550108.003,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.382,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550106.932,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362735,"lon":139.650351,"time":1585550106.627,"speed":0.49694007635116579,"bearing":255.9202880859375,"altitude":68.666015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550106.627458,"delta_ms":0},{"type":"getStatus","timestamp":1585550109.052,"event_timestamp":1585550107.553788,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550109.052,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.425,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550108.003,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362716,"lon":139.6503523,"time":1585550107.632,"speed":0.4600120186805725,"bearing":257.99957275390627,"altitude":68.5494384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550107.633037,"delta_ms":0},{"type":"getStatus","timestamp":1585550110.124,"event_timestamp":1585550108.624734,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550110.124,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.492,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550109.052,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362713,"lon":139.650348,"time":1585550108.686,"speed":0.4400138556957245,"bearing":258.0002746582031,"altitude":68.842529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550108.687164,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362693,"lon":139.6503414,"time":1585550109.62,"speed":1.1144870519638062,"bearing":257.9530944824219,"altitude":68.8193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550109.620974,"delta_ms":0},{"type":"getStatus","timestamp":1585550111.173,"event_timestamp":1585550109.673538,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550111.173,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.553,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550110.124,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362668,"lon":139.6503315,"time":1585550110.634,"speed":0.7242523431777954,"bearing":243.66265869140626,"altitude":68.871826171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550110.63474,"delta_ms":0},{"type":"getStatus","timestamp":1585550112.215,"event_timestamp":1585550110.716429,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550112.215,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.581,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550111.173,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362669,"lon":139.6503243,"time":1585550111.623,"speed":0.728512704372406,"bearing":260.8957824707031,"altitude":69.115478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550111.623415,"delta_ms":0},{"type":"getStatus","timestamp":1585550113.253,"event_timestamp":1585550111.755253,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550113.253,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.63,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550112.215,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362675,"lon":139.6503179,"time":1585550112.627,"speed":0.724380612373352,"bearing":260.93817138671877,"altitude":69.531982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550112.627881,"delta_ms":0},{"type":"getStatus","timestamp":1585550114.3,"event_timestamp":1585550112.801655,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550114.3,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.673,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550113.253,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362712,"lon":139.6503082,"time":1585550113.633,"speed":1.2383216619491578,"bearing":271.0416259765625,"altitude":69.7298583984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550113.633682,"delta_ms":0},{"type":"getStatus","timestamp":1585550115.369,"event_timestamp":1585550113.871447,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550115.369,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.736,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550114.3,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6362736,"lon":139.6502983,"time":1585550114.625,"speed":0.9123374223709106,"bearing":287.8675537109375,"altitude":69.04888916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550114.625569,"delta_ms":0},{"type":"getStatus","timestamp":1585550116.421,"event_timestamp":1585550114.922514,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550116.421,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.796,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550115.369,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362774,"lon":139.6502938,"time":1585550115.626,"speed":0.22044678032398225,"bearing":294.96356201171877,"altitude":68.9283447265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550115.626939,"delta_ms":0},{"type":"getStatus","timestamp":1585550117.488,"event_timestamp":1585550115.989,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550117.488,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.862,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550116.421,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362797,"lon":139.6502947,"time":1585550116.633,"speed":0.22025828063488007,"bearing":295.0052185058594,"altitude":68.863525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550116.633688,"delta_ms":0},{"type":"getStatus","timestamp":1585550118.532,"event_timestamp":1585550117.035614,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550118.532,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.899,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550117.488,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6362826,"lon":139.6502951,"time":1585550117.627,"speed":0.22813613712787629,"bearing":342.2128601074219,"altitude":68.7607421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550117.627607,"delta_ms":0},{"type":"getStatus","timestamp":1585550119.604,"event_timestamp":1585550118.104756,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550119.604,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.977,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550118.532,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6362872,"lon":139.6502943,"time":1585550118.631,"speed":0.40998950600624087,"bearing":324.0162353515625,"altitude":68.89691162109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550118.631274,"delta_ms":0},{"type":"getStatus","timestamp":1585550120.652,"event_timestamp":1585550119.154231,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550120.652,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.021,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550119.604,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362944,"lon":139.6502927,"time":1585550119.625,"speed":1.4188488721847535,"bearing":348.99346923828127,"altitude":69.1131591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550119.625492,"delta_ms":0},{"type":"getStatus","timestamp":1585550121.72,"event_timestamp":1585550120.221248,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550121.72,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.095,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550120.652,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363096,"lon":139.6502926,"time":1585550120.627,"speed":1.8889145851135255,"bearing":340.0468444824219,"altitude":69.13037109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550120.627939,"delta_ms":0},{"type":"getStatus","timestamp":1585550122.784,"event_timestamp":1585550121.285515,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550122.784,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.157,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550121.72,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363287,"lon":139.6502938,"time":1585550121.641,"speed":2.370558738708496,"bearing":6.539301872253418,"altitude":69.24676513671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550121.641714,"delta_ms":0},{"type":"getStatus","timestamp":1585550123.83,"event_timestamp":1585550122.337962,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550123.83,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.189,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550122.784,"bearing":82.29185485839844}]},"delta_ms":7},{"type":"updateLocation","location":{"lat":35.6363512,"lon":139.6503079,"time":1585550122.617,"speed":2.975844621658325,"bearing":31.641176223754884,"altitude":69.49853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550122.617792,"delta_ms":0},{"type":"getStatus","timestamp":1585550124.905,"event_timestamp":1585550123.408063,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550124.905,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.288,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550123.83,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.636372,"lon":139.6503385,"time":1585550123.632,"speed":3.8148603439331056,"bearing":59.358333587646487,"altitude":69.7020263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550123.632322,"delta_ms":0},{"type":"getStatus","timestamp":1585550125.952,"event_timestamp":1585550124.453866,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550125.952,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.32,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550124.905,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363836,"lon":139.6503861,"time":1585550124.658,"speed":4.569461822509766,"bearing":84.91651916503906,"altitude":69.981689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550124.65894,"delta_ms":0},{"type":"getStatus","timestamp":1585550126.983,"event_timestamp":1585550125.486294,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550126.983,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.325,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550125.952,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6363842,"lon":139.6504406,"time":1585550125.63,"speed":5.348203659057617,"bearing":89.61857604980469,"altitude":70.1131591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550125.630286,"delta_ms":0},{"type":"getStatus","timestamp":1585550128.034,"event_timestamp":1585550126.536032,"result":{"route_state":"tracking","location":{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550128.034,"speed":1.2904869318008423,"bearing":82.29185485839844,"altitude":72.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4782.46435546875,"remaining_leg_duration":792.920999999,"step_index":0,"remaining_step_distance":247.90765380859376,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.404,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63637161254883,"lon":139.65054321289063,"time":1585550126.983,"bearing":82.29185485839844}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6363883,"lon":139.6505085,"time":1585550126.629,"speed":6.153051853179932,"bearing":80.09490203857422,"altitude":70.1212158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550126.629948,"delta_ms":0},{"type":"getStatus","timestamp":1585550129.082,"event_timestamp":1585550127.584913,"result":{"route_state":"tracking","location":{"lat":35.636383056640628,"lon":139.65066528320313,"time":1585550129.082,"speed":5.9837470054626469,"bearing":82.29185485839844,"altitude":70.1212158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4771.34912109375,"remaining_leg_duration":790.920999999,"step_index":0,"remaining_step_distance":236.79202270507813,"remaining_step_duration":49.0,"state_message":"","in_tunnel":false,"predicted":2.453,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636383056640628,"lon":139.65066528320313,"time":1585550129.082,"bearing":82.29185485839844}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6363998,"lon":139.6505815,"time":1585550127.641,"speed":6.709576606750488,"bearing":80.9576644897461,"altitude":70.395751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550127.641739,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364092,"lon":139.6506577,"time":1585550128.626,"speed":6.6900858879089359,"bearing":81.9958267211914,"altitude":70.784423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550128.626596,"delta_ms":0},{"type":"getStatus","timestamp":1585550130.135,"event_timestamp":1585550128.635724,"result":{"route_state":"tracking","location":{"lat":35.63639450073242,"lon":139.65077209472657,"time":1585550130.135,"speed":6.863173961639404,"bearing":82.29185485839844,"altitude":70.784423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4761.6015625,"remaining_leg_duration":788.920999999,"step_index":0,"remaining_step_distance":227.04478454589845,"remaining_step_duration":47.0,"state_message":"","in_tunnel":false,"predicted":1.509,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63639450073242,"lon":139.65077209472657,"time":1585550130.135,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364171,"lon":139.6507298,"time":1585550129.625,"speed":5.901375770568848,"bearing":81.00177764892578,"altitude":70.9052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550129.625827,"delta_ms":0},{"type":"getStatus","timestamp":1585550131.168,"event_timestamp":1585550129.669377,"result":{"route_state":"tracking","location":{"lat":35.63640213012695,"lon":139.6508331298828,"time":1585550131.168,"speed":6.307445526123047,"bearing":82.29185485839844,"altitude":70.9052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4756.01611328125,"remaining_leg_duration":787.920999999,"step_index":0,"remaining_step_distance":221.45913696289063,"remaining_step_duration":46.0,"state_message":"","in_tunnel":false,"predicted":1.543,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63640213012695,"lon":139.6508331298828,"time":1585550131.168,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364243,"lon":139.6507884,"time":1585550130.637,"speed":4.41634464263916,"bearing":79.14006042480469,"altitude":71.05023193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550130.638108,"delta_ms":0},{"type":"getStatus","timestamp":1585550132.208,"event_timestamp":1585550130.709525,"result":{"route_state":"tracking","location":{"lat":35.636409759521487,"lon":139.65089416503907,"time":1585550132.208,"speed":5.1210432052612309,"bearing":82.29185485839844,"altitude":71.05023193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4750.43017578125,"remaining_leg_duration":786.920999999,"step_index":0,"remaining_step_distance":215.87315368652345,"remaining_step_duration":45.0,"state_message":"","in_tunnel":false,"predicted":1.571,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636409759521487,"lon":139.65089416503907,"time":1585550132.208,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364292,"lon":139.65083,"time":1585550131.635,"speed":3.624563455581665,"bearing":80.9934310913086,"altitude":71.11138916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550131.635646,"delta_ms":0},{"type":"getStatus","timestamp":1585550133.246,"event_timestamp":1585550131.747711,"result":{"route_state":"tracking","location":{"lat":35.636409759521487,"lon":139.65090942382813,"time":1585550133.246,"speed":4.155182838439941,"bearing":82.29185485839844,"altitude":71.11138916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4749.0615234375,"remaining_leg_duration":785.920999999,"step_index":0,"remaining_step_distance":214.50474548339845,"remaining_step_duration":45.0,"state_message":"","in_tunnel":false,"predicted":1.611,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636409759521487,"lon":139.65090942382813,"time":1585550133.246,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636433,"lon":139.6508668,"time":1585550132.63,"speed":3.5301032066345217,"bearing":80.99931335449219,"altitude":71.31072998046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550132.63096,"delta_ms":0},{"type":"getStatus","timestamp":1585550134.293,"event_timestamp":1585550132.794141,"result":{"route_state":"tracking","location":{"lat":35.636417388916019,"lon":139.65097045898438,"time":1585550134.293,"speed":3.6668002605438234,"bearing":82.29185485839844,"altitude":71.31072998046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4743.4755859375,"remaining_leg_duration":784.920999999,"step_index":0,"remaining_step_distance":208.91891479492188,"remaining_step_duration":43.0,"state_message":"","in_tunnel":false,"predicted":1.663,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636417388916019,"lon":139.65097045898438,"time":1585550134.293,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364369,"lon":139.6509037,"time":1585550133.624,"speed":3.460644006729126,"bearing":81.0009536743164,"altitude":71.43603515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550133.624353,"delta_ms":0},{"type":"getStatus","timestamp":1585550135.34,"event_timestamp":1585550133.840863,"result":{"route_state":"tracking","location":{"lat":35.636417388916019,"lon":139.65098571777345,"time":1585550135.34,"speed":3.4628119468688967,"bearing":82.29185485839844,"altitude":71.43603515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4742.107421875,"remaining_leg_duration":784.920999999,"step_index":0,"remaining_step_distance":207.55029296875,"remaining_step_duration":43.0,"state_message":"","in_tunnel":false,"predicted":1.716,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.636417388916019,"lon":139.65098571777345,"time":1585550135.34,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364405,"lon":139.6509401,"time":1585550134.615,"speed":3.5286710262298586,"bearing":80.9976577758789,"altitude":71.42327880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550134.61593,"delta_ms":0},{"type":"getStatus","timestamp":1585550136.37,"event_timestamp":1585550134.871524,"result":{"route_state":"tracking","location":{"lat":35.63642120361328,"lon":139.65101623535157,"time":1585550136.37,"speed":3.443427801132202,"bearing":82.29185485839844,"altitude":71.42327880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4739.314453125,"remaining_leg_duration":783.920999999,"step_index":0,"remaining_step_distance":204.75758361816407,"remaining_step_duration":43.0,"state_message":"","in_tunnel":false,"predicted":1.755,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63642120361328,"lon":139.65101623535157,"time":1585550136.37,"bearing":82.29185485839844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364449,"lon":139.6509797,"time":1585550135.629,"speed":4.036069393157959,"bearing":81.9930191040039,"altitude":71.351806640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550135.629906,"delta_ms":0},{"type":"getStatus","timestamp":1585550137.399,"event_timestamp":1585550135.899878,"result":{"route_state":"tracking","location":{"lat":35.63642883300781,"lon":139.6510772705078,"time":1585550137.399,"speed":3.853048801422119,"bearing":82.73135375976563,"altitude":71.351806640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4733.7275390625,"remaining_leg_duration":782.920999999,"step_index":0,"remaining_step_distance":199.17074584960938,"remaining_step_duration":41.0,"state_message":"","in_tunnel":false,"predicted":1.77,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63642501831055,"lon":139.65103149414063,"time":1585550136.634,"bearing":82.29185485839844},{"lat":35.63642883300781,"lon":139.6510772705078,"time":1585550137.399,"bearing":82.73135375976563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364509,"lon":139.6510273,"time":1585550136.626,"speed":4.989301681518555,"bearing":80.99788665771485,"altitude":71.322509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550136.62692,"delta_ms":0},{"type":"getStatus","timestamp":1585550138.427,"event_timestamp":1585550136.928168,"result":{"route_state":"tracking","location":{"lat":35.636436462402347,"lon":139.65113830566407,"time":1585550138.427,"speed":4.5492353439331059,"bearing":82.73135375976563,"altitude":71.322509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4728.14306640625,"remaining_leg_duration":781.920999999,"step_index":0,"remaining_step_distance":193.58631896972657,"remaining_step_duration":40.0,"state_message":"","in_tunnel":false,"predicted":1.801,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.636436462402347,"lon":139.65113830566407,"time":1585550138.427,"bearing":82.73135375976563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364593,"lon":139.6510874,"time":1585550137.628,"speed":6.0190277099609379,"bearing":80.99490356445313,"altitude":71.67529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550137.628993,"delta_ms":0},{"type":"getStatus","timestamp":1585550139.46,"event_timestamp":1585550137.960851,"result":{"route_state":"tracking","location":{"lat":35.63644027709961,"lon":139.65121459960938,"time":1585550139.46,"speed":5.506431579589844,"bearing":82.73135375976563,"altitude":71.67529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4721.2373046875,"remaining_leg_duration":780.920999999,"step_index":0,"remaining_step_distance":186.68040466308595,"remaining_step_duration":39.0,"state_message":"","in_tunnel":false,"predicted":1.832,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63644027709961,"lon":139.65121459960938,"time":1585550139.46,"bearing":82.73135375976563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364696,"lon":139.651159,"time":1585550138.632,"speed":6.998435020446777,"bearing":80.99569702148438,"altitude":71.906494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550138.6324,"delta_ms":0},{"type":"getStatus","timestamp":1585550140.489,"event_timestamp":1585550138.989739,"result":{"route_state":"tracking","location":{"lat":35.63644790649414,"lon":139.6512908935547,"time":1585550140.489,"speed":6.395167827606201,"bearing":82.73135375976563,"altitude":71.906494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4714.28369140625,"remaining_leg_duration":778.920999999,"step_index":0,"remaining_step_distance":179.72669982910157,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.857,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63644790649414,"lon":139.6512908935547,"time":1585550140.489,"bearing":82.73135375976563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6364799,"lon":139.6512391,"time":1585550139.625,"speed":7.495699882507324,"bearing":80.99993896484375,"altitude":71.9261474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550139.626053,"delta_ms":0},{"type":"getStatus","timestamp":1585550141.521,"event_timestamp":1585550140.022446,"result":{"route_state":"tracking","location":{"lat":35.6364631652832,"lon":139.65139770507813,"time":1585550141.521,"speed":7.224878311157227,"bearing":82.73135375976563,"altitude":71.9261474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4704.48681640625,"remaining_leg_duration":776.920999999,"step_index":0,"remaining_step_distance":169.929931640625,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.896,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6364631652832,"lon":139.65139770507813,"time":1585550141.521,"bearing":82.73135375976563}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6364865,"lon":139.6513258,"time":1585550140.638,"speed":8.449129104614258,"bearing":83.99156188964844,"altitude":72.1536865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550140.638195,"delta_ms":0},{"type":"getStatus","timestamp":1585550142.556,"event_timestamp":1585550141.057275,"result":{"route_state":"tracking","location":{"lat":35.636470794677737,"lon":139.6514892578125,"time":1585550142.556,"speed":7.912868976593018,"bearing":82.73135375976563,"altitude":72.1536865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4696.16259765625,"remaining_leg_duration":774.920999999,"step_index":0,"remaining_step_distance":161.60556030273438,"remaining_step_duration":34.0,"state_message":"","in_tunnel":false,"predicted":1.918,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.636470794677737,"lon":139.6514892578125,"time":1585550142.556,"bearing":82.73135375976563}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636493,"lon":139.6514246,"time":1585550141.639,"speed":9.230077743530274,"bearing":82.00690460205078,"altitude":72.46636962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550141.639934,"delta_ms":0},{"type":"getStatus","timestamp":1585550143.588,"event_timestamp":1585550142.08935,"result":{"route_state":"tracking","location":{"lat":35.6364860534668,"lon":139.65162658691407,"time":1585550143.588,"speed":8.847920417785645,"bearing":82.73135375976563,"altitude":72.46636962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4683.623046875,"remaining_leg_duration":772.920999999,"step_index":0,"remaining_step_distance":149.06629943847657,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":1.949,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6364860534668,"lon":139.65162658691407,"time":1585550143.588,"bearing":82.73135375976563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365033,"lon":139.6515259,"time":1585550142.628,"speed":8.876317024230957,"bearing":82.00304412841797,"altitude":72.301513671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550142.628998,"delta_ms":0},{"type":"getStatus","timestamp":1585550144.62,"event_timestamp":1585550143.120699,"result":{"route_state":"tracking","location":{"lat":35.636497497558597,"lon":139.65171813964845,"time":1585550144.62,"speed":8.954870223999024,"bearing":83.0575942993164,"altitude":72.301513671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4675.2431640625,"remaining_leg_duration":770.920999999,"step_index":0,"remaining_step_distance":140.6864013671875,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":1.992,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63648986816406,"lon":139.6516571044922,"time":1585550143.932,"bearing":82.73135375976563},{"lat":35.636497497558597,"lon":139.65171813964845,"time":1585550144.62,"bearing":83.0575942993164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636513,"lon":139.6516225,"time":1585550143.613,"speed":8.48074722290039,"bearing":81.99913024902344,"altitude":72.2503662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550143.613847,"delta_ms":0},{"type":"getStatus","timestamp":1585550145.657,"event_timestamp":1585550144.159064,"result":{"route_state":"tracking","location":{"lat":35.636505126953128,"lon":139.6518096923828,"time":1585550145.657,"speed":8.756269454956055,"bearing":83.0575942993164,"altitude":72.2503662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4666.92138671875,"remaining_leg_duration":768.920999999,"step_index":0,"remaining_step_distance":132.3644256591797,"remaining_step_duration":27.0,"state_message":"","in_tunnel":false,"predicted":2.044,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.636505126953128,"lon":139.6518096923828,"time":1585550145.657,"bearing":83.0575942993164}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365229,"lon":139.6517145,"time":1585550144.629,"speed":8.110662460327149,"bearing":81.9991455078125,"altitude":72.64495849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550144.630125,"delta_ms":0},{"type":"getStatus","timestamp":1585550146.692,"event_timestamp":1585550145.193831,"result":{"route_state":"tracking","location":{"lat":35.63651657104492,"lon":139.6519012451172,"time":1585550146.692,"speed":8.452858924865723,"bearing":83.0575942993164,"altitude":72.64495849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4658.54296875,"remaining_leg_duration":767.920999999,"step_index":0,"remaining_step_distance":123.98621368408203,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":2.063,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63651657104492,"lon":139.6519012451172,"time":1585550146.692,"bearing":83.0575942993164}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6365324,"lon":139.6518015,"time":1585550145.632,"speed":7.693888187408447,"bearing":82.00102233886719,"altitude":72.55035400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550145.63286,"delta_ms":0},{"type":"getStatus","timestamp":1585550147.735,"event_timestamp":1585550146.236263,"result":{"route_state":"tracking","location":{"lat":35.63652420043945,"lon":139.65199279785157,"time":1585550147.735,"speed":7.868127346038818,"bearing":83.0575942993164,"altitude":72.55035400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4650.2197265625,"remaining_leg_duration":765.920999999,"step_index":0,"remaining_step_distance":115.6629638671875,"remaining_step_duration":24.0,"state_message":"","in_tunnel":false,"predicted":2.103,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63652420043945,"lon":139.65199279785157,"time":1585550147.735,"bearing":83.0575942993164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365409,"lon":139.6518842,"time":1585550146.621,"speed":7.590261936187744,"bearing":82.99482727050781,"altitude":72.864990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550146.621892,"delta_ms":0},{"type":"getStatus","timestamp":1585550148.782,"event_timestamp":1585550147.28302,"result":{"route_state":"tracking","location":{"lat":35.63652801513672,"lon":139.65206909179688,"time":1585550148.782,"speed":7.624978065490723,"bearing":83.0575942993164,"altitude":72.864990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4643.31591796875,"remaining_leg_duration":763.920999999,"step_index":0,"remaining_step_distance":108.75896453857422,"remaining_step_duration":23.0,"state_message":"","in_tunnel":false,"predicted":2.161,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63652801513672,"lon":139.65206909179688,"time":1585550148.782,"bearing":83.0575942993164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365486,"lon":139.6519672,"time":1585550147.62,"speed":7.807790756225586,"bearing":82.9994888305664,"altitude":73.014892578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550147.620821,"delta_ms":0},{"type":"getStatus","timestamp":1585550149.811,"event_timestamp":1585550148.312211,"result":{"route_state":"tracking","location":{"lat":35.63653564453125,"lon":139.6521453857422,"time":1585550149.811,"speed":7.672239303588867,"bearing":83.0575942993164,"altitude":73.014892578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4636.361328125,"remaining_leg_duration":762.920999999,"step_index":0,"remaining_step_distance":101.80462646484375,"remaining_step_duration":21.0,"state_message":"","in_tunnel":false,"predicted":2.191,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63653564453125,"lon":139.6521453857422,"time":1585550149.811,"bearing":83.0575942993164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365565,"lon":139.6520513,"time":1585550148.615,"speed":7.9198808670043949,"bearing":83.00027465820313,"altitude":72.67535400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550148.615237,"delta_ms":0},{"type":"getStatus","timestamp":1585550150.848,"event_timestamp":1585550149.348994,"result":{"route_state":"tracking","location":{"lat":35.63654708862305,"lon":139.65225219726563,"time":1585550150.848,"speed":7.880234718322754,"bearing":83.0575942993164,"altitude":72.67535400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4626.615234375,"remaining_leg_duration":760.920999999,"step_index":0,"remaining_step_distance":92.05835723876953,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":2.233,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63654708862305,"lon":139.65225219726563,"time":1585550150.848,"bearing":83.0575942993164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365648,"lon":139.652138,"time":1585550149.626,"speed":8.219733238220215,"bearing":83.00069427490235,"altitude":72.447021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550149.626385,"delta_ms":0},{"type":"getStatus","timestamp":1585550151.895,"event_timestamp":1585550150.395684,"result":{"route_state":"tracking","location":{"lat":35.636558532714847,"lon":139.65234375,"time":1585550151.895,"speed":8.11726188659668,"bearing":83.0575942993164,"altitude":72.447021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4618.2392578125,"remaining_leg_duration":758.920999999,"step_index":0,"remaining_step_distance":83.682373046875,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":2.269,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.636558532714847,"lon":139.65234375,"time":1585550151.895,"bearing":83.0575942993164}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365737,"lon":139.6522285,"time":1585550150.625,"speed":8.219947814941407,"bearing":82.00341033935547,"altitude":72.8114013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550150.625995,"delta_ms":0},{"type":"getStatus","timestamp":1585550152.927,"event_timestamp":1585550151.427688,"result":{"route_state":"tracking","location":{"lat":35.636566162109378,"lon":139.65243530273438,"time":1585550152.927,"speed":8.072929382324219,"bearing":81.70963287353516,"altitude":72.8114013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4609.912109375,"remaining_leg_duration":756.920999999,"step_index":0,"remaining_step_distance":75.3553237915039,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.302,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63656234741211,"lon":139.6523895263672,"time":1585550152.411,"bearing":83.0575942993164},{"lat":35.636566162109378,"lon":139.65243530273438,"time":1585550152.927,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365823,"lon":139.6523167,"time":1585550151.638,"speed":7.760376930236816,"bearing":82.99555969238281,"altitude":72.57305908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550151.638628,"delta_ms":0},{"type":"getStatus","timestamp":1585550153.966,"event_timestamp":1585550152.466912,"result":{"route_state":"tracking","location":{"lat":35.63657760620117,"lon":139.65252685546876,"time":1585550153.966,"speed":7.9019036293029789,"bearing":81.70963287353516,"altitude":72.57305908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4601.5361328125,"remaining_leg_duration":755.920999999,"step_index":0,"remaining_step_distance":66.9793472290039,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":2.328,"shape_index":6,"intersection_index":6,"road_name":"","voice_instruction":{"ssml_announcement":"向天神橋を右折です","announcement":"向天神橋を右折です","remaining_step_distance":72.4000015258789,"index":2},"key_points":[{"lat":35.63657760620117,"lon":139.65252685546876,"time":1585550153.966,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365893,"lon":139.6523976,"time":1585550152.633,"speed":6.630768775939941,"bearing":83.0054702758789,"altitude":72.59185791015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550152.634064,"delta_ms":0},{"type":"getStatus","timestamp":1585550154.998,"event_timestamp":1585550153.499535,"result":{"route_state":"tracking","location":{"lat":35.63658905029297,"lon":139.652587890625,"time":1585550154.998,"speed":7.197444915771484,"bearing":81.70963287353516,"altitude":72.59185791015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4595.88525390625,"remaining_leg_duration":753.920999999,"step_index":0,"remaining_step_distance":61.328556060791019,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.365,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63658905029297,"lon":139.652587890625,"time":1585550154.998,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6365959,"lon":139.6524652,"time":1585550153.653,"speed":5.462559700012207,"bearing":81.00630187988281,"altitude":72.50115966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550153.653978,"delta_ms":0},{"type":"getStatus","timestamp":1585550156.041,"event_timestamp":1585550154.541705,"result":{"route_state":"tracking","location":{"lat":35.636592864990237,"lon":139.65264892578126,"time":1585550156.041,"speed":6.014058589935303,"bearing":81.70963287353516,"altitude":72.50115966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4590.36328125,"remaining_leg_duration":752.920999999,"step_index":0,"remaining_step_distance":55.806541442871097,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.388,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636592864990237,"lon":139.65264892578126,"time":1585550156.041,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636602,"lon":139.6525185,"time":1585550154.641,"speed":4.743746280670166,"bearing":82.01332092285156,"altitude":72.59735107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550154.641511,"delta_ms":0},{"type":"getStatus","timestamp":1585550157.085,"event_timestamp":1585550155.586604,"result":{"route_state":"tracking","location":{"lat":35.6365966796875,"lon":139.65267944335938,"time":1585550157.085,"speed":5.107893466949463,"bearing":81.70963287353516,"altitude":72.59735107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4587.5703125,"remaining_leg_duration":752.920999999,"step_index":0,"remaining_step_distance":53.013187408447269,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.444,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.6365966796875,"lon":139.65267944335938,"time":1585550157.085,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366066,"lon":139.6525652,"time":1585550155.642,"speed":4.0614142417907719,"bearing":81.99776458740235,"altitude":72.583251953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550155.642638,"delta_ms":0},{"type":"getStatus","timestamp":1585550158.118,"event_timestamp":1585550156.619351,"result":{"route_state":"tracking","location":{"lat":35.636600494384769,"lon":139.65269470214845,"time":1585550158.118,"speed":4.406818389892578,"bearing":81.70963287353516,"altitude":72.583251953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4586.1416015625,"remaining_leg_duration":751.920999999,"step_index":0,"remaining_step_distance":51.58494186401367,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.476,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636600494384769,"lon":139.65269470214845,"time":1585550158.118,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366109,"lon":139.6526072,"time":1585550156.669,"speed":4.234772682189941,"bearing":81.99165344238281,"altitude":72.5899658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550156.669598,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366149,"lon":139.6526467,"time":1585550157.629,"speed":4.641487121582031,"bearing":81.99111938476563,"altitude":72.703857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550157.629487,"delta_ms":0},{"type":"getStatus","timestamp":1585550159.16,"event_timestamp":1585550157.660694,"result":{"route_state":"tracking","location":{"lat":35.63660430908203,"lon":139.65274047851563,"time":1585550159.16,"speed":4.327767372131348,"bearing":81.70963287353516,"altitude":72.703857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4581.9833984375,"remaining_leg_duration":751.920999999,"step_index":0,"remaining_step_distance":47.42632293701172,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":1.531,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63660430908203,"lon":139.65274047851563,"time":1585550159.16,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366207,"lon":139.65269609999999,"time":1585550158.632,"speed":4.630406379699707,"bearing":82.99118041992188,"altitude":72.7861328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550158.632357,"delta_ms":0},{"type":"getStatus","timestamp":1585550160.188,"event_timestamp":1585550158.689495,"result":{"route_state":"tracking","location":{"lat":35.6366081237793,"lon":139.65277099609376,"time":1585550160.188,"speed":4.483834743499756,"bearing":81.70963287353516,"altitude":72.7861328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4579.18994140625,"remaining_leg_duration":750.920999999,"step_index":0,"remaining_step_distance":44.63283920288086,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.556,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.6366081237793,"lon":139.65277099609376,"time":1585550160.188,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366257,"lon":139.6527497,"time":1585550159.634,"speed":4.380263328552246,"bearing":82.99903106689453,"altitude":73.13818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550159.634583,"delta_ms":0},{"type":"getStatus","timestamp":1585550161.234,"event_timestamp":1585550159.737003,"result":{"route_state":"tracking","location":{"lat":35.63661193847656,"lon":139.65283203125,"time":1585550161.234,"speed":4.522030830383301,"bearing":81.70963287353516,"altitude":73.13818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4573.6630859375,"remaining_leg_duration":749.920999999,"step_index":0,"remaining_step_distance":39.106327056884769,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.6,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63661193847656,"lon":139.65283203125,"time":1585550161.234,"bearing":81.70963287353516}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.63663,"lon":139.6527994,"time":1585550160.623,"speed":4.240146636962891,"bearing":82.99946594238281,"altitude":73.61614990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550160.623711,"delta_ms":0},{"type":"getStatus","timestamp":1585550162.286,"event_timestamp":1585550160.788394,"result":{"route_state":"tracking","location":{"lat":35.636619567871097,"lon":139.6528778076172,"time":1585550162.286,"speed":4.328829288482666,"bearing":81.70963287353516,"altitude":73.61614990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4569.44384765625,"remaining_leg_duration":748.920999999,"step_index":0,"remaining_step_distance":34.88673400878906,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.663,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636619567871097,"lon":139.6528778076172,"time":1585550162.286,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.636633,"lon":139.6528465,"time":1585550161.639,"speed":3.7482941150665285,"bearing":83.99479675292969,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550161.639441,"delta_ms":0},{"type":"getStatus","timestamp":1585550163.319,"event_timestamp":1585550161.827994,"result":{"route_state":"tracking","location":{"lat":35.63662338256836,"lon":139.65292358398438,"time":1585550163.319,"speed":3.965294599533081,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4565.28369140625,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":30.726734161376954,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.68,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63662338256836,"lon":139.65292358398438,"time":1585550163.319,"bearing":81.70963287353516}]},"delta_ms":8},{"type":"updateLocation","location":{"lat":35.6366351,"lon":139.6528826,"time":1585550162.625,"speed":2.441800832748413,"bearing":83.99596405029297,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550162.6252,"delta_ms":0},{"type":"getStatus","timestamp":1585550164.363,"event_timestamp":1585550162.864816,"result":{"route_state":"tracking","location":{"lat":35.63662338256836,"lon":139.65292358398438,"time":1585550164.363,"speed":2.966984272003174,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4565.28369140625,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":30.726734161376954,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.738,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63662338256836,"lon":139.65292358398438,"time":1585550163.319,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366372,"lon":139.6529036,"time":1585550163.63,"speed":1.260752558708191,"bearing":83.00289154052735,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550163.63101,"delta_ms":0},{"type":"getStatus","timestamp":1585550165.399,"event_timestamp":1585550163.904059,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550165.399,"speed":1.9423565864562989,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.769,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550165.399,"bearing":81.70963287353516}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6366382,"lon":139.6529118,"time":1585550164.63,"speed":0.38043731451034548,"bearing":83.00779724121094,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550164.630536,"delta_ms":0},{"type":"getStatus","timestamp":1585550166.464,"event_timestamp":1585550164.964664,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550166.464,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.834,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550165.399,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366379,"lon":139.6529122,"time":1585550165.623,"speed":0.3802337050437927,"bearing":83.00432586669922,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550165.624156,"delta_ms":0},{"type":"getStatus","timestamp":1585550167.52,"event_timestamp":1585550166.021635,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550167.52,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.897,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550166.464,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366371,"lon":139.6529115,"time":1585550166.624,"speed":0.13598857820034028,"bearing":101.98819732666016,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550166.624222,"delta_ms":0},{"type":"getStatus","timestamp":1585550168.598,"event_timestamp":1585550167.099389,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550168.598,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.974,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550167.52,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366366,"lon":139.6529099,"time":1585550167.631,"speed":0.050497930496931079,"bearing":219.0611114501953,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550167.631871,"delta_ms":0},{"type":"getStatus","timestamp":1585550169.635,"event_timestamp":1585550168.136382,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550169.635,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.004,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550168.598,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366365,"lon":139.652909,"time":1585550168.639,"speed":0.06948477029800415,"bearing":245.3900909423828,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550168.639649,"delta_ms":0},{"type":"getStatus","timestamp":1585550170.671,"event_timestamp":1585550169.172489,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550170.671,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.032,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550169.635,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366367,"lon":139.6529079,"time":1585550169.627,"speed":0.0820135772228241,"bearing":271.16241455078127,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550169.627747,"delta_ms":0},{"type":"getStatus","timestamp":1585550171.73,"event_timestamp":1585550170.230692,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550171.73,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.103,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550170.671,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366376,"lon":139.6529095,"time":1585550170.623,"speed":0.07665221393108368,"bearing":40.883995056152347,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550170.623875,"delta_ms":0},{"type":"getStatus","timestamp":1585550172.763,"event_timestamp":1585550171.264432,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550172.763,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.14,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550171.73,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636638,"lon":139.6529103,"time":1585550171.609,"speed":0.07973183691501618,"bearing":47.882118225097659,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550171.610147,"delta_ms":0},{"type":"getStatus","timestamp":1585550173.811,"event_timestamp":1585550172.312643,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550173.811,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.202,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550172.763,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366373,"lon":139.6529098,"time":1585550172.641,"speed":0.02285613678395748,"bearing":178.1903839111328,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550172.641688,"delta_ms":0},{"type":"getStatus","timestamp":1585550174.862,"event_timestamp":1585550173.36358,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550174.862,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.221,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550173.811,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366369,"lon":139.6529095,"time":1585550173.628,"speed":0.03682691603899002,"bearing":205.2772979736328,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550173.629005,"delta_ms":0},{"type":"getStatus","timestamp":1585550175.925,"event_timestamp":1585550174.426122,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550175.925,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.297,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550174.862,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366367,"lon":139.6529093,"time":1585550174.658,"speed":0.03433268889784813,"bearing":207.9421844482422,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550174.658733,"delta_ms":0},{"type":"getStatus","timestamp":1585550176.969,"event_timestamp":1585550175.470078,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550176.969,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.311,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550175.925,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366371,"lon":139.6529099,"time":1585550175.623,"speed":0.028088804334402086,"bearing":59.06294631958008,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550175.623758,"delta_ms":0},{"type":"getStatus","timestamp":1585550178.013,"event_timestamp":1585550176.514511,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550178.013,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.39,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550176.969,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366375,"lon":139.65291,"time":1585550176.632,"speed":0.03683696314692497,"bearing":28.152963638305665,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550176.632458,"delta_ms":0},{"type":"getStatus","timestamp":1585550179.08,"event_timestamp":1585550177.580564,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550179.08,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.448,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550178.013,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636638,"lon":139.65291,"time":1585550177.634,"speed":0.041893474757671359,"bearing":5.39743185043335,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550177.634543,"delta_ms":0},{"type":"getStatus","timestamp":1585550180.127,"event_timestamp":1585550178.628108,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550180.127,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.493,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550179.08,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366385,"lon":139.6529108,"time":1585550178.665,"speed":0.06699638068675995,"bearing":41.83244323730469,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550178.665775,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636639,"lon":139.6529116,"time":1585550179.626,"speed":0.08212094753980637,"bearing":48.65848922729492,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550179.626432,"delta_ms":0},{"type":"getStatus","timestamp":1585550181.165,"event_timestamp":1585550179.66596,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550181.165,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.539,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550180.127,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366394,"lon":139.6529126,"time":1585550180.621,"speed":0.09327872097492218,"bearing":57.08356857299805,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550180.621574,"delta_ms":0},{"type":"getStatus","timestamp":1585550182.197,"event_timestamp":1585550180.698367,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550182.197,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.576,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550181.165,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.63664,"lon":139.6529134,"time":1585550181.62,"speed":0.09429033100605011,"bearing":52.605247497558597,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550181.621031,"delta_ms":0},{"type":"getStatus","timestamp":1585550183.242,"event_timestamp":1585550181.743474,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550183.242,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.622,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550182.197,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366411,"lon":139.6529146,"time":1585550182.636,"speed":0.13188029825687409,"bearing":45.059303283691409,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550182.637106,"delta_ms":0},{"type":"getStatus","timestamp":1585550184.293,"event_timestamp":1585550182.794249,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550184.293,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.657,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550183.242,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366415,"lon":139.6529154,"time":1585550183.626,"speed":0.10794727504253388,"bearing":50.7091178894043,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550183.626606,"delta_ms":0},{"type":"getStatus","timestamp":1585550185.365,"event_timestamp":1585550183.866326,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550185.365,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.739,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550184.293,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366416,"lon":139.6529159,"time":1585550184.669,"speed":0.06998685747385025,"bearing":58.286163330078128,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550184.669561,"delta_ms":0},{"type":"getStatus","timestamp":1585550186.419,"event_timestamp":1585550184.920049,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550186.419,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.75,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550185.365,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366422,"lon":139.6529167,"time":1585550185.633,"speed":0.08451490104198456,"bearing":50.07649612426758,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550185.633305,"delta_ms":0},{"type":"getStatus","timestamp":1585550187.485,"event_timestamp":1585550185.987739,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550187.485,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.852,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550186.419,"bearing":81.70963287353516}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6366432,"lon":139.6529174,"time":1585550186.628,"speed":0.10609105229377747,"bearing":37.81803894042969,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550186.62912,"delta_ms":0},{"type":"getStatus","timestamp":1585550188.534,"event_timestamp":1585550187.035125,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550188.534,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.906,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550187.485,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366433,"lon":139.6529186,"time":1585550187.62,"speed":0.09853409975767136,"bearing":64.89900207519531,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550187.621075,"delta_ms":0},{"type":"getStatus","timestamp":1585550189.594,"event_timestamp":1585550188.095808,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550189.594,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.974,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550188.534,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366431,"lon":139.6529193,"time":1585550188.621,"speed":0.07466703653335571,"bearing":83.24356842041016,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550188.621463,"delta_ms":0},{"type":"getStatus","timestamp":1585550190.665,"event_timestamp":1585550189.166341,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550190.665,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.044,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550189.594,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366434,"lon":139.6529198,"time":1585550189.628,"speed":0.060507889837026599,"bearing":72.50302124023438,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550189.628422,"delta_ms":0},{"type":"getStatus","timestamp":1585550191.733,"event_timestamp":1585550190.233828,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550191.733,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.105,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550190.665,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366434,"lon":139.6529202,"time":1585550190.615,"speed":0.04602561518549919,"bearing":75.07380676269531,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550190.615138,"delta_ms":0},{"type":"getStatus","timestamp":1585550192.805,"event_timestamp":1585550191.306896,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550192.805,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.19,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550191.733,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366437,"lon":139.6529205,"time":1585550191.647,"speed":0.04547940939664841,"bearing":56.107810974121097,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550191.647604,"delta_ms":0},{"type":"getStatus","timestamp":1585550193.847,"event_timestamp":1585550192.348641,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550193.847,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.2,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550192.805,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366442,"lon":139.6529208,"time":1585550192.635,"speed":0.048584096133708957,"bearing":40.54792785644531,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550192.635221,"delta_ms":0},{"type":"getStatus","timestamp":1585550194.893,"event_timestamp":1585550193.393492,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550194.893,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.258,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550193.847,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366444,"lon":139.6529214,"time":1585550193.628,"speed":0.05214356631040573,"bearing":51.216026306152347,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550193.628786,"delta_ms":0},{"type":"getStatus","timestamp":1585550195.95,"event_timestamp":1585550194.451605,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550195.95,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.322,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550194.893,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366448,"lon":139.6529215,"time":1585550194.622,"speed":0.04425055533647537,"bearing":32.837059020996097,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550194.622771,"delta_ms":0},{"type":"getStatus","timestamp":1585550196.998,"event_timestamp":1585550195.49909,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550196.998,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.376,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550195.95,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636645,"lon":139.6529218,"time":1585550195.631,"speed":0.04066828265786171,"bearing":39.79789733886719,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550195.631291,"delta_ms":0},{"type":"getStatus","timestamp":1585550198.066,"event_timestamp":1585550196.567151,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550198.066,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.435,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550196.998,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366452,"lon":139.6529221,"time":1585550196.625,"speed":0.03735595941543579,"bearing":46.1303596496582,"altitude":71.79999542236328,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550196.626122,"delta_ms":0},{"type":"getStatus","timestamp":1585550199.117,"event_timestamp":1585550197.617919,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550199.117,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.492,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550198.066,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366448,"lon":139.6529227,"time":1585550197.674,"speed":0.04699103161692619,"bearing":111.87112426757813,"altitude":71.79999542236328,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550197.674854,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366451,"lon":139.6529246,"time":1585550198.627,"speed":0.27994468808174136,"bearing":82.99864959716797,"altitude":71.79999542236328,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550198.627417,"delta_ms":0},{"type":"getStatus","timestamp":1585550200.166,"event_timestamp":1585550198.66661,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550200.166,"speed":0.8483661413192749,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4563.85693359375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":29.299983978271486,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.539,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.65293884277345,"time":1585550199.117,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366456,"lon":139.6529288,"time":1585550199.622,"speed":0.7181867361068726,"bearing":82.98271942138672,"altitude":71.79999542236328,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550199.622348,"delta_ms":0},{"type":"getStatus","timestamp":1585550201.207,"event_timestamp":1585550199.70792,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.6529541015625,"time":1585550201.207,"speed":0.4969345033168793,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4562.490234375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":27.93349838256836,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.585,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.6529541015625,"time":1585550201.207,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366466,"lon":139.6529387,"time":1585550200.625,"speed":1.239261269569397,"bearing":82.99674224853516,"altitude":71.79999542236328,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550200.625186,"delta_ms":0},{"type":"getStatus","timestamp":1585550202.257,"event_timestamp":1585550200.75854,"result":{"route_state":"tracking","location":{"lat":35.636627197265628,"lon":139.6529541015625,"time":1585550202.257,"speed":0.8854951858520508,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4562.490234375,"remaining_leg_duration":747.920999999,"step_index":0,"remaining_step_distance":27.93349838256836,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.632,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636627197265628,"lon":139.6529541015625,"time":1585550201.207,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366486,"lon":139.6529564,"time":1585550201.623,"speed":2.232729434967041,"bearing":82.97904968261719,"altitude":71.79999542236328,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550201.623207,"delta_ms":0},{"type":"getStatus","timestamp":1585550203.319,"event_timestamp":1585550201.820932,"result":{"route_state":"tracking","location":{"lat":35.63663101196289,"lon":139.65298461914063,"time":1585550203.319,"speed":1.727777123451233,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4559.69677734375,"remaining_leg_duration":746.920999999,"step_index":0,"remaining_step_distance":25.140132904052736,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":1.696,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63663101196289,"lon":139.65298461914063,"time":1585550203.319,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366526,"lon":139.6529867,"time":1585550202.63,"speed":3.3584201335906984,"bearing":80.99897766113281,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550202.630923,"delta_ms":0},{"type":"getStatus","timestamp":1585550204.378,"event_timestamp":1585550202.879043,"result":{"route_state":"tracking","location":{"lat":35.63663864135742,"lon":139.6530303955078,"time":1585550204.378,"speed":2.779294729232788,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4555.4765625,"remaining_leg_duration":745.920999999,"step_index":0,"remaining_step_distance":20.919857025146486,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.748,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63663864135742,"lon":139.6530303955078,"time":1585550204.378,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366589,"lon":139.653029,"time":1585550203.622,"speed":4.168770790100098,"bearing":79.99923706054688,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550203.622423,"delta_ms":0},{"type":"getStatus","timestamp":1585550205.411,"event_timestamp":1585550203.913383,"result":{"route_state":"tracking","location":{"lat":35.63664627075195,"lon":139.65310668945313,"time":1585550205.411,"speed":3.8399007320404054,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4548.5234375,"remaining_leg_duration":744.920999999,"step_index":0,"remaining_step_distance":13.966781616210938,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":1.789,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63664627075195,"lon":139.65310668945313,"time":1585550205.411,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366644,"lon":139.6530681,"time":1585550204.623,"speed":4.579342365264893,"bearing":81.9670639038086,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550204.623228,"delta_ms":0},{"type":"getStatus","timestamp":1585550206.456,"event_timestamp":1585550204.957102,"result":{"route_state":"tracking","location":{"lat":35.636653900146487,"lon":139.6531524658203,"time":1585550206.456,"speed":4.1786208152771,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4544.30322265625,"remaining_leg_duration":743.920999999,"step_index":0,"remaining_step_distance":9.746147155761719,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.833,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636653900146487,"lon":139.6531524658203,"time":1585550206.456,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366702,"lon":139.6531244,"time":1585550205.622,"speed":4.899555683135986,"bearing":81.99961853027344,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550205.622614,"delta_ms":0},{"type":"getStatus","timestamp":1585550207.488,"event_timestamp":1585550205.989169,"result":{"route_state":"tracking","location":{"lat":35.636661529541019,"lon":139.65321350097657,"time":1585550207.488,"speed":4.724108695983887,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4538.71630859375,"remaining_leg_duration":742.920999999,"step_index":0,"remaining_step_distance":4.1592864990234379,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.866,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.636661529541019,"lon":139.65321350097657,"time":1585550207.488,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.636676,"lon":139.6531784,"time":1585550206.631,"speed":4.4337077140808109,"bearing":83.03443908691406,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550206.631188,"delta_ms":0},{"type":"getStatus","timestamp":1585550208.528,"event_timestamp":1585550207.029079,"result":{"route_state":"tracking","location":{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550208.528,"speed":4.627542495727539,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4534.55712890625,"remaining_leg_duration":741.920999999,"step_index":0,"remaining_step_distance":0.000030517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.897,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550208.528,"bearing":81.70963287353516}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6366808,"lon":139.6532266,"time":1585550207.632,"speed":3.2982218265533449,"bearing":83.0373764038086,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550207.632982,"delta_ms":0},{"type":"getStatus","timestamp":1585550209.567,"event_timestamp":1585550208.068057,"result":{"route_state":"tracking","location":{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550209.567,"speed":3.927517890930176,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4534.55712890625,"remaining_leg_duration":741.920999999,"step_index":0,"remaining_step_distance":0.000030517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.935,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550208.528,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366824,"lon":139.6532588,"time":1585550208.624,"speed":2.7347302436828615,"bearing":87.00340270996094,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550208.624541,"delta_ms":0},{"type":"getStatus","timestamp":1585550210.601,"event_timestamp":1585550209.104333,"result":{"route_state":"tracking","location":{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550210.601,"speed":3.1232495307922365,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4534.55712890625,"remaining_leg_duration":741.920999999,"step_index":0,"remaining_step_distance":0.000030517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.977,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550209.567,"bearing":81.70963287353516}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6366798,"lon":139.6532875,"time":1585550209.625,"speed":2.7599751949310304,"bearing":101.99503326416016,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550209.625793,"delta_ms":0},{"type":"getStatus","timestamp":1585550211.683,"event_timestamp":1585550210.185885,"result":{"route_state":"tracking","location":{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550211.683,"speed":2.8717827796936037,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4534.55712890625,"remaining_leg_duration":741.920999999,"step_index":0,"remaining_step_distance":0.000030517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.058,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550210.601,"bearing":81.70963287353516}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6366707,"lon":139.6533169,"time":1585550210.622,"speed":2.6124746799468996,"bearing":43.843570709228519,"altitude":71.79999542236328,"accuracyHorizontal":4.711999893188477,"provider":"fused"},"result":true,"event_timestamp":1585550210.622408,"delta_ms":0},{"type":"getStatus","timestamp":1585550212.749,"event_timestamp":1585550211.251959,"result":{"route_state":"tracking","location":{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550212.749,"speed":2.7093398571014406,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":4.711999893188477,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4534.55712890625,"remaining_leg_duration":741.920999999,"step_index":0,"remaining_step_distance":0.000030517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.127,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550211.683,"bearing":81.70963287353516}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6366797,"lon":139.6533303,"time":1585550211.641,"speed":3.237349510192871,"bearing":45.595890045166019,"altitude":71.79999542236328,"accuracyHorizontal":6.110000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550211.64119,"delta_ms":0},{"type":"getStatus","timestamp":1585550213.824,"event_timestamp":1585550212.325437,"result":{"route_state":"tracking","location":{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550213.824,"speed":2.9568963050842287,"bearing":81.70963287353516,"altitude":71.79999542236328,"accuracyHorizontal":6.110000133514404,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4534.55712890625,"remaining_leg_duration":741.920999999,"step_index":0,"remaining_step_distance":0.000030517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.183,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550212.749,"bearing":81.70963287353516}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6366305,"lon":139.6533669,"time":1585550212.626,"speed":5.794113636016846,"bearing":148.96905517578126,"altitude":71.79999542236328,"accuracyHorizontal":5.741000175476074,"provider":"fused"},"result":true,"event_timestamp":1585550212.626272,"delta_ms":0},{"type":"getStatus","timestamp":1585550214.87,"event_timestamp":1585550213.37354,"result":{"route_state":"tracking","location":{"lat":35.63655471801758,"lon":139.65333557128907,"time":1585550214.87,"speed":4.503390789031982,"bearing":151.55018615722657,"altitude":71.79999542236328,"accuracyHorizontal":5.741000175476074,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4520.43994140625,"remaining_leg_duration":737.681999999,"step_index":1,"remaining_step_distance":672.8211059570313,"remaining_step_duration":184.0,"state_message":"","in_tunnel":false,"predicted":2.244,"shape_index":7,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"駒沢","type":"turn","modifier":"right","components":[{"type":"text","text":"駒沢"}]},"remaining_step_distance":686.9382934570313,"index":0},"key_points":[{"lat":35.63666534423828,"lon":139.65325927734376,"time":1585550213.824,"bearing":81.70963287353516},{"lat":35.63655471801758,"lon":139.65333557128907,"time":1585550214.87,"bearing":151.55018615722657}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6365612,"lon":139.6534054,"time":1585550213.622,"speed":6.8389129638671879,"bearing":149.99826049804688,"altitude":71.79999542236328,"accuracyHorizontal":5.741000175476074,"provider":"fused"},"result":true,"event_timestamp":1585550213.622207,"delta_ms":0},{"type":"getStatus","timestamp":1585550215.92,"event_timestamp":1585550214.421473,"result":{"route_state":"tracking","location":{"lat":35.636451721191409,"lon":139.6533966064453,"time":1585550215.92,"speed":5.997851848602295,"bearing":151.55018615722657,"altitude":71.79999542236328,"accuracyHorizontal":5.741000175476074,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4507.7265625,"remaining_leg_duration":734.681999999,"step_index":1,"remaining_step_distance":660.1078491210938,"remaining_step_duration":180.0,"state_message":"","in_tunnel":false,"predicted":2.298,"shape_index":7,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"700 メートル直進です","announcement":"700 メートル直進です","remaining_step_distance":667.0,"index":0},"key_points":[{"lat":35.636451721191409,"lon":139.6533966064453,"time":1585550215.92,"bearing":151.55018615722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6364936,"lon":139.6534471,"time":1585550214.625,"speed":7.9052324295043949,"bearing":149.99002075195313,"altitude":71.79999542236328,"accuracyHorizontal":6.110000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550214.62553,"delta_ms":0},{"type":"getStatus","timestamp":1585550216.998,"event_timestamp":1585550215.500658,"result":{"route_state":"tracking","location":{"lat":35.6363525390625,"lon":139.65345764160157,"time":1585550216.998,"speed":7.331121444702148,"bearing":151.55018615722657,"altitude":71.79999542236328,"accuracyHorizontal":6.110000133514404,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4495.3828125,"remaining_leg_duration":730.681999999,"step_index":1,"remaining_step_distance":647.76416015625,"remaining_step_duration":177.0,"state_message":"","in_tunnel":false,"predicted":2.373,"shape_index":7,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6363525390625,"lon":139.65345764160157,"time":1585550216.998,"bearing":151.55018615722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6364186,"lon":139.6534958,"time":1585550215.745,"speed":8.947919845581055,"bearing":149.9536895751953,"altitude":71.79999542236328,"accuracyHorizontal":4.9720001220703129,"provider":"fused"},"result":true,"event_timestamp":1585550215.746022,"delta_ms":0},{"type":"getStatus","timestamp":1585550218.049,"event_timestamp":1585550216.550658,"result":{"route_state":"tracking","location":{"lat":35.636260986328128,"lon":139.65353393554688,"time":1585550218.049,"speed":8.630011558532715,"bearing":151.55018615722657,"altitude":71.79999542236328,"accuracyHorizontal":4.9720001220703129,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4483.14013671875,"remaining_leg_duration":727.681999999,"step_index":1,"remaining_step_distance":635.521728515625,"remaining_step_duration":174.0,"state_message":"","in_tunnel":false,"predicted":2.304,"shape_index":7,"intersection_index":0,"road_name":"","key_points":[{"lat":35.636260986328128,"lon":139.65353393554688,"time":1585550218.049,"bearing":151.55018615722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6363461,"lon":139.6535442,"time":1585550216.628,"speed":9.419659614562989,"bearing":149.99993896484376,"altitude":75.86065673828125,"accuracyHorizontal":4.793000221252441,"provider":"fused"},"result":true,"event_timestamp":1585550216.629017,"delta_ms":0},{"type":"getStatus","timestamp":1585550219.081,"event_timestamp":1585550217.582765,"result":{"route_state":"tracking","location":{"lat":35.63616180419922,"lon":139.65359497070313,"time":1585550219.081,"speed":9.355890274047852,"bearing":151.550048828125,"altitude":75.86065673828125,"accuracyHorizontal":4.793000221252441,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4470.80419921875,"remaining_leg_duration":724.681999999,"step_index":1,"remaining_step_distance":623.1856689453125,"remaining_step_duration":170.0,"state_message":"","in_tunnel":false,"predicted":2.453,"shape_index":8,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63623046875,"lon":139.65354919433595,"time":1585550218.355,"bearing":151.55018615722657},{"lat":35.63616180419922,"lon":139.65359497070313,"time":1585550219.081,"bearing":151.550048828125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6362668,"lon":139.653598,"time":1585550217.635,"speed":10.172877311706543,"bearing":149.9871063232422,"altitude":75.97027587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550217.635486,"delta_ms":0},{"type":"getStatus","timestamp":1585550220.122,"event_timestamp":1585550218.622895,"result":{"route_state":"tracking","location":{"lat":35.63605499267578,"lon":139.65367126464845,"time":1585550220.122,"speed":10.050904273986817,"bearing":151.550048828125,"altitude":75.97027587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4457.0576171875,"remaining_leg_duration":720.681999999,"step_index":1,"remaining_step_distance":609.4387817382813,"remaining_step_duration":167.0,"state_message":"","in_tunnel":false,"predicted":2.487,"shape_index":8,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63605499267578,"lon":139.65367126464845,"time":1585550220.122,"bearing":151.550048828125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6361827,"lon":139.6536555,"time":1585550218.682,"speed":10.741854667663575,"bearing":149.98583984375,"altitude":76.21734619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550218.682543,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6360952,"lon":139.6537167,"time":1585550219.625,"speed":11.104066848754883,"bearing":149.989990234375,"altitude":76.55096435546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550219.625591,"delta_ms":0},{"type":"getStatus","timestamp":1585550221.168,"event_timestamp":1585550219.669398,"result":{"route_state":"tracking","location":{"lat":35.63594436645508,"lon":139.65374755859376,"time":1585550221.168,"speed":11.032115936279297,"bearing":151.550048828125,"altitude":76.55096435546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4442.93994140625,"remaining_leg_duration":716.681999999,"step_index":1,"remaining_step_distance":595.3215942382813,"remaining_step_duration":163.0,"state_message":"","in_tunnel":false,"predicted":1.543,"shape_index":8,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63594436645508,"lon":139.65374755859376,"time":1585550221.168,"bearing":151.550048828125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6360077,"lon":139.6537774,"time":1585550220.616,"speed":10.547842979431153,"bearing":151.00640869140626,"altitude":76.9891357421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550220.61705,"delta_ms":0},{"type":"getStatus","timestamp":1585550222.201,"event_timestamp":1585550220.702936,"result":{"route_state":"tracking","location":{"lat":35.63584899902344,"lon":139.65380859375,"time":1585550222.201,"speed":10.86902904510498,"bearing":151.550048828125,"altitude":76.9891357421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4430.978515625,"remaining_leg_duration":713.681999999,"step_index":1,"remaining_step_distance":583.3599853515625,"remaining_step_duration":159.0,"state_message":"","in_tunnel":false,"predicted":1.585,"shape_index":8,"intersection_index":1,"road_name":"","key_points":[{"lat":35.63584899902344,"lon":139.65380859375,"time":1585550222.201,"bearing":151.550048828125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6359251,"lon":139.6538326,"time":1585550221.63,"speed":9.881477355957032,"bearing":151.00228881835938,"altitude":77.03692626953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550221.630259,"delta_ms":0},{"type":"getStatus","timestamp":1585550223.237,"event_timestamp":1585550221.740048,"result":{"route_state":"tracking","location":{"lat":35.635765075683597,"lon":139.6538543701172,"time":1585550223.237,"speed":10.338345527648926,"bearing":151.2979278564453,"altitude":77.03692626953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4420.76904296875,"remaining_leg_duration":710.681999999,"step_index":1,"remaining_step_distance":573.1505126953125,"remaining_step_duration":157.0,"state_message":"","in_tunnel":false,"predicted":1.607,"shape_index":9,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63579559326172,"lon":139.65383911132813,"time":1585550222.865,"bearing":151.550048828125},{"lat":35.635765075683597,"lon":139.6538543701172,"time":1585550223.237,"bearing":151.2979278564453}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6358474,"lon":139.6538834,"time":1585550222.62,"speed":9.401339530944825,"bearing":151.0023193359375,"altitude":77.006591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550222.621077,"delta_ms":0},{"type":"getStatus","timestamp":1585550224.287,"event_timestamp":1585550222.791421,"result":{"route_state":"tracking","location":{"lat":35.63569259643555,"lon":139.65391540527345,"time":1585550224.287,"speed":9.749712944030762,"bearing":151.2979278564453,"altitude":77.006591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4411.0546875,"remaining_leg_duration":707.681999999,"step_index":1,"remaining_step_distance":563.4361572265625,"remaining_step_duration":154.0,"state_message":"","in_tunnel":false,"predicted":1.667,"shape_index":9,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63569259643555,"lon":139.65391540527345,"time":1585550224.287,"bearing":151.2979278564453}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.635775,"lon":139.6539353,"time":1585550223.622,"speed":9.380058288574219,"bearing":150.00088500976563,"altitude":77.2493896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550223.623052,"delta_ms":0},{"type":"getStatus","timestamp":1585550225.32,"event_timestamp":1585550223.820755,"result":{"route_state":"tracking","location":{"lat":35.6356201171875,"lon":139.65396118164063,"time":1585550225.32,"speed":9.468820571899414,"bearing":151.2979278564453,"altitude":77.2493896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4401.998046875,"remaining_leg_duration":705.681999999,"step_index":1,"remaining_step_distance":554.3792114257813,"remaining_step_duration":152.0,"state_message":"","in_tunnel":false,"predicted":1.698,"shape_index":9,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6356201171875,"lon":139.65396118164063,"time":1585550225.32,"bearing":151.2979278564453}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6357013,"lon":139.653989,"time":1585550224.629,"speed":9.739656448364258,"bearing":149.9996795654297,"altitude":77.5465087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550224.629194,"delta_ms":0},{"type":"getStatus","timestamp":1585550226.355,"event_timestamp":1585550224.85612,"result":{"route_state":"tracking","location":{"lat":35.63553237915039,"lon":139.65402221679688,"time":1585550226.355,"speed":9.645973205566407,"bearing":151.2979278564453,"altitude":77.5465087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4390.77783203125,"remaining_leg_duration":702.681999999,"step_index":1,"remaining_step_distance":543.1593017578125,"remaining_step_duration":148.0,"state_message":"","in_tunnel":false,"predicted":1.726,"shape_index":9,"intersection_index":2,"road_name":"","key_points":[{"lat":35.63553237915039,"lon":139.65402221679688,"time":1585550226.355,"bearing":151.2979278564453}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6356229,"lon":139.6540432,"time":1585550225.625,"speed":10.269181251525879,"bearing":149.99896240234376,"altitude":77.78607177734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550225.626128,"delta_ms":0},{"type":"getStatus","timestamp":1585550227.392,"event_timestamp":1585550225.89548,"result":{"route_state":"tracking","location":{"lat":35.635459899902347,"lon":139.65406799316407,"time":1585550227.392,"speed":9.995080947875977,"bearing":151.2979278564453,"altitude":77.78607177734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4381.71435546875,"remaining_leg_duration":699.681999999,"step_index":1,"remaining_step_distance":534.095703125,"remaining_step_duration":146.0,"state_message":"","in_tunnel":false,"predicted":1.767,"shape_index":9,"intersection_index":2,"road_name":"","key_points":[{"lat":35.635459899902347,"lon":139.65406799316407,"time":1585550227.392,"bearing":151.2979278564453}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6355401,"lon":139.6540985,"time":1585550226.634,"speed":10.619384765625,"bearing":150.99822998046876,"altitude":77.4150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550226.634911,"delta_ms":0},{"type":"getStatus","timestamp":1585550228.435,"event_timestamp":1585550226.938818,"result":{"route_state":"tracking","location":{"lat":35.63536071777344,"lon":139.65414428710938,"time":1585550228.435,"speed":10.432066917419434,"bearing":149.2926788330078,"altitude":77.4150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4368.66748046875,"remaining_leg_duration":696.681999999,"step_index":1,"remaining_step_distance":521.048828125,"remaining_step_duration":142.0,"state_message":"","in_tunnel":false,"predicted":1.801,"shape_index":10,"intersection_index":3,"road_name":"","key_points":[{"lat":35.635433197021487,"lon":139.65408325195313,"time":1585550227.653,"bearing":151.2979278564453},{"lat":35.63536071777344,"lon":139.65414428710938,"time":1585550228.435,"bearing":149.2926788330078}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6354539,"lon":139.6541543,"time":1585550227.625,"speed":10.825922966003418,"bearing":150.99269104003907,"altitude":77.5233154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550227.625242,"delta_ms":0},{"type":"getStatus","timestamp":1585550229.479,"event_timestamp":1585550227.980759,"result":{"route_state":"tracking","location":{"lat":35.63527297973633,"lon":139.65420532226563,"time":1585550229.479,"speed":10.743054389953614,"bearing":149.2926788330078,"altitude":77.5233154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4357.46630859375,"remaining_leg_duration":693.681999999,"step_index":1,"remaining_step_distance":509.847900390625,"remaining_step_duration":139.0,"state_message":"","in_tunnel":false,"predicted":1.854,"shape_index":10,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63527297973633,"lon":139.65420532226563,"time":1585550229.479,"bearing":149.2926788330078}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6353655,"lon":139.6542127,"time":1585550228.621,"speed":11.249415397644043,"bearing":150.00038146972657,"altitude":78.52191162109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550228.621885,"delta_ms":0},{"type":"getStatus","timestamp":1585550230.516,"event_timestamp":1585550229.017169,"result":{"route_state":"tracking","location":{"lat":35.63518142700195,"lon":139.65426635742188,"time":1585550230.516,"speed":11.059767723083496,"bearing":149.2926788330078,"altitude":78.52191162109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4345.8876953125,"remaining_leg_duration":689.681999999,"step_index":1,"remaining_step_distance":498.2690124511719,"remaining_step_duration":136.0,"state_message":"","in_tunnel":false,"predicted":1.895,"shape_index":10,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63518142700195,"lon":139.65426635742188,"time":1585550230.516,"bearing":149.2926788330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6352744,"lon":139.6542742,"time":1585550229.625,"speed":11.629356384277344,"bearing":149.99923706054688,"altitude":79.2017822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550229.626106,"delta_ms":0},{"type":"getStatus","timestamp":1585550231.543,"event_timestamp":1585550230.04445,"result":{"route_state":"tracking","location":{"lat":35.635074615478519,"lon":139.6543426513672,"time":1585550231.543,"speed":11.531941413879395,"bearing":149.2926788330078,"altitude":79.2017822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4332.1396484375,"remaining_leg_duration":686.681999999,"step_index":1,"remaining_step_distance":484.5208740234375,"remaining_step_duration":132.0,"state_message":"","in_tunnel":false,"predicted":1.918,"shape_index":10,"intersection_index":3,"road_name":"","key_points":[{"lat":35.635074615478519,"lon":139.6543426513672,"time":1585550231.543,"bearing":149.2926788330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.63518,"lon":139.6543383,"time":1585550230.618,"speed":12.019181251525879,"bearing":150.99790954589845,"altitude":80.328857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550230.61854,"delta_ms":0},{"type":"getStatus","timestamp":1585550232.573,"event_timestamp":1585550231.075556,"result":{"route_state":"tracking","location":{"lat":35.63497543334961,"lon":139.65440368652345,"time":1585550232.573,"speed":11.863507270812989,"bearing":153.3098907470703,"altitude":80.328857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4319.7451171875,"remaining_leg_duration":682.681999999,"step_index":1,"remaining_step_distance":472.126708984375,"remaining_step_duration":129.0,"state_message":"","in_tunnel":false,"predicted":1.955,"shape_index":11,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63503646850586,"lon":139.6543731689453,"time":1585550231.963,"bearing":149.2926788330078},{"lat":35.63497543334961,"lon":139.65440368652345,"time":1585550232.573,"bearing":153.3098907470703}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6350827,"lon":139.6544028,"time":1585550231.619,"speed":12.337861061096192,"bearing":150.00108337402345,"altitude":81.0648193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550231.620132,"delta_ms":0},{"type":"getStatus","timestamp":1585550233.607,"event_timestamp":1585550232.10776,"result":{"route_state":"tracking","location":{"lat":35.63488006591797,"lon":139.6544647216797,"time":1585550233.607,"speed":12.183721542358399,"bearing":153.3098907470703,"altitude":81.0648193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4307.79833984375,"remaining_leg_duration":679.681999999,"step_index":1,"remaining_step_distance":460.1797180175781,"remaining_step_duration":126.0,"state_message":"","in_tunnel":false,"predicted":1.988,"shape_index":11,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63488006591797,"lon":139.6544647216797,"time":1585550233.607,"bearing":153.3098907470703}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6349866,"lon":139.6544696,"time":1585550232.635,"speed":11.641291618347168,"bearing":150.0015869140625,"altitude":81.2781982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550232.63516,"delta_ms":0},{"type":"getStatus","timestamp":1585550234.632,"event_timestamp":1585550233.133356,"result":{"route_state":"tracking","location":{"lat":35.63477325439453,"lon":139.65452575683595,"time":1585550234.632,"speed":11.859848022460938,"bearing":153.3098907470703,"altitude":81.2781982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4294.6884765625,"remaining_leg_duration":675.681999999,"step_index":1,"remaining_step_distance":447.07000732421877,"remaining_step_duration":122.0,"state_message":"","in_tunnel":false,"predicted":1.997,"shape_index":11,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63477325439453,"lon":139.65452575683595,"time":1585550234.632,"bearing":153.3098907470703}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6348968,"lon":139.654531,"time":1585550233.62,"speed":10.980679512023926,"bearing":150.00070190429688,"altitude":82.5379638671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550233.620316,"delta_ms":0},{"type":"getStatus","timestamp":1585550235.667,"event_timestamp":1585550234.169053,"result":{"route_state":"tracking","location":{"lat":35.63468933105469,"lon":139.6545867919922,"time":1585550235.667,"speed":11.3366060256958,"bearing":153.3098907470703,"altitude":82.5379638671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4283.8720703125,"remaining_leg_duration":672.681999999,"step_index":1,"remaining_step_distance":436.25323486328127,"remaining_step_duration":119.0,"state_message":"","in_tunnel":false,"predicted":2.047,"shape_index":11,"intersection_index":3,"road_name":"","key_points":[{"lat":35.63468933105469,"lon":139.6545867919922,"time":1585550235.667,"bearing":153.3098907470703}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6348112,"lon":139.654588,"time":1585550234.621,"speed":10.463784217834473,"bearing":151.99801635742188,"altitude":82.70318603515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550234.622019,"delta_ms":0},{"type":"getStatus","timestamp":1585550236.704,"event_timestamp":1585550235.205401,"result":{"route_state":"tracking","location":{"lat":35.634605407714847,"lon":139.65464782714845,"time":1585550236.704,"speed":10.778631210327149,"bearing":155.32681274414063,"altitude":82.70318603515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4273.0185546875,"remaining_leg_duration":670.681999999,"step_index":1,"remaining_step_distance":425.39996337890627,"remaining_step_duration":116.0,"state_message":"","in_tunnel":false,"predicted":2.083,"shape_index":12,"intersection_index":4,"road_name":"","key_points":[{"lat":35.634666442871097,"lon":139.65460205078126,"time":1585550235.943,"bearing":153.3098907470703},{"lat":35.634605407714847,"lon":139.65464782714845,"time":1585550236.704,"bearing":155.32681274414063}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6347287,"lon":139.654639,"time":1585550235.625,"speed":10.060518264770508,"bearing":152.99989318847657,"altitude":82.97271728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550235.625701,"delta_ms":0},{"type":"getStatus","timestamp":1585550237.74,"event_timestamp":1585550236.242969,"result":{"route_state":"tracking","location":{"lat":35.63452911376953,"lon":139.65469360351563,"time":1585550237.74,"speed":10.298029899597168,"bearing":155.32681274414063,"altitude":82.97271728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4263.58837890625,"remaining_leg_duration":667.681999999,"step_index":1,"remaining_step_distance":415.9696350097656,"remaining_step_duration":114.0,"state_message":"","in_tunnel":false,"predicted":2.115,"shape_index":12,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63452911376953,"lon":139.65469360351563,"time":1585550237.74,"bearing":155.32681274414063}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6346479,"lon":139.6546857,"time":1585550236.627,"speed":9.652129173278809,"bearing":154.0017547607422,"altitude":82.8931884765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550236.628439,"delta_ms":0},{"type":"getStatus","timestamp":1585550238.777,"event_timestamp":1585550237.278716,"result":{"route_state":"tracking","location":{"lat":35.63445281982422,"lon":139.65472412109376,"time":1585550238.777,"speed":9.873510360717774,"bearing":155.32681274414063,"altitude":82.8931884765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4254.75537109375,"remaining_leg_duration":665.681999999,"step_index":1,"remaining_step_distance":407.1368103027344,"remaining_step_duration":111.0,"state_message":"","in_tunnel":false,"predicted":2.15,"shape_index":12,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63445281982422,"lon":139.65472412109376,"time":1585550238.777,"bearing":155.32681274414063}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6345724,"lon":139.654727,"time":1585550237.622,"speed":8.830761909484864,"bearing":154.0010223388672,"altitude":81.8162841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550237.623048,"delta_ms":0},{"type":"getStatus","timestamp":1585550239.807,"event_timestamp":1585550238.308711,"result":{"route_state":"tracking","location":{"lat":35.63438034057617,"lon":139.65476989746095,"time":1585550239.807,"speed":9.192950248718262,"bearing":155.32681274414063,"altitude":81.8162841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4245.69140625,"remaining_leg_duration":662.681999999,"step_index":1,"remaining_step_distance":398.0728454589844,"remaining_step_duration":109.0,"state_message":"","in_tunnel":false,"predicted":2.185,"shape_index":12,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63438034057617,"lon":139.65476989746095,"time":1585550239.807,"bearing":155.32681274414063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6345037,"lon":139.6547661,"time":1585550238.619,"speed":8.0176362991333,"bearing":153.08111572265626,"altitude":81.43798828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550238.619289,"delta_ms":0},{"type":"getStatus","timestamp":1585550240.844,"event_timestamp":1585550239.345553,"result":{"route_state":"tracking","location":{"lat":35.63431930541992,"lon":139.65480041503907,"time":1585550240.844,"speed":8.459601402282715,"bearing":155.32681274414063,"altitude":81.43798828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4238.36767578125,"remaining_leg_duration":660.681999999,"step_index":1,"remaining_step_distance":390.74932861328127,"remaining_step_duration":107.0,"state_message":"","in_tunnel":false,"predicted":2.225,"shape_index":12,"intersection_index":4,"road_name":"","key_points":[{"lat":35.63431930541992,"lon":139.65480041503907,"time":1585550240.844,"bearing":155.32681274414063}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6344419,"lon":139.6548018,"time":1585550239.63,"speed":7.27094030380249,"bearing":154.0012969970703,"altitude":81.0419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550239.630842,"delta_ms":0},{"type":"getStatus","timestamp":1585550241.872,"event_timestamp":1585550240.373848,"result":{"route_state":"tracking","location":{"lat":35.63427734375,"lon":139.65481567382813,"time":1585550241.872,"speed":7.61229944229126,"bearing":160.42562866210938,"altitude":81.0419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4233.517578125,"remaining_leg_duration":659.681999999,"step_index":1,"remaining_step_distance":385.8988952636719,"remaining_step_duration":105.0,"state_message":"","in_tunnel":false,"predicted":2.242,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.634315490722659,"lon":139.65480041503907,"time":1585550240.933,"bearing":155.32681274414063},{"lat":35.63427734375,"lon":139.65481567382813,"time":1585550241.872,"bearing":160.42562866210938}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6343861,"lon":139.6548337,"time":1585550240.624,"speed":6.34024715423584,"bearing":155.02711486816407,"altitude":80.717041015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550240.624696,"delta_ms":0},{"type":"getStatus","timestamp":1585550242.923,"event_timestamp":1585550241.424915,"result":{"route_state":"tracking","location":{"lat":35.634239196777347,"lon":139.65484619140626,"time":1585550242.923,"speed":6.684237957000732,"bearing":160.42562866210938,"altitude":80.717041015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4228.53369140625,"remaining_leg_duration":657.681999999,"step_index":1,"remaining_step_distance":380.9149169921875,"remaining_step_duration":104.0,"state_message":"","in_tunnel":false,"predicted":2.299,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.634239196777347,"lon":139.65484619140626,"time":1585550242.923,"bearing":160.42562866210938}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6343383,"lon":139.6548594,"time":1585550241.632,"speed":5.310344696044922,"bearing":156.03358459472657,"altitude":80.4033203125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550241.633131,"delta_ms":0},{"type":"getStatus","timestamp":1585550243.96,"event_timestamp":1585550242.462188,"result":{"route_state":"tracking","location":{"lat":35.63420486450195,"lon":139.65484619140626,"time":1585550243.96,"speed":5.787201404571533,"bearing":160.42562866210938,"altitude":80.4033203125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4224.98974609375,"remaining_leg_duration":656.681999999,"step_index":1,"remaining_step_distance":377.3712158203125,"remaining_step_duration":103.0,"state_message":"","in_tunnel":false,"predicted":2.328,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63420486450195,"lon":139.65484619140626,"time":1585550243.96,"bearing":160.42562866210938}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6342987,"lon":139.6548784,"time":1585550242.63,"speed":4.195178508758545,"bearing":158.05877685546876,"altitude":80.75982666015625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550242.630435,"delta_ms":0},{"type":"getStatus","timestamp":1585550244.994,"event_timestamp":1585550243.495155,"result":{"route_state":"tracking","location":{"lat":35.63418960571289,"lon":139.6548614501953,"time":1585550244.994,"speed":4.691387176513672,"bearing":160.42562866210938,"altitude":80.75982666015625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4222.919921875,"remaining_leg_duration":656.681999999,"step_index":1,"remaining_step_distance":375.3015441894531,"remaining_step_duration":103.0,"state_message":"","in_tunnel":false,"predicted":2.364,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63418960571289,"lon":139.6548614501953,"time":1585550244.994,"bearing":160.42562866210938}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6342677,"lon":139.6548915,"time":1585550243.619,"speed":3.2921299934387209,"bearing":160.1549530029297,"altitude":80.85040283203125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550243.619855,"delta_ms":0},{"type":"getStatus","timestamp":1585550246.039,"event_timestamp":1585550244.542267,"result":{"route_state":"tracking","location":{"lat":35.634178161621097,"lon":139.6548614501953,"time":1585550246.039,"speed":3.7810871601104738,"bearing":160.42562866210938,"altitude":80.85040283203125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4221.728515625,"remaining_leg_duration":655.681999999,"step_index":1,"remaining_step_distance":374.1097106933594,"remaining_step_duration":102.0,"state_message":"","in_tunnel":false,"predicted":2.42,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.634178161621097,"lon":139.6548614501953,"time":1585550246.039,"bearing":160.42562866210938}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6342459,"lon":139.6548999,"time":1585550244.624,"speed":2.060581922531128,"bearing":160.09010314941407,"altitude":80.73297119140625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550244.624988,"delta_ms":0},{"type":"getStatus","timestamp":1585550247.076,"event_timestamp":1585550245.579374,"result":{"route_state":"tracking","location":{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550247.076,"speed":2.609373092651367,"bearing":160.42562866210938,"altitude":80.73297119140625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4219.6474609375,"remaining_leg_duration":655.681999999,"step_index":1,"remaining_step_distance":372.02886962890627,"remaining_step_duration":102.0,"state_message":"","in_tunnel":false,"predicted":2.452,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550247.076,"bearing":160.42562866210938}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6342327,"lon":139.6549041,"time":1585550245.632,"speed":1.1905698776245118,"bearing":160.0070037841797,"altitude":80.83001708984375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550245.632953,"delta_ms":0},{"type":"getStatus","timestamp":1585550248.12,"event_timestamp":1585550246.621399,"result":{"route_state":"tracking","location":{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550248.12,"speed":2.609373092651367,"bearing":160.42562866210938,"altitude":80.73297119140625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4219.6474609375,"remaining_leg_duration":655.681999999,"step_index":1,"remaining_step_distance":372.02886962890627,"remaining_step_duration":102.0,"state_message":"","in_tunnel":false,"predicted":2.488,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550247.076,"bearing":160.42562866210938}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6342264,"lon":139.654905,"time":1585550246.623,"speed":0.5105268955230713,"bearing":160.0181884765625,"altitude":79.9605712890625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550246.62367,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6342238,"lon":139.6549043,"time":1585550247.62,"speed":0.6890560388565064,"bearing":159.97573852539063,"altitude":79.69207763671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550247.620237,"delta_ms":0},{"type":"getStatus","timestamp":1585550249.153,"event_timestamp":1585550247.653814,"result":{"route_state":"tracking","location":{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550249.153,"speed":2.609373092651367,"bearing":160.42562866210938,"altitude":80.73297119140625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4219.6474609375,"remaining_leg_duration":655.681999999,"step_index":1,"remaining_step_distance":372.02886962890627,"remaining_step_duration":102.0,"state_message":"","in_tunnel":false,"predicted":1.533,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550248.12,"bearing":160.42562866210938}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6342178,"lon":139.6549053,"time":1585550248.627,"speed":1.1747463941574097,"bearing":159.92149353027345,"altitude":79.4173583984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550248.62743,"delta_ms":0},{"type":"getStatus","timestamp":1585550250.182,"event_timestamp":1585550248.683074,"result":{"route_state":"tracking","location":{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550250.182,"speed":2.609373092651367,"bearing":160.42562866210938,"altitude":80.73297119140625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4219.6474609375,"remaining_leg_duration":655.681999999,"step_index":1,"remaining_step_distance":372.02886962890627,"remaining_step_duration":102.0,"state_message":"","in_tunnel":false,"predicted":1.555,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550249.153,"bearing":160.42562866210938}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6342069,"lon":139.6549087,"time":1585550249.628,"speed":1.5982476472854615,"bearing":159.98126220703126,"altitude":79.57330322265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550249.628572,"delta_ms":0},{"type":"getStatus","timestamp":1585550251.238,"event_timestamp":1585550249.739085,"result":{"route_state":"tracking","location":{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550251.238,"speed":2.609373092651367,"bearing":160.42562866210938,"altitude":80.73297119140625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4219.6474609375,"remaining_leg_duration":655.681999999,"step_index":1,"remaining_step_distance":372.02886962890627,"remaining_step_duration":102.0,"state_message":"","in_tunnel":false,"predicted":1.61,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63416290283203,"lon":139.65487670898438,"time":1585550250.182,"bearing":160.42562866210938}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6341901,"lon":139.654915,"time":1585550250.625,"speed":2.7075324058532717,"bearing":160.98562622070313,"altitude":79.50115966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550250.626048,"delta_ms":0},{"type":"getStatus","timestamp":1585550252.291,"event_timestamp":1585550250.792632,"result":{"route_state":"tracking","location":{"lat":35.63413619995117,"lon":139.65487670898438,"time":1585550252.291,"speed":2.204636573791504,"bearing":160.42562866210938,"altitude":79.50115966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4216.86376953125,"remaining_leg_duration":654.681999999,"step_index":1,"remaining_step_distance":369.2452697753906,"remaining_step_duration":101.0,"state_message":"","in_tunnel":false,"predicted":1.666,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63413619995117,"lon":139.65487670898438,"time":1585550252.291,"bearing":160.42562866210938}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6341618,"lon":139.6549255,"time":1585550251.625,"speed":4.025265216827393,"bearing":160.81190490722657,"altitude":79.3011474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550251.625582,"delta_ms":0},{"type":"getStatus","timestamp":1585550253.334,"event_timestamp":1585550251.835523,"result":{"route_state":"tracking","location":{"lat":35.63410568237305,"lon":139.65489196777345,"time":1585550253.334,"speed":3.334712028503418,"bearing":160.42562866210938,"altitude":79.3011474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4213.201171875,"remaining_leg_duration":653.681999999,"step_index":1,"remaining_step_distance":365.58245849609377,"remaining_step_duration":100.0,"state_message":"","in_tunnel":false,"predicted":1.709,"shape_index":13,"intersection_index":5,"road_name":"","key_points":[{"lat":35.63410568237305,"lon":139.65489196777345,"time":1585550253.334,"bearing":160.42562866210938}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6341205,"lon":139.654941,"time":1585550252.633,"speed":5.50606107711792,"bearing":161.9894561767578,"altitude":79.4720458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550252.633492,"delta_ms":0},{"type":"getStatus","timestamp":1585550254.372,"event_timestamp":1585550252.873505,"result":{"route_state":"tracking","location":{"lat":35.63404083251953,"lon":139.65492248535157,"time":1585550254.372,"speed":4.786909103393555,"bearing":163.29576110839845,"altitude":79.4720458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4205.47021484375,"remaining_leg_duration":651.681999999,"step_index":1,"remaining_step_distance":357.8516540527344,"remaining_step_duration":98.0,"state_message":"","in_tunnel":false,"predicted":1.739,"shape_index":14,"intersection_index":6,"road_name":"","key_points":[{"lat":35.634071350097659,"lon":139.6549072265625,"time":1585550253.879,"bearing":160.42562866210938},{"lat":35.63404083251953,"lon":139.65492248535157,"time":1585550254.372,"bearing":163.29576110839845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6340678,"lon":139.6549606,"time":1585550253.627,"speed":6.215420246124268,"bearing":160.93846130371095,"altitude":79.53533935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550253.627674,"delta_ms":0},{"type":"getStatus","timestamp":1585550255.409,"event_timestamp":1585550253.910307,"result":{"route_state":"tracking","location":{"lat":35.633968353271487,"lon":139.6549530029297,"time":1585550255.409,"speed":5.783075332641602,"bearing":163.29576110839845,"altitude":79.53533935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4196.947265625,"remaining_leg_duration":649.681999999,"step_index":1,"remaining_step_distance":349.3284912109375,"remaining_step_duration":95.0,"state_message":"","in_tunnel":false,"predicted":1.782,"shape_index":14,"intersection_index":6,"road_name":"","key_points":[{"lat":35.633968353271487,"lon":139.6549530029297,"time":1585550255.409,"bearing":163.29576110839845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6340094,"lon":139.654985,"time":1585550254.622,"speed":7.029674053192139,"bearing":160.00006103515626,"altitude":79.08209228515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550254.622159,"delta_ms":0},{"type":"getStatus","timestamp":1585550256.443,"event_timestamp":1585550254.94523,"result":{"route_state":"tracking","location":{"lat":35.63389587402344,"lon":139.65496826171876,"time":1585550256.443,"speed":6.692165851593018,"bearing":163.29576110839845,"altitude":79.08209228515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4188.837890625,"remaining_leg_duration":647.681999999,"step_index":1,"remaining_step_distance":341.2194519042969,"remaining_step_duration":93.0,"state_message":"","in_tunnel":false,"predicted":1.821,"shape_index":14,"intersection_index":6,"road_name":"","key_points":[{"lat":35.63389587402344,"lon":139.65496826171876,"time":1585550256.443,"bearing":163.29576110839845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6339453,"lon":139.6550116,"time":1585550255.624,"speed":7.4495768547058109,"bearing":160.9989776611328,"altitude":79.4189453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550255.625074,"delta_ms":0},{"type":"getStatus","timestamp":1585550257.482,"event_timestamp":1585550255.985074,"result":{"route_state":"tracking","location":{"lat":35.63382339477539,"lon":139.65499877929688,"time":1585550257.482,"speed":7.302596092224121,"bearing":162.3213653564453,"altitude":79.4189453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4180.3193359375,"remaining_leg_duration":644.681999999,"step_index":1,"remaining_step_distance":332.70068359375,"remaining_step_duration":91.0,"state_message":"","in_tunnel":false,"predicted":1.858,"shape_index":15,"intersection_index":7,"road_name":"","key_points":[{"lat":35.63382339477539,"lon":139.65499877929688,"time":1585550257.482,"bearing":163.29576110839845},{"lat":35.63382339477539,"lon":139.65499877929688,"time":1585550257.482,"bearing":162.3213653564453}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6338781,"lon":139.65503760000002,"time":1585550256.627,"speed":7.637731552124023,"bearing":160.99513244628907,"altitude":79.52520751953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550256.627965,"delta_ms":0},{"type":"getStatus","timestamp":1585550258.539,"event_timestamp":1585550257.041585,"result":{"route_state":"tracking","location":{"lat":35.63374328613281,"lon":139.655029296875,"time":1585550258.539,"speed":7.649549961090088,"bearing":162.3213653564453,"altitude":79.52520751953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4170.98388671875,"remaining_leg_duration":642.681999999,"step_index":1,"remaining_step_distance":323.3652648925781,"remaining_step_duration":88.0,"state_message":"","in_tunnel":false,"predicted":1.912,"shape_index":15,"intersection_index":7,"road_name":"","key_points":[{"lat":35.63374328613281,"lon":139.655029296875,"time":1585550258.539,"bearing":162.3213653564453}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6338097,"lon":139.6550646,"time":1585550257.62,"speed":8.032814979553223,"bearing":161.98330688476563,"altitude":79.775146484375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550257.620885,"delta_ms":0},{"type":"getStatus","timestamp":1585550259.573,"event_timestamp":1585550258.077021,"result":{"route_state":"tracking","location":{"lat":35.6336669921875,"lon":139.65505981445313,"time":1585550259.573,"speed":7.957284450531006,"bearing":162.3213653564453,"altitude":79.775146484375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4162.0537109375,"remaining_leg_duration":639.681999999,"step_index":1,"remaining_step_distance":314.435302734375,"remaining_step_duration":86.0,"state_message":"","in_tunnel":false,"predicted":1.953,"shape_index":15,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6336669921875,"lon":139.65505981445313,"time":1585550259.573,"bearing":162.3213653564453}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6337399,"lon":139.6550912,"time":1585550258.618,"speed":7.9517011642456059,"bearing":161.00604248046876,"altitude":80.005615234375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550258.618435,"delta_ms":0},{"type":"getStatus","timestamp":1585550260.609,"event_timestamp":1585550259.111164,"result":{"route_state":"tracking","location":{"lat":35.63359832763672,"lon":139.65509033203126,"time":1585550260.609,"speed":8.008712768554688,"bearing":162.3213653564453,"altitude":80.005615234375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4153.93115234375,"remaining_leg_duration":637.681999999,"step_index":1,"remaining_step_distance":306.3125305175781,"remaining_step_duration":84.0,"state_message":"","in_tunnel":false,"predicted":1.991,"shape_index":15,"intersection_index":7,"road_name":"","key_points":[{"lat":35.63359832763672,"lon":139.65509033203126,"time":1585550260.609,"bearing":162.3213653564453}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.633671,"lon":139.6551193,"time":1585550259.625,"speed":7.969712257385254,"bearing":160.99945068359376,"altitude":80.28509521484375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550259.625866,"delta_ms":0},{"type":"getStatus","timestamp":1585550261.654,"event_timestamp":1585550260.158009,"result":{"route_state":"tracking","location":{"lat":35.63351821899414,"lon":139.65512084960938,"time":1585550261.654,"speed":8.029624938964844,"bearing":162.3213653564453,"altitude":80.28509521484375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4144.5966796875,"remaining_leg_duration":634.681999999,"step_index":1,"remaining_step_distance":296.9783020019531,"remaining_step_duration":81.0,"state_message":"","in_tunnel":false,"predicted":2.029,"shape_index":15,"intersection_index":7,"road_name":"","key_points":[{"lat":35.63351821899414,"lon":139.65512084960938,"time":1585550261.654,"bearing":162.3213653564453}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6336027,"lon":139.6551458,"time":1585550260.626,"speed":7.408882141113281,"bearing":161.0198516845703,"altitude":80.3509521484375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550260.626917,"delta_ms":0},{"type":"getStatus","timestamp":1585550262.705,"event_timestamp":1585550261.210842,"result":{"route_state":"tracking","location":{"lat":35.633445739746097,"lon":139.6551513671875,"time":1585550262.705,"speed":7.673842906951904,"bearing":162.3213653564453,"altitude":80.3509521484375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4136.0703125,"remaining_leg_duration":632.681999999,"step_index":1,"remaining_step_distance":288.4515075683594,"remaining_step_duration":79.0,"state_message":"","in_tunnel":false,"predicted":2.079,"shape_index":15,"intersection_index":7,"road_name":"","key_points":[{"lat":35.633445739746097,"lon":139.6551513671875,"time":1585550262.705,"bearing":162.3213653564453}]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6335407,"lon":139.6551703,"time":1585550261.641,"speed":6.741242408752441,"bearing":161.00250244140626,"altitude":80.79248046875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550261.641837,"delta_ms":0},{"type":"getStatus","timestamp":1585550263.738,"event_timestamp":1585550262.240244,"result":{"route_state":"tracking","location":{"lat":35.63340377807617,"lon":139.65516662597657,"time":1585550263.738,"speed":7.038567543029785,"bearing":161.23924255371095,"altitude":80.79248046875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4131.19189453125,"remaining_leg_duration":631.681999999,"step_index":1,"remaining_step_distance":283.57318115234377,"remaining_step_duration":78.0,"state_message":"","in_tunnel":false,"predicted":2.097,"shape_index":16,"intersection_index":8,"road_name":"","key_points":[{"lat":35.6334342956543,"lon":139.6551513671875,"time":1585550262.971,"bearing":162.3213653564453},{"lat":35.63340377807617,"lon":139.65516662597657,"time":1585550263.738,"bearing":161.23924255371095}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6334835,"lon":139.6551936,"time":1585550262.622,"speed":6.88854455947876,"bearing":160.99655151367188,"altitude":81.05615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550262.623096,"delta_ms":0},{"type":"getStatus","timestamp":1585550264.805,"event_timestamp":1585550263.306565,"result":{"route_state":"tracking","location":{"lat":35.63333511352539,"lon":139.6551971435547,"time":1585550264.805,"speed":6.951507568359375,"bearing":161.23924255371095,"altitude":81.05615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4123.0654296875,"remaining_leg_duration":629.681999999,"step_index":1,"remaining_step_distance":275.4469299316406,"remaining_step_duration":75.0,"state_message":"","in_tunnel":false,"predicted":2.183,"shape_index":16,"intersection_index":8,"road_name":"","key_points":[{"lat":35.63333511352539,"lon":139.6551971435547,"time":1585550264.805,"bearing":161.23924255371095}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6334244,"lon":139.655217,"time":1585550263.641,"speed":6.938699245452881,"bearing":162.9939422607422,"altitude":81.5218505859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550263.642113,"delta_ms":0},{"type":"getStatus","timestamp":1585550265.839,"event_timestamp":1585550264.343631,"result":{"route_state":"tracking","location":{"lat":35.633277893066409,"lon":139.65521240234376,"time":1585550265.839,"speed":6.9246931076049809,"bearing":161.23924255371095,"altitude":81.5218505859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4116.5927734375,"remaining_leg_duration":627.681999999,"step_index":1,"remaining_step_distance":268.9740295410156,"remaining_step_duration":74.0,"state_message":"","in_tunnel":false,"predicted":2.198,"shape_index":16,"intersection_index":8,"road_name":"","key_points":[{"lat":35.633277893066409,"lon":139.65521240234376,"time":1585550265.839,"bearing":161.23924255371095}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.633364,"lon":139.6552375,"time":1585550264.629,"speed":7.066315650939941,"bearing":163.98974609375,"altitude":81.89349365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550264.630004,"delta_ms":0},{"type":"getStatus","timestamp":1585550266.875,"event_timestamp":1585550265.378214,"result":{"route_state":"tracking","location":{"lat":35.633216857910159,"lon":139.65524291992188,"time":1585550266.875,"speed":7.013256072998047,"bearing":161.23924255371095,"altitude":81.89349365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4109.27490234375,"remaining_leg_duration":625.681999999,"step_index":1,"remaining_step_distance":261.6561584472656,"remaining_step_duration":72.0,"state_message":"","in_tunnel":false,"predicted":2.246,"shape_index":16,"intersection_index":8,"road_name":"","key_points":[{"lat":35.633216857910159,"lon":139.65524291992188,"time":1585550266.875,"bearing":161.23924255371095}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6333011,"lon":139.6552584,"time":1585550265.62,"speed":7.453821182250977,"bearing":162.98974609375,"altitude":81.866943359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550265.620331,"delta_ms":0},{"type":"getStatus","timestamp":1585550267.907,"event_timestamp":1585550266.409186,"result":{"route_state":"tracking","location":{"lat":35.633148193359378,"lon":139.6552734375,"time":1585550267.907,"speed":7.266667366027832,"bearing":161.23924255371095,"altitude":81.866943359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4101.1484375,"remaining_leg_duration":623.681999999,"step_index":1,"remaining_step_distance":253.52989196777345,"remaining_step_duration":69.0,"state_message":"","in_tunnel":false,"predicted":2.287,"shape_index":16,"intersection_index":8,"road_name":"","voice_instruction":{"ssml_announcement":"300 メートル先、駒沢を右折です","announcement":"300 メートル先、駒沢を右折です","remaining_step_distance":256.1000061035156,"index":1},"key_points":[{"lat":35.633148193359378,"lon":139.6552734375,"time":1585550267.907,"bearing":161.23924255371095}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6332322,"lon":139.6552844,"time":1585550266.802,"speed":8.060698509216309,"bearing":159.99038696289063,"altitude":82.352294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550266.802312,"delta_ms":0},{"type":"getStatus","timestamp":1585550268.939,"event_timestamp":1585550267.440145,"result":{"route_state":"tracking","location":{"lat":35.63307571411133,"lon":139.65530395507813,"time":1585550268.939,"speed":7.709075450897217,"bearing":161.23924255371095,"altitude":82.352294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4092.620849609375,"remaining_leg_duration":620.681999999,"step_index":1,"remaining_step_distance":245.00213623046876,"remaining_step_duration":67.0,"state_message":"","in_tunnel":false,"predicted":2.137,"shape_index":16,"intersection_index":8,"road_name":"","key_points":[{"lat":35.63307571411133,"lon":139.65530395507813,"time":1585550268.939,"bearing":161.23924255371095}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6331645,"lon":139.6553138,"time":1585550267.623,"speed":8.878901481628418,"bearing":158.99923706054688,"altitude":82.5382080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550267.623482,"delta_ms":0},{"type":"getStatus","timestamp":1585550269.973,"event_timestamp":1585550268.473965,"result":{"route_state":"tracking","location":{"lat":35.63298416137695,"lon":139.6553497314453,"time":1585550269.973,"speed":8.529621124267579,"bearing":161.23924255371095,"altitude":82.5382080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4081.6318359375,"remaining_leg_duration":617.681999999,"step_index":1,"remaining_step_distance":234.01333618164063,"remaining_step_duration":64.0,"state_message":"","in_tunnel":false,"predicted":2.35,"shape_index":16,"intersection_index":8,"road_name":"","key_points":[{"lat":35.63298416137695,"lon":139.6553497314453,"time":1585550269.973,"bearing":161.23924255371095}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6330874,"lon":139.65534830000002,"time":1585550268.627,"speed":9.099634170532227,"bearing":159.9988555908203,"altitude":82.40667724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550268.627948,"delta_ms":0},{"type":"getStatus","timestamp":1585550271.011,"event_timestamp":1585550269.512232,"result":{"route_state":"tracking","location":{"lat":35.63290023803711,"lon":139.65538024902345,"time":1585550271.011,"speed":8.931879997253418,"bearing":162.37831115722657,"altitude":82.40667724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4071.864990234375,"remaining_leg_duration":615.681999999,"step_index":1,"remaining_step_distance":224.246337890625,"remaining_step_duration":61.0,"state_message":"","in_tunnel":false,"predicted":2.384,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.6329231262207,"lon":139.65536499023438,"time":1585550270.705,"bearing":161.23924255371095},{"lat":35.63290023803711,"lon":139.65538024902345,"time":1585550271.011,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6330102,"lon":139.6553803,"time":1585550269.626,"speed":8.423531532287598,"bearing":161.04080200195313,"altitude":82.7275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550269.628828,"delta_ms":0},{"type":"getStatus","timestamp":1585550272.066,"event_timestamp":1585550270.567685,"result":{"route_state":"tracking","location":{"lat":35.63282012939453,"lon":139.65541076660157,"time":1585550272.066,"speed":8.670124053955079,"bearing":162.37831115722657,"altitude":82.7275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4062.5712890625,"remaining_leg_duration":612.681999999,"step_index":1,"remaining_step_distance":214.95257568359376,"remaining_step_duration":59.0,"state_message":"","in_tunnel":false,"predicted":2.44,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63282012939453,"lon":139.65541076660157,"time":1585550272.066,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6329393,"lon":139.655409,"time":1585550270.63,"speed":7.964155197143555,"bearing":161.00856018066407,"altitude":82.68499755859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550270.630919,"delta_ms":0},{"type":"getStatus","timestamp":1585550273.105,"event_timestamp":1585550271.606425,"result":{"route_state":"tracking","location":{"lat":35.632747650146487,"lon":139.65542602539063,"time":1585550273.105,"speed":8.275437355041504,"bearing":162.37831115722657,"altitude":82.68499755859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4054.46240234375,"remaining_leg_duration":610.681999999,"step_index":1,"remaining_step_distance":206.84375,"remaining_step_duration":57.0,"state_message":"","in_tunnel":false,"predicted":2.475,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.632747650146487,"lon":139.65542602539063,"time":1585550273.105,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6328705,"lon":139.6554371,"time":1585550271.642,"speed":8.30849838256836,"bearing":160.99722290039063,"altitude":82.73468017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550271.642321,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6327982,"lon":139.6554668,"time":1585550272.633,"speed":8.723993301391602,"bearing":160.98863220214845,"altitude":82.7734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550272.63359,"delta_ms":0},{"type":"getStatus","timestamp":1585550274.135,"event_timestamp":1585550272.636646,"result":{"route_state":"tracking","location":{"lat":35.63267517089844,"lon":139.6554718017578,"time":1585550274.135,"speed":8.5672025680542,"bearing":162.37831115722657,"altitude":82.7734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4045.5166015625,"remaining_leg_duration":607.681999999,"step_index":1,"remaining_step_distance":197.8980255126953,"remaining_step_duration":54.0,"state_message":"","in_tunnel":false,"predicted":1.502,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63267517089844,"lon":139.6554718017578,"time":1585550274.135,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6327237,"lon":139.6554968,"time":1585550273.626,"speed":8.471052169799805,"bearing":161.00189208984376,"altitude":82.61114501953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550273.626776,"delta_ms":0},{"type":"getStatus","timestamp":1585550275.169,"event_timestamp":1585550273.670748,"result":{"route_state":"tracking","location":{"lat":35.63259506225586,"lon":139.65550231933595,"time":1585550275.169,"speed":8.512728691101075,"bearing":162.37831115722657,"altitude":82.61114501953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4036.18603515625,"remaining_leg_duration":605.681999999,"step_index":1,"remaining_step_distance":188.56736755371095,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.543,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63259506225586,"lon":139.65550231933595,"time":1585550275.169,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6326514,"lon":139.6555265,"time":1585550274.626,"speed":8.064471244812012,"bearing":161.00914001464845,"altitude":82.57965087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550274.627037,"delta_ms":0},{"type":"getStatus","timestamp":1585550276.213,"event_timestamp":1585550274.714528,"result":{"route_state":"tracking","location":{"lat":35.63253402709961,"lon":139.655517578125,"time":1585550276.213,"speed":8.250822067260743,"bearing":162.37831115722657,"altitude":82.57965087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4029.30029296875,"remaining_leg_duration":603.681999999,"step_index":1,"remaining_step_distance":181.68170166015626,"remaining_step_duration":50.0,"state_message":"","in_tunnel":false,"predicted":1.587,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63253402709961,"lon":139.655517578125,"time":1585550276.213,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6325855,"lon":139.6555533,"time":1585550275.628,"speed":6.844485759735107,"bearing":161.05995178222657,"altitude":82.7686767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550275.628527,"delta_ms":0},{"type":"getStatus","timestamp":1585550277.27,"event_timestamp":1585550275.771912,"result":{"route_state":"tracking","location":{"lat":35.63246536254883,"lon":139.65553283691407,"time":1585550277.27,"speed":7.407054424285889,"bearing":162.37831115722657,"altitude":82.7686767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4021.5888671875,"remaining_leg_duration":601.681999999,"step_index":1,"remaining_step_distance":173.9702606201172,"remaining_step_duration":48.0,"state_message":"","in_tunnel":false,"predicted":1.642,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63246536254883,"lon":139.65553283691407,"time":1585550277.27,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6325315,"lon":139.6555751,"time":1585550276.643,"speed":5.703815460205078,"bearing":161.12986755371095,"altitude":82.27142333984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550276.643807,"delta_ms":0},{"type":"getStatus","timestamp":1585550278.3,"event_timestamp":1585550276.801145,"result":{"route_state":"tracking","location":{"lat":35.632423400878909,"lon":139.6555633544922,"time":1585550278.3,"speed":6.3105692863464359,"bearing":162.37831115722657,"altitude":82.27142333984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4016.30908203125,"remaining_leg_duration":599.681999999,"step_index":1,"remaining_step_distance":168.69041442871095,"remaining_step_duration":46.0,"state_message":"","in_tunnel":false,"predicted":1.657,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.632423400878909,"lon":139.6555633544922,"time":1585550278.3,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.632489,"lon":139.6555917,"time":1585550277.652,"speed":4.072637557983398,"bearing":161.0514373779297,"altitude":82.19061279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550277.653088,"delta_ms":0},{"type":"getStatus","timestamp":1585550279.33,"event_timestamp":1585550277.831517,"result":{"route_state":"tracking","location":{"lat":35.63240051269531,"lon":139.6555633544922,"time":1585550279.33,"speed":4.81979513168335,"bearing":162.37831115722657,"altitude":82.19061279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4013.879150390625,"remaining_leg_duration":599.681999999,"step_index":1,"remaining_step_distance":166.26048278808595,"remaining_step_duration":45.0,"state_message":"","in_tunnel":false,"predicted":1.678,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63240051269531,"lon":139.6555633544922,"time":1585550279.33,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6324589,"lon":139.6556033,"time":1585550278.619,"speed":3.2401764392852785,"bearing":161.05284118652345,"altitude":82.15484619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550278.619748,"delta_ms":0},{"type":"getStatus","timestamp":1585550280.375,"event_timestamp":1585550278.877067,"result":{"route_state":"tracking","location":{"lat":35.632381439208987,"lon":139.65557861328126,"time":1585550280.375,"speed":3.771848201751709,"bearing":162.37831115722657,"altitude":82.15484619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4011.439453125,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":163.82080078125,"remaining_step_duration":45.0,"state_message":"","in_tunnel":false,"predicted":1.756,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.632381439208987,"lon":139.65557861328126,"time":1585550280.375,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6324358,"lon":139.6556116,"time":1585550279.621,"speed":2.211557388305664,"bearing":161.0888671875,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550279.621644,"delta_ms":0},{"type":"getStatus","timestamp":1585550281.412,"event_timestamp":1585550279.914822,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550281.412,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.791,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550281.412,"bearing":162.37831115722657}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6324232,"lon":139.6556159,"time":1585550280.629,"speed":1.1788848638534547,"bearing":161.12686157226563,"altitude":81.41864013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550280.629894,"delta_ms":0},{"type":"getStatus","timestamp":1585550282.444,"event_timestamp":1585550280.944844,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550282.444,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.815,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550281.412,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324163,"lon":139.6556178,"time":1585550281.626,"speed":0.6303178668022156,"bearing":161.0084991455078,"altitude":82.04888916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550281.62708,"delta_ms":0},{"type":"getStatus","timestamp":1585550283.475,"event_timestamp":1585550281.976589,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550283.475,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.849,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550282.444,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6324131,"lon":139.6556183,"time":1585550282.634,"speed":0.3326486051082611,"bearing":161.13626098632813,"altitude":81.73040771484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550282.634575,"delta_ms":0},{"type":"getStatus","timestamp":1585550284.553,"event_timestamp":1585550283.054585,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550284.553,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.919,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550283.475,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6324116,"lon":139.6556184,"time":1585550283.628,"speed":0.17056147754192353,"bearing":161.056396484375,"altitude":81.88641357421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550283.628495,"delta_ms":0},{"type":"getStatus","timestamp":1585550285.617,"event_timestamp":1585550284.118503,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550285.617,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.989,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550284.553,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324108,"lon":139.6556178,"time":1585550284.622,"speed":0.17025354504585267,"bearing":161.0419158935547,"altitude":81.64697265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550284.622193,"delta_ms":0},{"type":"getStatus","timestamp":1585550286.695,"event_timestamp":1585550285.196066,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550286.695,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.073,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550285.617,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324093,"lon":139.6556187,"time":1585550285.626,"speed":0.1771170049905777,"bearing":156.7261199951172,"altitude":82.09869384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550285.626258,"delta_ms":0},{"type":"getStatus","timestamp":1585550287.741,"event_timestamp":1585550286.242269,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550287.741,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.115,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550286.695,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324086,"lon":139.6556179,"time":1585550286.639,"speed":0.11571947485208512,"bearing":188.7112274169922,"altitude":82.0028076171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550286.639547,"delta_ms":0},{"type":"getStatus","timestamp":1585550288.828,"event_timestamp":1585550287.329081,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550288.828,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.189,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550287.741,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324086,"lon":139.6556156,"time":1585550287.626,"speed":0.1366046816110611,"bearing":250.42503356933595,"altitude":82.077880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550287.626481,"delta_ms":0},{"type":"getStatus","timestamp":1585550289.87,"event_timestamp":1585550288.372141,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550289.87,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.244,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550288.828,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6324079,"lon":139.6556143,"time":1585550288.623,"speed":0.13505879044532777,"bearing":240.6230010986328,"altitude":82.0472412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550288.623387,"delta_ms":0},{"type":"getStatus","timestamp":1585550290.92,"event_timestamp":1585550289.421119,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550290.92,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.297,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550289.87,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324069,"lon":139.6556133,"time":1585550289.622,"speed":0.1376316249370575,"bearing":228.54290771484376,"altitude":82.055419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550289.62296,"delta_ms":0},{"type":"getStatus","timestamp":1585550291.993,"event_timestamp":1585550290.493804,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550291.993,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.371,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550290.92,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324061,"lon":139.6556133,"time":1585550290.615,"speed":0.10066172480583191,"bearing":206.34967041015626,"altitude":82.14739990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550290.615776,"delta_ms":0},{"type":"getStatus","timestamp":1585550293.05,"event_timestamp":1585550291.551893,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550293.05,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.435,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550291.993,"bearing":162.37831115722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6324031,"lon":139.6556135,"time":1585550291.627,"speed":0.48989036679267886,"bearing":160.996826171875,"altitude":82.16607666015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550291.627904,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6323963,"lon":139.6556157,"time":1585550292.618,"speed":1.4693950414657593,"bearing":160.99484252929688,"altitude":81.78466796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550292.618331,"delta_ms":0},{"type":"getStatus","timestamp":1585550294.12,"event_timestamp":1585550292.621471,"result":{"route_state":"tracking","location":{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550294.12,"speed":2.6943843364715578,"bearing":162.37831115722657,"altitude":82.0965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.22509765625,"remaining_leg_duration":598.681999999,"step_index":1,"remaining_step_distance":162.60650634765626,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.502,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63236999511719,"lon":139.65557861328126,"time":1585550293.05,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6323795,"lon":139.6556217,"time":1585550293.621,"speed":2.607377529144287,"bearing":160.91925048828126,"altitude":81.5416259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550293.621306,"delta_ms":0},{"type":"getStatus","timestamp":1585550295.162,"event_timestamp":1585550293.664472,"result":{"route_state":"tracking","location":{"lat":35.63233947753906,"lon":139.6555938720703,"time":1585550295.162,"speed":2.0749945640563967,"bearing":162.37831115722657,"altitude":81.5416259765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4006.569580078125,"remaining_leg_duration":597.681999999,"step_index":1,"remaining_step_distance":158.95101928710938,"remaining_step_duration":43.0,"state_message":"","in_tunnel":false,"predicted":1.541,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63233947753906,"lon":139.6555938720703,"time":1585550295.162,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6323596,"lon":139.6556289,"time":1585550294.622,"speed":3.357853412628174,"bearing":161.3692169189453,"altitude":81.3765869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550294.622484,"delta_ms":0},{"type":"getStatus","timestamp":1585550296.217,"event_timestamp":1585550294.719846,"result":{"route_state":"tracking","location":{"lat":35.63230514526367,"lon":139.65560913085938,"time":1585550296.217,"speed":2.867807626724243,"bearing":162.37831115722657,"altitude":81.3765869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4002.5087890625,"remaining_leg_duration":596.681999999,"step_index":1,"remaining_step_distance":154.8902587890625,"remaining_step_duration":42.0,"state_message":"","in_tunnel":false,"predicted":1.595,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.63230514526367,"lon":139.65560913085938,"time":1585550296.217,"bearing":162.37831115722657}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.632324,"lon":139.6556429,"time":1585550295.625,"speed":4.122219085693359,"bearing":160.96937561035157,"altitude":81.20477294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550295.62577,"delta_ms":0},{"type":"getStatus","timestamp":1585550297.255,"event_timestamp":1585550295.756446,"result":{"route_state":"tracking","location":{"lat":35.632266998291019,"lon":139.65562438964845,"time":1585550297.255,"speed":3.709202289581299,"bearing":162.37831115722657,"altitude":81.20477294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3998.04345703125,"remaining_leg_duration":594.681999999,"step_index":1,"remaining_step_distance":150.4249267578125,"remaining_step_duration":41.0,"state_message":"","in_tunnel":false,"predicted":1.63,"shape_index":17,"intersection_index":9,"road_name":"","key_points":[{"lat":35.632266998291019,"lon":139.65562438964845,"time":1585550297.255,"bearing":162.37831115722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6322912,"lon":139.6556566,"time":1585550296.622,"speed":4.670366287231445,"bearing":159.8498992919922,"altitude":80.69512939453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550296.623019,"delta_ms":0},{"type":"getStatus","timestamp":1585550298.307,"event_timestamp":1585550296.808348,"result":{"route_state":"tracking","location":{"lat":35.63222122192383,"lon":139.6556396484375,"time":1585550298.307,"speed":4.3426361083984379,"bearing":160.63494873046876,"altitude":80.69512939453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3992.76953125,"remaining_leg_duration":593.681999999,"step_index":1,"remaining_step_distance":145.1510467529297,"remaining_step_duration":40.0,"state_message":"","in_tunnel":false,"predicted":1.685,"shape_index":18,"intersection_index":10,"road_name":"","key_points":[{"lat":35.632259368896487,"lon":139.65562438964845,"time":1585550297.423,"bearing":162.37831115722657},{"lat":35.63222122192383,"lon":139.6556396484375,"time":1585550298.307,"bearing":160.63494873046876}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6322514,"lon":139.6556744,"time":1585550297.629,"speed":5.280251979827881,"bearing":159.5123748779297,"altitude":80.597900390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550297.629703,"delta_ms":0},{"type":"getStatus","timestamp":1585550299.354,"event_timestamp":1585550297.855434,"result":{"route_state":"tracking","location":{"lat":35.63216781616211,"lon":139.65567016601563,"time":1585550299.354,"speed":4.939341068267822,"bearing":160.63494873046876,"altitude":80.597900390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3986.23388671875,"remaining_leg_duration":591.681999999,"step_index":1,"remaining_step_distance":138.61532592773438,"remaining_step_duration":38.0,"state_message":"","in_tunnel":false,"predicted":1.725,"shape_index":18,"intersection_index":10,"road_name":"","key_points":[{"lat":35.63216781616211,"lon":139.65567016601563,"time":1585550299.354,"bearing":160.63494873046876}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6321969,"lon":139.6556992,"time":1585550298.631,"speed":6.293443202972412,"bearing":157.9842987060547,"altitude":80.68798828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550298.6321,"delta_ms":0},{"type":"getStatus","timestamp":1585550300.388,"event_timestamp":1585550298.889362,"result":{"route_state":"tracking","location":{"lat":35.63209533691406,"lon":139.6557159423828,"time":1585550300.388,"speed":5.878172874450684,"bearing":144.74855041503907,"altitude":80.68798828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3976.823974609375,"remaining_leg_duration":589.681999999,"step_index":1,"remaining_step_distance":129.2053985595703,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.757,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.632118225097659,"lon":139.6556854248047,"time":1585550299.976,"bearing":160.63494873046876},{"lat":35.63209533691406,"lon":139.6557159423828,"time":1585550300.388,"bearing":144.74855041503907}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6321365,"lon":139.6557299,"time":1585550299.624,"speed":7.139066696166992,"bearing":153.00262451171876,"altitude":80.66436767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550299.624761,"delta_ms":0},{"type":"getStatus","timestamp":1585550301.432,"event_timestamp":1585550299.933872,"result":{"route_state":"tracking","location":{"lat":35.63203430175781,"lon":139.65576171875,"time":1585550301.432,"speed":6.789404392242432,"bearing":144.74855041503907,"altitude":80.66436767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3968.964111328125,"remaining_leg_duration":586.681999999,"step_index":1,"remaining_step_distance":121.34552764892578,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":1.808,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.63203430175781,"lon":139.65576171875,"time":1585550301.432,"bearing":144.74855041503907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6320721,"lon":139.6557728,"time":1585550300.625,"speed":8.199112892150879,"bearing":147.00393676757813,"altitude":80.68499755859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550300.625223,"delta_ms":0},{"type":"getStatus","timestamp":1585550302.468,"event_timestamp":1585550300.969619,"result":{"route_state":"tracking","location":{"lat":35.6319465637207,"lon":139.6558380126953,"time":1585550302.468,"speed":7.873419761657715,"bearing":144.74855041503907,"altitude":80.68499755859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3957.005615234375,"remaining_leg_duration":583.681999999,"step_index":1,"remaining_step_distance":109.38703918457031,"remaining_step_duration":30.0,"state_message":"","in_tunnel":false,"predicted":1.843,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.6319465637207,"lon":139.6558380126953,"time":1585550302.468,"bearing":144.74855041503907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6320043,"lon":139.6558288,"time":1585550301.631,"speed":9.372167587280274,"bearing":144.99696350097657,"altitude":80.6507568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550301.632155,"delta_ms":0},{"type":"getStatus","timestamp":1585550303.518,"event_timestamp":1585550302.02252,"result":{"route_state":"tracking","location":{"lat":35.631874084472659,"lon":139.65589904785157,"time":1585550303.518,"speed":8.892091751098633,"bearing":144.74855041503907,"altitude":80.6507568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3947.23046875,"remaining_leg_duration":580.681999999,"step_index":1,"remaining_step_distance":99.61181640625,"remaining_step_duration":27.0,"state_message":"","in_tunnel":false,"predicted":1.887,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.631874084472659,"lon":139.65589904785157,"time":1585550303.518,"bearing":144.74855041503907}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6319324,"lon":139.6558937,"time":1585550302.628,"speed":9.579704284667969,"bearing":144.00111389160157,"altitude":80.16107177734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550302.628952,"delta_ms":0},{"type":"getStatus","timestamp":1585550304.578,"event_timestamp":1585550303.079205,"result":{"route_state":"tracking","location":{"lat":35.63178634643555,"lon":139.65597534179688,"time":1585550304.578,"speed":9.509323120117188,"bearing":144.74855041503907,"altitude":80.16107177734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3935.270263671875,"remaining_leg_duration":577.681999999,"step_index":1,"remaining_step_distance":87.65164947509766,"remaining_step_duration":24.0,"state_message":"","in_tunnel":false,"predicted":1.95,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.63178634643555,"lon":139.65597534179688,"time":1585550304.578,"bearing":144.74855041503907}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.631862,"lon":139.6559582,"time":1585550303.631,"speed":9.248200416564942,"bearing":144.01304626464845,"altitude":79.95947265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550303.631588,"delta_ms":0},{"type":"getStatus","timestamp":1585550305.617,"event_timestamp":1585550304.118453,"result":{"route_state":"tracking","location":{"lat":35.63170623779297,"lon":139.65603637695313,"time":1585550305.617,"speed":9.480785369873047,"bearing":144.74855041503907,"altitude":79.95947265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3924.798095703125,"remaining_leg_duration":574.681999999,"step_index":1,"remaining_step_distance":77.1794662475586,"remaining_step_duration":21.0,"state_message":"","in_tunnel":false,"predicted":1.986,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.63170623779297,"lon":139.65603637695313,"time":1585550305.617,"bearing":144.74855041503907}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6317938,"lon":139.6560181,"time":1585550304.622,"speed":8.952805519104004,"bearing":144.00465393066407,"altitude":80.37127685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550304.622205,"delta_ms":0},{"type":"getStatus","timestamp":1585550306.671,"event_timestamp":1585550305.171746,"result":{"route_state":"tracking","location":{"lat":35.63163757324219,"lon":139.65611267089845,"time":1585550306.671,"speed":9.205201148986817,"bearing":144.74855041503907,"altitude":80.37127685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3914.57080078125,"remaining_leg_duration":572.681999999,"step_index":1,"remaining_step_distance":66.95228576660156,"remaining_step_duration":18.0,"state_message":"","in_tunnel":false,"predicted":2.049,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.63163757324219,"lon":139.65611267089845,"time":1585550306.671,"bearing":144.74855041503907}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6317286,"lon":139.6560769,"time":1585550305.632,"speed":8.640257835388184,"bearing":143.0009307861328,"altitude":80.53765869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550305.63232,"delta_ms":0},{"type":"getStatus","timestamp":1585550307.706,"event_timestamp":1585550306.206933,"result":{"route_state":"tracking","location":{"lat":35.631587982177737,"lon":139.65615844726563,"time":1585550307.706,"speed":8.884613990783692,"bearing":144.74855041503907,"altitude":80.53765869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3907.67041015625,"remaining_leg_duration":570.681999999,"step_index":1,"remaining_step_distance":60.05188751220703,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.074,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.631587982177737,"lon":139.65615844726563,"time":1585550307.706,"bearing":144.74855041503907}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6316669,"lon":139.6561335,"time":1585550306.622,"speed":8.263324737548829,"bearing":143.00535583496095,"altitude":80.5880126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550306.622487,"delta_ms":0},{"type":"getStatus","timestamp":1585550308.744,"event_timestamp":1585550307.245395,"result":{"route_state":"tracking","location":{"lat":35.63151168823242,"lon":139.65621948242188,"time":1585550308.744,"speed":8.515741348266602,"bearing":144.74855041503907,"altitude":80.5880126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3897.551513671875,"remaining_leg_duration":567.681999999,"step_index":1,"remaining_step_distance":49.93287658691406,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":2.122,"shape_index":19,"intersection_index":11,"road_name":"","voice_instruction":{"ssml_announcement":"駒沢を右折です","announcement":"駒沢を右折です","remaining_step_distance":54.900001525878909,"index":2},"key_points":[{"lat":35.63151168823242,"lon":139.65621948242188,"time":1585550308.744,"bearing":144.74855041503907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6316076,"lon":139.6561863,"time":1585550307.625,"speed":7.920467376708984,"bearing":143.99937438964845,"altitude":81.210205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550307.625269,"delta_ms":0},{"type":"getStatus","timestamp":1585550309.784,"event_timestamp":1585550308.285951,"result":{"route_state":"tracking","location":{"lat":35.63145065307617,"lon":139.65626525878907,"time":1585550309.784,"speed":8.184712409973145,"bearing":144.74855041503907,"altitude":81.210205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3889.61376953125,"remaining_leg_duration":565.681999999,"step_index":1,"remaining_step_distance":41.995262145996097,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.159,"shape_index":19,"intersection_index":11,"road_name":"","key_points":[{"lat":35.63145065307617,"lon":139.65626525878907,"time":1585550309.784,"bearing":144.74855041503907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6315491,"lon":139.6562369,"time":1585550308.644,"speed":7.81021785736084,"bearing":144.00035095214845,"altitude":81.878173828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550308.644302,"delta_ms":0},{"type":"getStatus","timestamp":1585550310.816,"event_timestamp":1585550309.31762,"result":{"route_state":"tracking","location":{"lat":35.631404876708987,"lon":139.65631103515626,"time":1585550310.816,"speed":7.89466667175293,"bearing":146.25540161132813,"altitude":81.878173828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3883.019775390625,"remaining_leg_duration":563.681999999,"step_index":1,"remaining_step_distance":35.401241302490237,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":2.172,"shape_index":20,"intersection_index":12,"road_name":"","key_points":[{"lat":35.63141632080078,"lon":139.6562957763672,"time":1585550310.521,"bearing":144.74855041503907},{"lat":35.631404876708987,"lon":139.65631103515626,"time":1585550310.816,"bearing":146.25540161132813}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6314912,"lon":139.6562875,"time":1585550309.62,"speed":7.938374996185303,"bearing":143.99700927734376,"altitude":82.70648193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550309.620162,"delta_ms":0},{"type":"getStatus","timestamp":1585550311.854,"event_timestamp":1585550310.357297,"result":{"route_state":"tracking","location":{"lat":35.63133239746094,"lon":139.6563720703125,"time":1585550311.854,"speed":7.909574508666992,"bearing":146.25540161132813,"altitude":82.70648193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3873.282958984375,"remaining_leg_duration":560.681999999,"step_index":1,"remaining_step_distance":25.664440155029298,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.234,"shape_index":20,"intersection_index":12,"road_name":"","key_points":[{"lat":35.63133239746094,"lon":139.6563720703125,"time":1585550311.854,"bearing":146.25540161132813}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6314328,"lon":139.6563397,"time":1585550310.631,"speed":7.8902411460876469,"bearing":144.00042724609376,"altitude":83.1533203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550310.631621,"delta_ms":0},{"type":"getStatus","timestamp":1585550312.89,"event_timestamp":1585550311.397183,"result":{"route_state":"tracking","location":{"lat":35.63127899169922,"lon":139.6564178466797,"time":1585550312.89,"speed":7.892735481262207,"bearing":146.25540161132813,"altitude":83.1533203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3866.0390625,"remaining_leg_duration":558.681999999,"step_index":1,"remaining_step_distance":18.420547485351564,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.259,"shape_index":20,"intersection_index":12,"road_name":"","key_points":[{"lat":35.63127899169922,"lon":139.6564178466797,"time":1585550312.89,"bearing":146.25540161132813}]},"delta_ms":6},{"type":"updateLocation","location":{"lat":35.6313764,"lon":139.6563899,"time":1585550311.635,"speed":7.532150745391846,"bearing":143.00845336914063,"altitude":83.16326904296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550311.635899,"delta_ms":0},{"type":"getStatus","timestamp":1585550313.951,"event_timestamp":1585550312.453499,"result":{"route_state":"tracking","location":{"lat":35.6312141418457,"lon":139.65646362304688,"time":1585550313.951,"speed":7.619041442871094,"bearing":146.25540161132813,"altitude":83.16326904296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3857.748046875,"remaining_leg_duration":556.681999999,"step_index":1,"remaining_step_distance":10.12948989868164,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.316,"shape_index":20,"intersection_index":12,"road_name":"","key_points":[{"lat":35.6312141418457,"lon":139.65646362304688,"time":1585550313.951,"bearing":146.25540161132813}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.631323,"lon":139.6564387,"time":1585550312.617,"speed":7.669441223144531,"bearing":142.99911499023438,"altitude":83.4971923828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550312.617975,"delta_ms":0},{"type":"getStatus","timestamp":1585550314.99,"event_timestamp":1585550313.491507,"result":{"route_state":"tracking","location":{"lat":35.631160736083987,"lon":139.65650939941407,"time":1585550314.99,"speed":7.595785140991211,"bearing":146.25540161132813,"altitude":83.4971923828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3850.503173828125,"remaining_leg_duration":554.681999999,"step_index":1,"remaining_step_distance":2.8845653533935549,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":2.373,"shape_index":20,"intersection_index":12,"road_name":"","key_points":[{"lat":35.631160736083987,"lon":139.65650939941407,"time":1585550314.99,"bearing":146.25540161132813}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6312682,"lon":139.6564886,"time":1585550313.628,"speed":7.462252616882324,"bearing":143.9941864013672,"altitude":83.5572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550313.62909,"delta_ms":0},{"type":"getStatus","timestamp":1585550316.036,"event_timestamp":1585550314.538391,"result":{"route_state":"tracking","location":{"lat":35.63113784790039,"lon":139.65652465820313,"time":1585550316.036,"speed":7.583018779754639,"bearing":146.25540161132813,"altitude":83.5572509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3847.61865234375,"remaining_leg_duration":553.681999999,"step_index":1,"remaining_step_distance":0.0000019073486328125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.408,"shape_index":20,"intersection_index":12,"road_name":"","key_points":[{"lat":35.63113784790039,"lon":139.65652465820313,"time":1585550316.036,"bearing":146.25540161132813}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6312143,"lon":139.6565355,"time":1585550314.616,"speed":7.202998161315918,"bearing":144.00607299804688,"altitude":83.4478759765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550314.616948,"delta_ms":0},{"type":"getStatus","timestamp":1585550317.076,"event_timestamp":1585550315.578589,"result":{"route_state":"tracking","location":{"lat":35.63106918334961,"lon":139.6565399169922,"time":1585550317.076,"speed":7.337559223175049,"bearing":170.98837280273438,"altitude":83.4478759765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3839.8505859375,"remaining_leg_duration":552.922999999,"step_index":2,"remaining_step_distance":3366.7021484375,"remaining_step_duration":411.0,"state_message":"","in_tunnel":false,"predicted":2.46,"shape_index":21,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":3374.469970703125,"index":0},"key_points":[{"lat":35.63113784790039,"lon":139.65652465820313,"time":1585550316.036,"bearing":146.25540161132813},{"lat":35.63106918334961,"lon":139.6565399169922,"time":1585550317.076,"bearing":170.98837280273438}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6311596,"lon":139.6565833,"time":1585550315.628,"speed":7.109538555145264,"bearing":146.96670532226563,"altitude":83.3182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550315.628629,"delta_ms":0},{"type":"getStatus","timestamp":1585550318.114,"event_timestamp":1585550316.615975,"result":{"route_state":"tracking","location":{"lat":35.631004333496097,"lon":139.65655517578126,"time":1585550318.114,"speed":7.186728000640869,"bearing":170.98837280273438,"altitude":83.3182373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3832.501220703125,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3359.3525390625,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":2.486,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.631004333496097,"lon":139.65655517578126,"time":1585550318.114,"bearing":170.98837280273438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6311044,"lon":139.6566205,"time":1585550316.684,"speed":6.386042594909668,"bearing":157.91409301757813,"altitude":83.73162841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550316.684439,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6310511,"lon":139.656639,"time":1585550317.629,"speed":5.897643089294434,"bearing":169.98028564453126,"altitude":83.880126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550317.629921,"delta_ms":0},{"type":"getStatus","timestamp":1585550319.168,"event_timestamp":1585550317.669358,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550319.168,"speed":6.176133632659912,"bearing":170.98837280273438,"altitude":83.880126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.539,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550319.168,"bearing":170.98837280273438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6310004,"lon":139.6566414,"time":1585550318.628,"speed":5.344916820526123,"bearing":180.9893798828125,"altitude":84.2572021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550318.628318,"delta_ms":0},{"type":"getStatus","timestamp":1585550320.208,"event_timestamp":1585550318.709728,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550320.208,"speed":5.645487308502197,"bearing":170.98837280273438,"altitude":84.2572021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.58,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550319.168,"bearing":170.98837280273438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6309522,"lon":139.6566341,"time":1585550319.629,"speed":4.887669563293457,"bearing":185.9474639892578,"altitude":84.7498779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550319.629604,"delta_ms":0},{"type":"getStatus","timestamp":1585550321.249,"event_timestamp":1585550319.750384,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550321.249,"speed":5.165244102478027,"bearing":170.98837280273438,"altitude":84.7498779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.62,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550320.208,"bearing":170.98837280273438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6309155,"lon":139.6566227,"time":1585550320.629,"speed":4.46849250793457,"bearing":184.97103881835938,"altitude":84.89794921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550320.629143,"delta_ms":0},{"type":"getStatus","timestamp":1585550322.304,"event_timestamp":1585550320.806366,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550322.304,"speed":4.637919902801514,"bearing":170.98837280273438,"altitude":84.89794921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.675,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550321.249,"bearing":170.98837280273438}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6308689,"lon":139.6566153,"time":1585550321.632,"speed":4.4008469581604,"bearing":182.99981689453126,"altitude":83.9564208984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550321.633199,"delta_ms":0},{"type":"getStatus","timestamp":1585550323.358,"event_timestamp":1585550321.865266,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550323.358,"speed":4.510940074920654,"bearing":170.98837280273438,"altitude":83.9564208984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.726,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550322.304,"bearing":170.98837280273438}]},"delta_ms":7},{"type":"updateLocation","location":{"lat":35.6308213,"lon":139.6566102,"time":1585550322.625,"speed":4.944247722625732,"bearing":183.00335693359376,"altitude":83.44537353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550322.625306,"delta_ms":0},{"type":"getStatus","timestamp":1585550324.426,"event_timestamp":1585550322.927719,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550324.426,"speed":4.818698883056641,"bearing":170.98837280273438,"altitude":83.44537353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.801,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550323.358,"bearing":170.98837280273438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6307768,"lon":139.6566038,"time":1585550323.636,"speed":5.666394233703613,"bearing":183.01156616210938,"altitude":83.07196044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550323.636403,"delta_ms":0},{"type":"getStatus","timestamp":1585550325.458,"event_timestamp":1585550323.961198,"result":{"route_state":"tracking","location":{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550325.458,"speed":5.384279727935791,"bearing":170.98837280273438,"altitude":83.07196044921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"","in_tunnel":false,"predicted":1.822,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6309814453125,"lon":139.65655517578126,"time":1585550324.426,"bearing":170.98837280273438}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6307168,"lon":139.6565972,"time":1585550324.626,"speed":6.3883891105651859,"bearing":184.0191192626953,"altitude":83.11090087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550324.626545,"delta_ms":0},{"type":"getStatus","timestamp":1585550326.519,"event_timestamp":1585550325.024055,"result":{"route_state":"tracking","location":{"lat":35.63062286376953,"lon":139.6565399169922,"time":1585550326.519,"speed":6.103933811187744,"bearing":187.71461486816407,"altitude":83.11090087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6306529,"lon":139.6565892,"time":1585550325.634,"speed":6.390932559967041,"bearing":183.9994354248047,"altitude":82.93939208984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550325.634272,"delta_ms":0},{"type":"getStatus","timestamp":1585550327.574,"event_timestamp":1585550326.080963,"result":{"route_state":"tracking","location":{"lat":35.63054656982422,"lon":139.6565399169922,"time":1585550327.574,"speed":6.414627552032471,"bearing":183.81546020507813,"altitude":82.93939208984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6305912,"lon":139.6565823,"time":1585550326.623,"speed":5.988275527954102,"bearing":183.99462890625,"altitude":82.93017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550326.623692,"delta_ms":0},{"type":"getStatus","timestamp":1585550328.608,"event_timestamp":1585550327.10896,"result":{"route_state":"tracking","location":{"lat":35.6304931640625,"lon":139.65652465820313,"time":1585550328.608,"speed":6.280195713043213,"bearing":183.81546020507813,"altitude":82.93017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6305354,"lon":139.6565773,"time":1585550327.625,"speed":5.711903095245361,"bearing":183.99876403808595,"altitude":82.64202880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550327.625183,"delta_ms":0},{"type":"getStatus","timestamp":1585550329.647,"event_timestamp":1585550328.147646,"result":{"route_state":"offRoute","location":{"lat":35.630428314208987,"lon":139.65652465820313,"time":1585550329.647,"speed":6.03706693649292,"bearing":183.81546020507813,"altitude":82.64202880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3829.990234375,"remaining_leg_duration":551.922999999,"step_index":2,"remaining_step_distance":3356.841552734375,"remaining_step_duration":410.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":21,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550328.203679,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6304836,"lon":139.6565711,"time":1585550328.648,"speed":5.650189399719238,"bearing":183.99989318847657,"altitude":82.3795166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550328.648722,"delta_ms":0},{"type":"getStatus","timestamp":1585550330.714,"event_timestamp":1585550329.21498,"result":{"route_state":"invalid","location":{"lat":35.630374908447269,"lon":139.65652465820313,"time":1585550330.714,"speed":5.834438800811768,"bearing":183.81546020507813,"altitude":82.3795166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4021.944,\"duration\":589.406,\"geometry\":\"wtu}bAws}jiGpb@zAn]xB{AvWe@fOOrFd@vCt@vCpCxBsGlK{EdOkBtE_IlJsUvCgTxBfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":589.406,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4021.944,\"duration\":589.406,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":118.417,\"duration\":21.277,\"geometry\":\"wtu}bAws}jiGpb@zAn]xB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656525,35.630428],\"bearing_before\":0.0,\"bearing_after\":184.0,\"instruction\":\"南方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":118.417,\"announcement\":\"南方向です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e南方向です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":83.5,\"announcement\":\"右折です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":118.417,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":83.5,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":21.277,\"intersections\":[{\"location\":[139.656525,35.630428],\"bearings\":[184],\"entry\":[true],\"out\":0},{\"location\":[139.656479,35.62986],\"bearings\":[4,186,282],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":96.0,\"duration\":28.952,\"geometry\":\"urs}bAam}jiG{AvWe@fOOrFd@vCt@vCpCxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656418,35.629372],\"bearing_before\":186.0,\"bearing_after\":278.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":49.7,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":96.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":28.952,\"intersections\":[{\"location\":[139.656418,35.629372],\"bearings\":[6,184,278],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.65564,35.629444],\"bearings\":[10,95,248],\"entry\":[true,false,true],\"in\":1,\"out\":2}]},{\"distance\":165.0,\"duration\":74.55,\"geometry\":\"yos}bAco{jiGsGlK{EdOkBtE_IlJsUvCgTxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655426,35.629326],\"bearing_before\":223.0,\"bearing_after\":310.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":145.0,\"announcement\":\"100 メートル先、左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e100 メートル先、左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":33.2,\"announcement\":\"左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":165.0,\"primary\":{\"text\":\"国道246号線\",\"components\":[{\"text\":\"国道246号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":74.55,\"intersections\":[{\"location\":[139.655426,35.629326],\"bearings\":[43,134,220,310],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.655228,35.629463],\"bearings\":[17,130,208,296],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.654678,35.629787],\"bearings\":[139,170,350],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.654602,35.63015],\"bearings\":[93,170,352],\"entry\":[true,false,true],\"in\":1,\"out\":2}]},{\"distance\":3168.0,\"duration\":322.647,\"geometry\":\"qxu}bAywyjiGfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.654541,35.630489],\"bearing_before\":352.0,\"bearing_after\":253.0,\"instruction\":\"左方向です。その先、国道246号線です\",\"type\":\"end of road\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3148.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":687.3,\"announcement\":\"700 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":147.3,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3168.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":147.3,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":322.647,\"intersections\":[{\"location\":[139.654541,35.630489],\"bearings\":[77,172,253],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.654205,35.630405],\"bearings\":[73,254],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.653809,35.630314],\"bearings\":[74,175,248,282,283],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"slight right\"]}]},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":71.184,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.4,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.4,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":71.184,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.813,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.4,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.4,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.813,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.2,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.2,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[63.4,54.6,36.3,23.6,11.1,7.2,7.5,9.8,23.6,26.5,11.3,24.3,40.9,38.2,31.8,37.3,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[10.376,9.834,4.351,2.828,1.329,2.364,2.459,3.2,2.829,3.181,1.362,2.921,4.911,4.583,1.567,1.84,2.269,2.768,1.675,3.412,0.292,4.148,0.356,0.909,4.214,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.065,7.668,4.37,7.049,12.214,8.313,8.68,4.419,0.959,0.23,2.046,5.986,0.371,4.311,2.755,3.214,10.637,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.811,3.574,27.3,5.701,1.341,1.468,2.519,2.982,1.673,32.111,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.307,6.001,19.308,11.535,15.172,7.748,8.877,1.205,1.415,11.625,3.331,0.594,0.425,6.233,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6565247,35.6304283;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"183.81546,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"o6OmdlBjk29YGRUb4SRiw43Ur6NLFfkAYHzNaKMTfJQt1CzQ-gYDQw\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550329.394364,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4018.01171875,"remaining_leg_duration":589.406,"step_index":0,"remaining_step_distance":118.04380798339844,"remaining_step_duration":21.277,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":29},{"type":"updateLocation","location":{"lat":35.6304311,"lon":139.6565651,"time":1585550329.619,"speed":6.1588053703308109,"bearing":184.0135498046875,"altitude":82.4927978515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550329.619525,"delta_ms":0},{"type":"getStatus","timestamp":1585550331.754,"event_timestamp":1585550330.255221,"result":{"route_state":"tracking","location":{"lat":35.63032150268555,"lon":139.65652465820313,"time":1585550331.754,"speed":6.008595943450928,"bearing":183.74525451660157,"altitude":82.4927978515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4006.12158203125,"remaining_leg_duration":587.406,"step_index":0,"remaining_step_distance":106.15367889404297,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":2.135,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"南方向です その先 右折です","announcement":"南方向です その先 右折です","remaining_step_distance":118.04380798339844,"index":0},"banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":118.04380798339844,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.630372,"lon":139.6565594,"time":1585550330.672,"speed":6.8694562911987309,"bearing":183.0005340576172,"altitude":82.75286865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550330.672639,"delta_ms":0},{"type":"getStatus","timestamp":1585550332.873,"event_timestamp":1585550331.374252,"result":{"route_state":"tracking","location":{"lat":35.6302375793457,"lon":139.65650939941407,"time":1585550332.873,"speed":6.570122241973877,"bearing":183.74525451660157,"altitude":82.75286865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3996.734619140625,"remaining_leg_duration":585.406,"step_index":0,"remaining_step_distance":96.76670837402344,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":2.201,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.6302375793457,"lon":139.65650939941407,"time":1585550332.873,"bearing":183.74525451660157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6303089,"lon":139.6565536,"time":1585550331.64,"speed":7.379591464996338,"bearing":183.99960327148438,"altitude":81.37432861328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550331.641103,"delta_ms":0},{"type":"getStatus","timestamp":1585550333.915,"event_timestamp":1585550332.416445,"result":{"route_state":"tracking","location":{"lat":35.63017272949219,"lon":139.65650939941407,"time":1585550333.915,"speed":7.080333709716797,"bearing":183.74525451660157,"altitude":81.37432861328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3989.526611328125,"remaining_leg_duration":584.406,"step_index":0,"remaining_step_distance":89.55878448486328,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.275,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.63017272949219,"lon":139.65650939941407,"time":1585550333.915,"bearing":183.74525451660157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6302389,"lon":139.6565447,"time":1585550332.617,"speed":7.899056434631348,"bearing":184.00033569335938,"altitude":81.8363037109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550332.617424,"delta_ms":0},{"type":"getStatus","timestamp":1585550334.95,"event_timestamp":1585550333.451345,"result":{"route_state":"tracking","location":{"lat":35.630088806152347,"lon":139.656494140625,"time":1585550334.95,"speed":7.707535266876221,"bearing":183.74525451660157,"altitude":81.8363037109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3980.116943359375,"remaining_leg_duration":582.406,"step_index":0,"remaining_step_distance":80.14909362792969,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":2.333,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"右折です その先 右折です","announcement":"右折です その先 右折です","remaining_step_distance":83.5,"index":1},"banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":83.5,"index":1,"sub":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]}},"key_points":[{"lat":35.630088806152347,"lon":139.656494140625,"time":1585550334.95,"bearing":183.74525451660157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.630164,"lon":139.656536,"time":1585550333.625,"speed":8.205076217651368,"bearing":184.00717163085938,"altitude":81.88812255859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550333.625788,"delta_ms":0},{"type":"getStatus","timestamp":1585550336.001,"event_timestamp":1585550334.501887,"result":{"route_state":"tracking","location":{"lat":35.630001068115237,"lon":139.65647888183595,"time":1585550336.001,"speed":8.063331604003907,"bearing":183.74525451660157,"altitude":81.88812255859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3970.270751953125,"remaining_leg_duration":580.406,"step_index":0,"remaining_step_distance":70.30282592773438,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.376,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.630001068115237,"lon":139.65647888183595,"time":1585550336.001,"bearing":183.74525451660157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6300887,"lon":139.6565263,"time":1585550334.618,"speed":7.990211486816406,"bearing":184.99940490722657,"altitude":80.46142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550334.618238,"delta_ms":0},{"type":"getStatus","timestamp":1585550337.033,"event_timestamp":1585550335.534481,"result":{"route_state":"tracking","location":{"lat":35.62991714477539,"lon":139.65647888183595,"time":1585550337.033,"speed":8.109548568725586,"bearing":183.74525451660157,"altitude":80.46142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3960.957763671875,"remaining_leg_duration":579.406,"step_index":0,"remaining_step_distance":60.98994827270508,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.415,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62991714477539,"lon":139.65647888183595,"time":1585550337.033,"bearing":183.74525451660157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6300177,"lon":139.6565163,"time":1585550335.621,"speed":7.352540016174316,"bearing":183.9832305908203,"altitude":80.189697265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550335.621198,"delta_ms":0},{"type":"getStatus","timestamp":1585550338.069,"event_timestamp":1585550336.570406,"result":{"route_state":"tracking","location":{"lat":35.629852294921878,"lon":139.65647888183595,"time":1585550338.069,"speed":7.705104351043701,"bearing":185.80136108398438,"altitude":80.189697265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3953.753173828125,"remaining_leg_duration":577.406,"step_index":0,"remaining_step_distance":53.78525924682617,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":2.448,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629859924316409,"lon":139.65647888183595,"time":1585550337.947,"bearing":183.74525451660157},{"lat":35.629852294921878,"lon":139.65647888183595,"time":1585550338.069,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6299552,"lon":139.6565093,"time":1585550336.626,"speed":6.061439514160156,"bearing":182.9950408935547,"altitude":80.06781005859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550336.626225,"delta_ms":0},{"type":"getStatus","timestamp":1585550339.117,"event_timestamp":1585550337.618169,"result":{"route_state":"tracking","location":{"lat":35.62980651855469,"lon":139.65646362304688,"time":1585550339.117,"speed":6.687773704528809,"bearing":185.80136108398438,"altitude":80.06781005859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3948.4990234375,"remaining_leg_duration":576.406,"step_index":0,"remaining_step_distance":48.531158447265628,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":2.491,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62980651855469,"lon":139.65646362304688,"time":1585550339.117,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6299033,"lon":139.6565056,"time":1585550337.691,"speed":5.0508036613464359,"bearing":182.9997100830078,"altitude":80.24688720703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550337.691925,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.629862,"lon":139.6565022,"time":1585550338.65,"speed":3.9508845806121828,"bearing":183.9990692138672,"altitude":79.7872314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550338.650492,"delta_ms":0},{"type":"getStatus","timestamp":1585550340.182,"event_timestamp":1585550338.68325,"result":{"route_state":"tracking","location":{"lat":35.62980270385742,"lon":139.65646362304688,"time":1585550340.182,"speed":4.499177932739258,"bearing":185.80136108398438,"altitude":79.7872314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3948.08544921875,"remaining_leg_duration":576.406,"step_index":0,"remaining_step_distance":48.11751174926758,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.532,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62980270385742,"lon":139.65646362304688,"time":1585550340.182,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6298331,"lon":139.6564987,"time":1585550339.635,"speed":3.430415391921997,"bearing":182.99998474121095,"altitude":79.53521728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550339.636025,"delta_ms":0},{"type":"getStatus","timestamp":1585550341.227,"event_timestamp":1585550339.727853,"result":{"route_state":"tracking","location":{"lat":35.6297721862793,"lon":139.65646362304688,"time":1585550341.227,"speed":3.74849009513855,"bearing":185.80136108398438,"altitude":79.53521728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3944.739013671875,"remaining_leg_duration":576.406,"step_index":0,"remaining_step_distance":44.77109909057617,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.592,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.6297721862793,"lon":139.65646362304688,"time":1585550341.227,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6298034,"lon":139.6564967,"time":1585550340.637,"speed":2.830310344696045,"bearing":182.99972534179688,"altitude":79.4111328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550340.638066,"delta_ms":0},{"type":"getStatus","timestamp":1585550342.261,"event_timestamp":1585550340.762432,"result":{"route_state":"tracking","location":{"lat":35.62975311279297,"lon":139.65646362304688,"time":1585550342.261,"speed":3.099006175994873,"bearing":185.80136108398438,"altitude":79.4111328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3942.632568359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":42.66457748413086,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.624,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62975311279297,"lon":139.65646362304688,"time":1585550342.261,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6297804,"lon":139.6564952,"time":1585550341.628,"speed":1.9192290306091309,"bearing":182.98582458496095,"altitude":79.4244384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550341.629034,"delta_ms":0},{"type":"getStatus","timestamp":1585550343.302,"event_timestamp":1585550341.802524,"result":{"route_state":"tracking","location":{"lat":35.62974548339844,"lon":139.65646362304688,"time":1585550343.302,"speed":2.320629358291626,"bearing":185.80136108398438,"altitude":79.4244384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3941.7890625,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":41.82122802734375,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.674,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62974548339844,"lon":139.65646362304688,"time":1585550343.302,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6297651,"lon":139.6564944,"time":1585550342.643,"speed":1.140745997428894,"bearing":182.998291015625,"altitude":79.39056396484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550342.643937,"delta_ms":0},{"type":"getStatus","timestamp":1585550344.344,"event_timestamp":1585550342.845158,"result":{"route_state":"tracking","location":{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550344.344,"speed":1.5269051790237427,"bearing":185.80136108398438,"altitude":79.39056396484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.9443359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.976383209228519,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.701,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550344.344,"bearing":185.80136108398438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6297563,"lon":139.6564943,"time":1585550343.621,"speed":0.7403213381767273,"bearing":182.99871826171876,"altitude":79.1822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550343.621964,"delta_ms":0},{"type":"getStatus","timestamp":1585550345.383,"event_timestamp":1585550343.884057,"result":{"route_state":"tracking","location":{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550345.383,"speed":0.9700590372085571,"bearing":185.80136108398438,"altitude":79.1822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.9443359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.976383209228519,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.762,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550344.344,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6297508,"lon":139.6564947,"time":1585550344.619,"speed":0.44201019406318667,"bearing":182.98638916015626,"altitude":78.9945068359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550344.619813,"delta_ms":0},{"type":"getStatus","timestamp":1585550346.421,"event_timestamp":1585550344.921772,"result":{"route_state":"tracking","location":{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550346.421,"speed":0.9700590372085571,"bearing":185.80136108398438,"altitude":79.1822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.9443359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.976383209228519,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.802,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550345.383,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6297481,"lon":139.6564956,"time":1585550345.627,"speed":0.16022399067878724,"bearing":182.99581909179688,"altitude":78.88055419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550345.627778,"delta_ms":0},{"type":"getStatus","timestamp":1585550347.467,"event_timestamp":1585550345.969134,"result":{"route_state":"tracking","location":{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550347.467,"speed":0.9700590372085571,"bearing":185.80136108398438,"altitude":79.1822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.9443359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.976383209228519,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.84,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550346.421,"bearing":185.80136108398438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6297468,"lon":139.6564951,"time":1585550346.629,"speed":0.1500067412853241,"bearing":183.99981689453126,"altitude":79.3123779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550346.629508,"delta_ms":0},{"type":"getStatus","timestamp":1585550348.556,"event_timestamp":1585550347.057258,"result":{"route_state":"tracking","location":{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550348.556,"speed":0.9700590372085571,"bearing":185.80136108398438,"altitude":79.1822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.9443359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.976383209228519,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.927,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550347.467,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6297451,"lon":139.656495,"time":1585550347.621,"speed":0.3997074365615845,"bearing":184.00289916992188,"altitude":79.22381591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550347.621541,"delta_ms":0},{"type":"getStatus","timestamp":1585550349.613,"event_timestamp":1585550348.114569,"result":{"route_state":"tracking","location":{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550349.613,"speed":0.9700590372085571,"bearing":185.80136108398438,"altitude":79.1822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.9443359375,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.976383209228519,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.992,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629737854003909,"lon":139.65646362304688,"time":1585550348.556,"bearing":185.80136108398438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6297407,"lon":139.6564945,"time":1585550348.624,"speed":0.7596436738967896,"bearing":184.00164794921876,"altitude":79.30230712890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550348.625162,"delta_ms":0},{"type":"getStatus","timestamp":1585550350.694,"event_timestamp":1585550349.195541,"result":{"route_state":"tracking","location":{"lat":35.62973403930664,"lon":139.65646362304688,"time":1585550350.694,"speed":0.5791949033737183,"bearing":185.80136108398438,"altitude":79.30230712890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3940.521728515625,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":40.5537223815918,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.07,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62973403930664,"lon":139.65646362304688,"time":1585550350.694,"bearing":185.80136108398438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6297322,"lon":139.656494,"time":1585550349.612,"speed":1.079659104347229,"bearing":184.00108337402345,"altitude":79.36029052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550349.613103,"delta_ms":0},{"type":"getStatus","timestamp":1585550351.772,"event_timestamp":1585550350.273707,"result":{"route_state":"tracking","location":{"lat":35.62971878051758,"lon":139.65646362304688,"time":1585550351.772,"speed":0.8975367546081543,"bearing":185.80136108398438,"altitude":79.36029052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3938.83056640625,"remaining_leg_duration":575.406,"step_index":0,"remaining_step_distance":38.862667083740237,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.16,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62971878051758,"lon":139.65646362304688,"time":1585550351.772,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6297199,"lon":139.6564932,"time":1585550350.637,"speed":1.780027985572815,"bearing":184.0220489501953,"altitude":79.220458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550350.637392,"delta_ms":0},{"type":"getStatus","timestamp":1585550352.81,"event_timestamp":1585550351.31122,"result":{"route_state":"tracking","location":{"lat":35.62969207763672,"lon":139.65646362304688,"time":1585550352.81,"speed":1.4892653226852418,"bearing":185.80136108398438,"altitude":79.220458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3935.86767578125,"remaining_leg_duration":574.406,"step_index":0,"remaining_step_distance":35.89977264404297,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.173,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62969207763672,"lon":139.65646362304688,"time":1585550352.81,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6296997,"lon":139.6564915,"time":1585550351.626,"speed":2.8325774669647219,"bearing":184.05230712890626,"altitude":79.32635498046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550351.62664,"delta_ms":0},{"type":"getStatus","timestamp":1585550353.854,"event_timestamp":1585550352.3558,"result":{"route_state":"tracking","location":{"lat":35.629661560058597,"lon":139.65646362304688,"time":1585550353.854,"speed":2.336009979248047,"bearing":185.80136108398438,"altitude":79.32635498046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3932.478271484375,"remaining_leg_duration":574.406,"step_index":0,"remaining_step_distance":32.51034927368164,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.228,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629661560058597,"lon":139.65646362304688,"time":1585550353.854,"bearing":185.80136108398438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6296686,"lon":139.6564892,"time":1585550352.641,"speed":3.9181506633758547,"bearing":185.0016326904297,"altitude":79.38623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550352.641363,"delta_ms":0},{"type":"getStatus","timestamp":1585550354.895,"event_timestamp":1585550353.396504,"result":{"route_state":"tracking","location":{"lat":35.629608154296878,"lon":139.6564483642578,"time":1585550354.895,"speed":3.399925470352173,"bearing":185.80136108398438,"altitude":79.38623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3926.4404296875,"remaining_leg_duration":572.406,"step_index":0,"remaining_step_distance":26.472585678100587,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.254,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629608154296878,"lon":139.6564483642578,"time":1585550354.895,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6296279,"lon":139.6564851,"time":1585550353.627,"speed":4.830967426300049,"bearing":185.0191650390625,"altitude":79.2025146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550353.6272,"delta_ms":0},{"type":"getStatus","timestamp":1585550355.967,"event_timestamp":1585550354.4684,"result":{"route_state":"tracking","location":{"lat":35.629547119140628,"lon":139.65643310546876,"time":1585550355.967,"speed":4.402412414550781,"bearing":185.80136108398438,"altitude":79.2025146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3919.5361328125,"remaining_leg_duration":571.406,"step_index":0,"remaining_step_distance":19.56832504272461,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.34,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629547119140628,"lon":139.65643310546876,"time":1585550355.967,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6295793,"lon":139.6564795,"time":1585550354.628,"speed":5.661118984222412,"bearing":185.0249481201172,"altitude":78.93743896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550354.628742,"delta_ms":0},{"type":"getStatus","timestamp":1585550357.006,"event_timestamp":1585550355.510804,"result":{"route_state":"tracking","location":{"lat":35.62947463989258,"lon":139.65643310546876,"time":1585550357.006,"speed":5.317575454711914,"bearing":185.80136108398438,"altitude":78.93743896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3911.513916015625,"remaining_leg_duration":570.406,"step_index":0,"remaining_step_distance":11.545982360839844,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.378,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62947463989258,"lon":139.65643310546876,"time":1585550357.006,"bearing":185.80136108398438}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6295235,"lon":139.6564726,"time":1585550355.625,"speed":6.511550426483154,"bearing":186.00680541992188,"altitude":78.8424072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550355.625799,"delta_ms":0},{"type":"getStatus","timestamp":1585550358.045,"event_timestamp":1585550356.546325,"result":{"route_state":"tracking","location":{"lat":35.629398345947269,"lon":139.6564178466797,"time":1585550358.045,"speed":6.151936054229736,"bearing":185.80136108398438,"altitude":78.8424072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3902.924560546875,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":2.9565277099609377,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":2.42,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629398345947269,"lon":139.6564178466797,"time":1585550358.045,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6294596,"lon":139.6564656,"time":1585550356.621,"speed":7.3793158531188969,"bearing":186.00010681152345,"altitude":78.61712646484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550356.621467,"delta_ms":0},{"type":"getStatus","timestamp":1585550359.081,"event_timestamp":1585550357.582012,"result":{"route_state":"tracking","location":{"lat":35.629371643066409,"lon":139.6564178466797,"time":1585550359.081,"speed":7.0176920890808109,"bearing":185.80136108398438,"altitude":78.61712646484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.46,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629371643066409,"lon":139.6564178466797,"time":1585550359.081,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6293888,"lon":139.656456,"time":1585550357.646,"speed":8.01962661743164,"bearing":186.99935913085938,"altitude":78.63629150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550357.647223,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6293149,"lon":139.6564435,"time":1585550358.618,"speed":8.010062217712403,"bearing":186.9999542236328,"altitude":78.5948486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550358.618793,"delta_ms":0},{"type":"getStatus","timestamp":1585550360.138,"event_timestamp":1585550358.639289,"result":{"route_state":"tracking","location":{"lat":35.629371643066409,"lon":139.6564178466797,"time":1585550360.138,"speed":8.039586067199707,"bearing":185.80136108398438,"altitude":78.5948486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.52,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629371643066409,"lon":139.6564178466797,"time":1585550359.081,"bearing":185.80136108398438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6292412,"lon":139.65643,"time":1585550359.618,"speed":8.26708698272705,"bearing":189.00108337402345,"altitude":78.48382568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550359.620712,"delta_ms":1},{"type":"getStatus","timestamp":1585550361.168,"event_timestamp":1585550359.670467,"result":{"route_state":"tracking","location":{"lat":35.629371643066409,"lon":139.6564178466797,"time":1585550361.168,"speed":8.22359848022461,"bearing":185.80136108398438,"altitude":78.48382568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.55,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.629371643066409,"lon":139.6564178466797,"time":1585550360.138,"bearing":185.80136108398438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6291661,"lon":139.6564125,"time":1585550360.624,"speed":8.668716430664063,"bearing":190.0004425048828,"altitude":78.332763671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550360.62469,"delta_ms":0},{"type":"getStatus","timestamp":1585550362.224,"event_timestamp":1585550360.727176,"result":{"route_state":"tracking","location":{"lat":35.62905502319336,"lon":139.6563720703125,"time":1585550362.224,"speed":8.553642272949219,"bearing":189.71023559570313,"altitude":78.332763671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6290872,"lon":139.656392,"time":1585550361.64,"speed":9.233307838439942,"bearing":191.00616455078126,"altitude":78.31097412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550361.641042,"delta_ms":0},{"type":"getStatus","timestamp":1585550363.278,"event_timestamp":1585550361.778651,"result":{"route_state":"tracking","location":{"lat":35.628963470458987,"lon":139.65635681152345,"time":1585550363.278,"speed":9.042787551879883,"bearing":188.4065399169922,"altitude":78.31097412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6290037,"lon":139.6563683,"time":1585550362.626,"speed":9.79016399383545,"bearing":192.0205078125,"altitude":78.05908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550362.626559,"delta_ms":0},{"type":"getStatus","timestamp":1585550364.31,"event_timestamp":1585550362.811832,"result":{"route_state":"tracking","location":{"lat":35.62886428833008,"lon":139.6563262939453,"time":1585550364.31,"speed":9.514263153076172,"bearing":188.4065399169922,"altitude":78.05908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.628915,"lon":139.6563419,"time":1585550363.628,"speed":10.514142990112305,"bearing":193.03782653808595,"altitude":77.763916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550363.629014,"delta_ms":0},{"type":"getStatus","timestamp":1585550365.36,"event_timestamp":1585550363.862656,"result":{"route_state":"offRoute","location":{"lat":35.62875747680664,"lon":139.65631103515626,"time":1585550365.36,"speed":10.194000244140625,"bearing":188.4065399169922,"altitude":77.763916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3899.968017578125,"remaining_leg_duration":568.406,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":2},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550363.908039,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6288206,"lon":139.6563142,"time":1585550364.629,"speed":10.59670352935791,"bearing":191.00709533691407,"altitude":77.36822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550364.6298,"delta_ms":0},{"type":"getStatus","timestamp":1585550366.417,"event_timestamp":1585550364.917645,"result":{"route_state":"invalid","location":{"lat":35.628662109375,"lon":139.6562957763672,"time":1585550366.417,"speed":10.499857902526856,"bearing":188.4065399169922,"altitude":77.36822509765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4679.254,\"duration\":659.39,\"geometry\":\"ilr}bAmf}jiG|I|@fOzAhMzAb`@rEnNxBvNzAu@sdAyGqGsF?jAhjAoNyBc`@sEiM{AgO{AeYwCaH}@wC]iH]o]yBom@yBwD_@{P?xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":659.39,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4679.254,\"duration\":659.39,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":190.728,\"duration\":39.52,\"geometry\":\"ilr}bAmf}jiG|I|@fOzAhMzAb`@rEnNxBvNzA\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656311,35.628757],\"bearing_before\":0.0,\"bearing_after\":188.0,\"instruction\":\"南方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":190.728,\"announcement\":\"南方向です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e南方向です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":72.4,\"announcement\":\"左折です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":190.728,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":72.4,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":39.52,\"intersections\":[{\"location\":[139.656311,35.628757],\"bearings\":[188],\"entry\":[true],\"out\":0},{\"location\":[139.656281,35.628582],\"bearings\":[8,188,320],\"entry\":[false,true,false],\"in\":0,\"out\":1},{\"location\":[139.656235,35.628323],\"bearings\":[8,189,282],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.656189,35.628094],\"bearings\":[9,108,188,277],\"entry\":[false,false,true,false],\"in\":0,\"out\":2},{\"location\":[139.656021,35.627316],\"bearings\":[11,89,188],\"entry\":[false,true,true],\"in\":0,\"out\":2}]},{\"distance\":101.0,\"duration\":15.12,\"geometry\":\"mbo}bAmq|jiGu@sdA\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655975,35.627064],\"bearing_before\":188.0,\"bearing_after\":88.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":100.2,\"announcement\":\"左折です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":101.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":100.2,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":15.12,\"intersections\":[{\"location\":[139.655975,35.627064],\"bearings\":[8,88,189],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":143.0,\"duration\":20.16,\"geometry\":\"cdo}bAaw~jiGyGqGsF?jAhjA\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.657089,35.62709],\"bearing_before\":88.0,\"bearing_after\":39.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":106.4,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":143.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":20.16,\"intersections\":[{\"location\":[139.657089,35.62709],\"bearings\":[39,221,268],\"entry\":[true,true,false],\"in\":2,\"out\":0}]},{\"distance\":412.0,\"duration\":110.784,\"geometry\":\"ero}bAit|jiGoNyBc`@sEiM{AgO{AeYwCaH}@wC]iH]o]yBom@yBwD_@{P?\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656021,35.627316],\"bearing_before\":268.0,\"bearing_after\":11.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":392.0,\"announcement\":\"400 メートル先、駒沢を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e400 メートル先、駒沢を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":55.8,\"announcement\":\"駒沢を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e駒沢を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":412.0,\"primary\":{\"text\":\"駒沢\",\"components\":[{\"text\":\"駒沢\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":55.8,\"primary\":{\"text\":\"駒沢\",\"components\":[{\"text\":\"駒沢\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"slight left\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":110.784,\"intersections\":[{\"location\":[139.656021,35.627316],\"bearings\":[11,88,189],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656189,35.628094],\"bearings\":[9,108,188,277],\"entry\":[true,false,false,false],\"in\":2,\"out\":0},{\"location\":[139.656235,35.628323],\"bearings\":[8,189,282],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656281,35.628582],\"bearings\":[8,188,320],\"entry\":[true,false,false],\"in\":1,\"out\":0},{\"location\":[139.656357,35.629002],\"bearings\":[11,188,284],\"entry\":[true,false,false],\"in\":1,\"out\":0},{\"location\":[139.656403,35.629223],\"bearings\":[5,97,191],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.656418,35.629372],\"bearings\":[6,185,277],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656479,35.62986],\"bearings\":[4,186,282],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.65654,35.630604],\"bearings\":[8,184,275],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656555,35.630695],\"bearings\":[0,96,188],\"entry\":[true,true,false],\"in\":2,\"out\":0}]},{\"distance\":3358.001,\"duration\":331.826,\"geometry\":\"iwv}bAuu}jiGxGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656555,35.630981],\"bearing_before\":0.0,\"bearing_after\":254.0,\"instruction\":\"駒沢を左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3338.001,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":708.4,\"announcement\":\"700 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":151.8,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3358.001,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":151.8,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":331.826,\"intersections\":[{\"location\":[139.656555,35.630981],\"bearings\":[0,75,180,254,351],\"entry\":[true,false,false,true,true],\"in\":2,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"slight left\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.65596,35.63084],\"bearings\":[74,163,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.655441,35.630711],\"bearings\":[73,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654648,35.630508],\"bearings\":[73,258],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654541,35.630489],\"bearings\":[78,172,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.654205,35.630405],\"bearings\":[73,254],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.653809,35.630314],\"bearings\":[74,175,248,282,283],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"slight right\"]}]},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":71.184,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.4,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.4,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":71.184,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.813,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.4,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.4,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.813,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.2,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.2,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[19.7,29.2,25.8,59.8,28.1,28.3,100.8,20.0,13.6,109.2,28.1,59.8,25.8,29.2,47.2,16.4,8.6,16.6,54.6,83.0,10.3,31.8,56.1,49.1,75.2,9.9,31.8,37.3,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[3.551,5.527,7.744,8.282,3.898,4.25,12.1,2.404,1.631,13.099,7.795,16.563,7.744,5.527,9.444,5.358,2.816,1.496,8.94,14.227,0.926,2.866,2.766,2.422,3.71,0.488,1.567,1.84,2.269,2.768,1.675,3.412,0.292,4.148,0.356,0.909,4.214,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.065,7.668,4.37,7.049,12.214,8.313,8.68,4.419,0.959,0.23,2.046,5.986,0.371,4.311,2.755,3.214,10.637,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.902,3.66,28.437,5.938,1.396,1.529,2.624,3.106,1.742,33.449,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.307,6.001,19.308,11.535,15.172,7.748,8.877,1.205,1.415,11.625,3.331,0.535,0.382,5.61,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.656311,35.6287575;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"188.40654,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"hLBZcy1xYjpWbOGw3s8DCOYs4Wbu_VMvjctY1ZvdvYxaZTqNKYXWhA\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550365.127339,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4676.12548828125,"remaining_leg_duration":659.39,"step_index":0,"remaining_step_distance":191.00669860839845,"remaining_step_duration":39.52,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":15},{"type":"updateLocation","location":{"lat":35.628726,"lon":139.6562905,"time":1585550365.621,"speed":10.659863471984864,"bearing":190.0008544921875,"altitude":77.21759033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550365.621494,"delta_ms":0},{"type":"getStatus","timestamp":1585550367.46,"event_timestamp":1585550365.961287,"result":{"route_state":"tracking","location":{"lat":35.62855911254883,"lon":139.65626525878907,"time":1585550367.46,"speed":10.653515815734864,"bearing":188.16268920898438,"altitude":77.21759033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4653.4990234375,"remaining_leg_duration":654.39,"step_index":0,"remaining_step_distance":168.38027954101563,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.839,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"南方向です その先 左折です","announcement":"南方向です その先 左折です","remaining_step_distance":190.72799682617188,"index":0},"banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":190.72799682617188,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6286304,"lon":139.656268,"time":1585550366.625,"speed":10.738941192626954,"bearing":190.99935913085938,"altitude":77.07928466796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550366.625749,"delta_ms":0},{"type":"getStatus","timestamp":1585550368.499,"event_timestamp":1585550367.000084,"result":{"route_state":"tracking","location":{"lat":35.62845230102539,"lon":139.65625,"time":1585550368.499,"speed":10.763681411743164,"bearing":188.16268920898438,"altitude":77.07928466796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4641.69775390625,"remaining_leg_duration":652.39,"step_index":0,"remaining_step_distance":156.5787811279297,"remaining_step_duration":32.0,"state_message":"","in_tunnel":false,"predicted":1.874,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62845230102539,"lon":139.65625,"time":1585550368.499,"bearing":188.16268920898438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6285357,"lon":139.6562441,"time":1585550367.622,"speed":10.48600959777832,"bearing":190.99407958984376,"altitude":77.08526611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550367.622216,"delta_ms":0},{"type":"getStatus","timestamp":1585550369.537,"event_timestamp":1585550368.03869,"result":{"route_state":"tracking","location":{"lat":35.628353118896487,"lon":139.65623474121095,"time":1585550369.537,"speed":10.633896827697754,"bearing":188.16268920898438,"altitude":77.08526611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4630.583984375,"remaining_leg_duration":650.39,"step_index":0,"remaining_step_distance":145.4650115966797,"remaining_step_duration":30.0,"state_message":"","in_tunnel":false,"predicted":1.915,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.628353118896487,"lon":139.65623474121095,"time":1585550369.537,"bearing":188.16268920898438}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.628444,"lon":139.6562207,"time":1585550368.63,"speed":10.110451698303223,"bearing":191.9736328125,"altitude":77.0367431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550368.630315,"delta_ms":0},{"type":"getStatus","timestamp":1585550370.57,"event_timestamp":1585550369.072068,"result":{"route_state":"tracking","location":{"lat":35.62826156616211,"lon":139.65621948242188,"time":1585550370.57,"speed":10.307944297790528,"bearing":189.2333984375,"altitude":77.0367431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4620.29296875,"remaining_leg_duration":647.39,"step_index":0,"remaining_step_distance":135.17396545410157,"remaining_step_duration":28.0,"state_message":"","in_tunnel":false,"predicted":1.94,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62832260131836,"lon":139.65623474121095,"time":1585550369.876,"bearing":188.16268920898438},{"lat":35.62826156616211,"lon":139.65621948242188,"time":1585550370.57,"bearing":189.2333984375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6283567,"lon":139.6561999,"time":1585550369.619,"speed":9.57114028930664,"bearing":190.98941040039063,"altitude":77.3236083984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550369.619911,"delta_ms":0},{"type":"getStatus","timestamp":1585550371.608,"event_timestamp":1585550370.110083,"result":{"route_state":"tracking","location":{"lat":35.628177642822269,"lon":139.6562042236328,"time":1585550371.608,"speed":9.84404468536377,"bearing":189.2333984375,"altitude":77.3236083984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4610.8544921875,"remaining_leg_duration":645.39,"step_index":0,"remaining_step_distance":125.73558044433594,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":1.989,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.628177642822269,"lon":139.6562042236328,"time":1585550371.608,"bearing":189.2333984375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6282747,"lon":139.6561828,"time":1585550370.627,"speed":9.030757904052735,"bearing":188.00112915039063,"altitude":77.03924560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550370.628069,"delta_ms":0},{"type":"getStatus","timestamp":1585550372.656,"event_timestamp":1585550371.15715,"result":{"route_state":"tracking","location":{"lat":35.62810134887695,"lon":139.65618896484376,"time":1585550372.656,"speed":9.321162223815918,"bearing":189.2333984375,"altitude":77.03924560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4602.25,"remaining_leg_duration":644.39,"step_index":0,"remaining_step_distance":117.1312026977539,"remaining_step_duration":24.0,"state_message":"","in_tunnel":false,"predicted":2.029,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62810134887695,"lon":139.65618896484376,"time":1585550372.656,"bearing":189.2333984375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6281958,"lon":139.6561714,"time":1585550371.623,"speed":8.910086631774903,"bearing":186.0008544921875,"altitude":77.24957275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550371.623345,"delta_ms":0},{"type":"getStatus","timestamp":1585550373.715,"event_timestamp":1585550372.220025,"result":{"route_state":"tracking","location":{"lat":35.62802505493164,"lon":139.6561737060547,"time":1585550373.715,"speed":9.018309593200684,"bearing":189.29873657226563,"altitude":77.24957275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4593.6455078125,"remaining_leg_duration":642.39,"step_index":0,"remaining_step_distance":108.52659606933594,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":2.092,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62809371948242,"lon":139.65618896484376,"time":1585550372.759,"bearing":189.2333984375},{"lat":35.62802505493164,"lon":139.6561737060547,"time":1585550373.715,"bearing":189.29873657226563}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6281145,"lon":139.6561632,"time":1585550372.615,"speed":9.039862632751465,"bearing":186.0000457763672,"altitude":78.404296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550372.615802,"delta_ms":0},{"type":"getStatus","timestamp":1585550374.756,"event_timestamp":1585550373.256938,"result":{"route_state":"tracking","location":{"lat":35.62793731689453,"lon":139.65615844726563,"time":1585550374.756,"speed":9.037935256958008,"bearing":189.29873657226563,"altitude":78.404296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4583.7841796875,"remaining_leg_duration":640.39,"step_index":0,"remaining_step_distance":98.6651611328125,"remaining_step_duration":20.0,"state_message":"","in_tunnel":false,"predicted":2.141,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62793731689453,"lon":139.65615844726563,"time":1585550374.756,"bearing":189.29873657226563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6280352,"lon":139.6561523,"time":1585550373.623,"speed":8.500605583190918,"bearing":187.99874877929688,"altitude":77.89276123046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550373.624086,"delta_ms":0},{"type":"getStatus","timestamp":1585550375.801,"event_timestamp":1585550374.303714,"result":{"route_state":"tracking","location":{"lat":35.627864837646487,"lon":139.65614318847657,"time":1585550375.801,"speed":8.659944534301758,"bearing":189.29873657226563,"altitude":77.89276123046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4575.5986328125,"remaining_leg_duration":638.39,"step_index":0,"remaining_step_distance":90.4798583984375,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":2.178,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.627864837646487,"lon":139.65614318847657,"time":1585550375.801,"bearing":189.29873657226563}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6279612,"lon":139.6561383,"time":1585550374.624,"speed":8.13023853302002,"bearing":187.99989318847657,"altitude":78.17938232421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550374.624756,"delta_ms":0},{"type":"getStatus","timestamp":1585550376.877,"event_timestamp":1585550375.377957,"result":{"route_state":"tracking","location":{"lat":35.62779235839844,"lon":139.6561279296875,"time":1585550376.877,"speed":8.303445816040039,"bearing":189.29873657226563,"altitude":78.17938232421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4567.4130859375,"remaining_leg_duration":637.39,"step_index":0,"remaining_step_distance":82.2943344116211,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":2.253,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62779235839844,"lon":139.6561279296875,"time":1585550376.877,"bearing":189.29873657226563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6278899,"lon":139.6561243,"time":1585550375.633,"speed":8.169906616210938,"bearing":188.0000762939453,"altitude":78.23626708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550375.633794,"delta_ms":0},{"type":"getStatus","timestamp":1585550377.923,"event_timestamp":1585550376.424316,"result":{"route_state":"tracking","location":{"lat":35.627716064453128,"lon":139.65611267089845,"time":1585550377.923,"speed":8.168583869934082,"bearing":189.29873657226563,"altitude":78.23626708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4558.80859375,"remaining_leg_duration":635.39,"step_index":0,"remaining_step_distance":73.68992614746094,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":2.29,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.627716064453128,"lon":139.65611267089845,"time":1585550377.923,"bearing":189.29873657226563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6278171,"lon":139.6561106,"time":1585550376.622,"speed":8.574047088623047,"bearing":188.0053253173828,"altitude":78.24395751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550376.623046,"delta_ms":0},{"type":"getStatus","timestamp":1585550378.957,"event_timestamp":1585550377.457941,"result":{"route_state":"tracking","location":{"lat":35.62763595581055,"lon":139.65609741210938,"time":1585550378.957,"speed":8.415709495544434,"bearing":189.29873657226563,"altitude":78.24395751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4549.78515625,"remaining_leg_duration":633.39,"step_index":0,"remaining_step_distance":64.66619873046875,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.335,"shape_index":3,"intersection_index":3,"road_name":"","voice_instruction":{"ssml_announcement":"左折です その先 左折です","announcement":"左折です その先 左折です","remaining_step_distance":72.4000015258789,"index":1},"banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":72.4000015258789,"index":1,"sub":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]}},"key_points":[{"lat":35.62763595581055,"lon":139.65609741210938,"time":1585550378.957,"bearing":189.29873657226563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6277399,"lon":139.6560963,"time":1585550377.617,"speed":9.15870189666748,"bearing":188.00091552734376,"altitude":78.32305908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550377.617592,"delta_ms":0},{"type":"getStatus","timestamp":1585550380.015,"event_timestamp":1585550378.516162,"result":{"route_state":"tracking","location":{"lat":35.62754821777344,"lon":139.6560821533203,"time":1585550380.015,"speed":8.872509956359864,"bearing":191.31431579589845,"altitude":78.32305908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4539.8994140625,"remaining_leg_duration":631.39,"step_index":0,"remaining_step_distance":54.78071975708008,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.398,"shape_index":4,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6275634765625,"lon":139.6560821533203,"time":1585550379.833,"bearing":189.29873657226563},{"lat":35.62754821777344,"lon":139.6560821533203,"time":1585550380.015,"bearing":191.31431579589845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6276566,"lon":139.6560808,"time":1585550378.625,"speed":9.335594177246094,"bearing":188.00364685058595,"altitude":78.49005126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550378.625773,"delta_ms":0},{"type":"getStatus","timestamp":1585550381.052,"event_timestamp":1585550379.553501,"result":{"route_state":"tracking","location":{"lat":35.62746047973633,"lon":139.65606689453126,"time":1585550381.052,"speed":9.190476417541504,"bearing":191.31431579589845,"altitude":78.49005126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4530.05126953125,"remaining_leg_duration":629.39,"step_index":0,"remaining_step_distance":44.932594299316409,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":2.427,"shape_index":4,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62746047973633,"lon":139.65606689453126,"time":1585550381.052,"bearing":191.31431579589845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6275727,"lon":139.6560662,"time":1585550379.624,"speed":9.47783374786377,"bearing":187.00222778320313,"altitude":78.5921630859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550379.624398,"delta_ms":0},{"type":"getStatus","timestamp":1585550382.09,"event_timestamp":1585550380.591532,"result":{"route_state":"tracking","location":{"lat":35.62736892700195,"lon":139.65603637695313,"time":1585550382.09,"speed":9.383064270019532,"bearing":191.31431579589845,"altitude":78.5921630859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4519.5498046875,"remaining_leg_duration":627.39,"step_index":0,"remaining_step_distance":34.4311408996582,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.466,"shape_index":4,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62736892700195,"lon":139.65603637695313,"time":1585550382.09,"bearing":191.31431579589845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6274874,"lon":139.656051,"time":1585550380.642,"speed":9.190644264221192,"bearing":186.99960327148438,"altitude":78.3428955078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550380.642348,"delta_ms":0},{"type":"getStatus","timestamp":1585550383.132,"event_timestamp":1585550381.632728,"result":{"route_state":"tracking","location":{"lat":35.627281188964847,"lon":139.65602111816407,"time":1585550383.132,"speed":9.297834396362305,"bearing":188.4066925048828,"altitude":78.3428955078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4509.62939453125,"remaining_leg_duration":625.39,"step_index":0,"remaining_step_distance":24.510801315307618,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.49,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.627315521240237,"lon":139.65602111816407,"time":1585550382.73,"bearing":191.31431579589845},{"lat":35.627281188964847,"lon":139.65602111816407,"time":1585550383.132,"bearing":188.4066925048828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6274056,"lon":139.6560362,"time":1585550381.677,"speed":9.219698905944825,"bearing":187.00021362304688,"altitude":78.385009765625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550381.677502,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6273239,"lon":139.6560219,"time":1585550382.629,"speed":9.092301368713379,"bearing":186.998291015625,"altitude":78.41131591796875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550382.629909,"delta_ms":0},{"type":"getStatus","timestamp":1585550384.165,"event_timestamp":1585550382.666867,"result":{"route_state":"tracking","location":{"lat":35.627201080322269,"lon":139.656005859375,"time":1585550384.165,"speed":9.160564422607422,"bearing":188.4066925048828,"altitude":78.41131591796875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4500.63671875,"remaining_leg_duration":623.39,"step_index":0,"remaining_step_distance":15.518033027648926,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":1.536,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.627201080322269,"lon":139.656005859375,"time":1585550384.165,"bearing":188.4066925048828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.627245,"lon":139.6560089,"time":1585550383.617,"speed":8.620698928833008,"bearing":186.9995880126953,"altitude":78.4290771484375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550383.618126,"delta_ms":0},{"type":"getStatus","timestamp":1585550385.206,"event_timestamp":1585550383.708469,"result":{"route_state":"tracking","location":{"lat":35.62712097167969,"lon":139.65597534179688,"time":1585550385.206,"speed":8.842474937438965,"bearing":188.4066925048828,"altitude":78.4290771484375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4491.40087890625,"remaining_leg_duration":621.39,"step_index":0,"remaining_step_distance":6.281904220581055,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.589,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.62712097167969,"lon":139.65597534179688,"time":1585550385.206,"bearing":188.4066925048828}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6271692,"lon":139.6559976,"time":1585550384.62,"speed":8.260729789733887,"bearing":186.99951171875,"altitude":79.1112060546875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550384.620539,"delta_ms":0},{"type":"getStatus","timestamp":1585550386.256,"event_timestamp":1585550384.757792,"result":{"route_state":"tracking","location":{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550386.256,"speed":8.475837707519532,"bearing":188.4066925048828,"altitude":79.1112060546875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.636,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550386.256,"bearing":188.4066925048828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6270966,"lon":139.6559872,"time":1585550385.632,"speed":7.8806281089782719,"bearing":186.99957275390626,"altitude":79.6441650390625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550385.632771,"delta_ms":0},{"type":"getStatus","timestamp":1585550387.301,"event_timestamp":1585550385.802461,"result":{"route_state":"tracking","location":{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550387.301,"speed":8.071105003356934,"bearing":188.4066925048828,"altitude":79.6441650390625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.669,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550386.256,"bearing":188.4066925048828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6270286,"lon":139.655976,"time":1585550386.626,"speed":7.3905768394470219,"bearing":187.9991912841797,"altitude":79.41900634765625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550386.62644,"delta_ms":0},{"type":"getStatus","timestamp":1585550388.377,"event_timestamp":1585550386.879017,"result":{"route_state":"tracking","location":{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550388.377,"speed":7.606689453125,"bearing":188.4066925048828,"altitude":79.41900634765625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.751,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550387.301,"bearing":188.4066925048828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.626965,"lon":139.6559644,"time":1585550387.627,"speed":6.930483341217041,"bearing":188.99920654296876,"altitude":80.04736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550387.627342,"delta_ms":0},{"type":"getStatus","timestamp":1585550389.426,"event_timestamp":1585550387.928651,"result":{"route_state":"tracking","location":{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550389.426,"speed":7.184197902679443,"bearing":188.4066925048828,"altitude":80.04736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.799,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550388.377,"bearing":188.4066925048828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6269056,"lon":139.6559523,"time":1585550388.617,"speed":6.318629741668701,"bearing":188.98818969726563,"altitude":80.2884521484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550388.61773,"delta_ms":0},{"type":"getStatus","timestamp":1585550390.485,"event_timestamp":1585550388.990765,"result":{"route_state":"tracking","location":{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550390.485,"speed":6.58347225189209,"bearing":188.4066925048828,"altitude":80.2884521484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.868,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[{"lat":35.6270637512207,"lon":139.65597534179688,"time":1585550389.426,"bearing":188.4066925048828}]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6268541,"lon":139.6559424,"time":1585550389.633,"speed":4.9115400314331059,"bearing":188.99786376953126,"altitude":80.3968505859375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550389.633556,"delta_ms":0},{"type":"getStatus","timestamp":1585550391.57,"event_timestamp":1585550390.071591,"result":{"route_state":"tracking","location":{"lat":35.62675476074219,"lon":139.65591430664063,"time":1585550391.57,"speed":5.482859134674072,"bearing":188.53419494628907,"altitude":80.3968505859375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6268155,"lon":139.6559358,"time":1585550390.629,"speed":3.731003522872925,"bearing":188.99818420410157,"altitude":80.57745361328125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550390.629237,"delta_ms":0},{"type":"getStatus","timestamp":1585550392.624,"event_timestamp":1585550391.126632,"result":{"route_state":"tracking","location":{"lat":35.62673568725586,"lon":139.65591430664063,"time":1585550392.624,"speed":4.355914115905762,"bearing":188.53419494628907,"altitude":80.57745361328125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267862,"lon":139.6559306,"time":1585550391.614,"speed":3.18280029296875,"bearing":188.9925079345703,"altitude":80.79559326171875,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"result":true,"event_timestamp":1585550391.614846,"delta_ms":0},{"type":"getStatus","timestamp":1585550393.679,"event_timestamp":1585550392.180662,"result":{"route_state":"tracking","location":{"lat":35.62671661376953,"lon":139.65591430664063,"time":1585550393.679,"speed":3.5380594730377199,"bearing":188.53419494628907,"altitude":80.79559326171875,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267605,"lon":139.6559265,"time":1585550392.617,"speed":2.5102896690368654,"bearing":189.9989471435547,"altitude":80.49798583984375,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"result":true,"event_timestamp":1585550392.617789,"delta_ms":0},{"type":"getStatus","timestamp":1585550394.739,"event_timestamp":1585550393.240799,"result":{"route_state":"offRoute","location":{"lat":35.62670135498047,"lon":139.65591430664063,"time":1585550394.739,"speed":2.792929172515869,"bearing":188.53419494628907,"altitude":80.49798583984375,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4485.11865234375,"remaining_leg_duration":619.39,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":5,"intersection_index":4,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550393.310823,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267404,"lon":139.6559229,"time":1585550393.646,"speed":2.060452461242676,"bearing":189.9981689453125,"altitude":80.6815185546875,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"result":true,"event_timestamp":1585550393.646568,"delta_ms":0},{"type":"getStatus","timestamp":1585550395.821,"event_timestamp":1585550394.323467,"result":{"route_state":"invalid","location":{"lat":35.62669372558594,"lon":139.65591430664063,"time":1585550395.821,"speed":2.243272542953491,"bearing":188.53419494628907,"altitude":80.6815185546875,"accuracyHorizontal":3.625999927520752,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4540.977,\"duration\":637.928,\"geometry\":\"ykn}bAsm|jiG`H|@Vcf@gOeOyGqHaHoIyGqGsF?jAhjAoNyBc`@sEiM{AgO{AeYwCaH}@wC]iH]o]yBom@yBwD_@{P?xGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":637.928,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4540.977,\"duration\":637.928,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":16.452,\"duration\":4.556,\"geometry\":\"ykn}bAsm|jiG`H|@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655914,35.626701],\"bearing_before\":0.0,\"bearing_after\":190.0,\"instruction\":\"南方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":16.452,\"announcement\":\"南方向です その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e南方向です その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":16.452,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":4.556,\"intersections\":[{\"location\":[139.655914,35.626701],\"bearings\":[190],\"entry\":[true],\"out\":0}]},{\"distance\":57.0,\"duration\":9.84,\"geometry\":\"wbn}bAuk|jiGVcf@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655884,35.626556],\"bearing_before\":190.0,\"bearing_after\":91.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":57.0,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":57.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.84,\"intersections\":[{\"location\":[139.655884,35.626556],\"bearings\":[10,91,191],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":223.0,\"duration\":40.26,\"geometry\":\"_bn}bAyr}jiGgOeOyGqHaHoIyGqGsF?jAhjA\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656509,35.626545],\"bearing_before\":91.0,\"bearing_after\":39.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":203.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":83.1,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":223.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":40.26,\"intersections\":[{\"location\":[139.656509,35.626545],\"bearings\":[39,215,271],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.656769,35.626804],\"bearings\":[40,219,270],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.657089,35.62709],\"bearings\":[39,221,267],\"entry\":[true,false,true],\"in\":1,\"out\":0}]},{\"distance\":412.0,\"duration\":110.784,\"geometry\":\"ero}bAit|jiGoNyBc`@sEiM{AgO{AeYwCaH}@wC]iH]o]yBom@yBwD_@{P?\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656021,35.627316],\"bearing_before\":268.0,\"bearing_after\":11.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":392.0,\"announcement\":\"400 メートル先、駒沢を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e400 メートル先、駒沢を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":55.8,\"announcement\":\"駒沢を左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e駒沢を左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":412.0,\"primary\":{\"text\":\"駒沢\",\"components\":[{\"text\":\"駒沢\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":55.8,\"primary\":{\"text\":\"駒沢\",\"components\":[{\"text\":\"駒沢\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"slight left\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":110.784,\"intersections\":[{\"location\":[139.656021,35.627316],\"bearings\":[11,88,189],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656189,35.628094],\"bearings\":[9,108,188,277],\"entry\":[true,false,false,false],\"in\":2,\"out\":0},{\"location\":[139.656235,35.628323],\"bearings\":[8,189,282],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656281,35.628582],\"bearings\":[8,188,320],\"entry\":[true,false,false],\"in\":1,\"out\":0},{\"location\":[139.656357,35.629002],\"bearings\":[11,188,284],\"entry\":[true,false,false],\"in\":1,\"out\":0},{\"location\":[139.656403,35.629223],\"bearings\":[5,97,191],\"entry\":[true,false,false],\"in\":2,\"out\":0},{\"location\":[139.656418,35.629372],\"bearings\":[6,185,277],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656479,35.62986],\"bearings\":[4,186,282],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.65654,35.630604],\"bearings\":[8,184,275],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.656555,35.630695],\"bearings\":[0,96,188],\"entry\":[true,true,false],\"in\":2,\"out\":0}]},{\"distance\":3358.001,\"duration\":330.508,\"geometry\":\"iwv}bAuu}jiGxGdd@bGl_@rKrp@d@rEfD~SvDxWzE~SbGvXvDdO|Ij`@d@xBrQlt@d@vCnClJxL|h@hHtZfDfNxWlhAdJj`@vDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.656555,35.630981],\"bearing_before\":0.0,\"bearing_after\":254.0,\"instruction\":\"駒沢を左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":3338.001,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":711.2,\"announcement\":\"700 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":152.4,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":3358.001,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":152.4,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":330.508,\"intersections\":[{\"location\":[139.656555,35.630981],\"bearings\":[0,75,180,254,351],\"entry\":[true,false,false,true,true],\"in\":2,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"slight left\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.65596,35.63084],\"bearings\":[74,163,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.655441,35.630711],\"bearings\":[73,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654648,35.630508],\"bearings\":[73,258],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.654541,35.630489],\"bearings\":[78,172,253],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.654205,35.630405],\"bearings\":[73,254],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.653809,35.630314],\"bearings\":[74,175,248,282,283],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"slight right\"]}]},{\"location\":[139.653061,35.630074],\"bearings\":[69,175,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652802,35.629982],\"bearings\":[67,180,248],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.652267,35.629807],\"bearings\":[68,175,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.652206,35.629787],\"bearings\":[69,247],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651352,35.62949],\"bearings\":[67,253],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.651276,35.629471],\"bearings\":[73,180,244],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.651093,35.629398],\"bearings\":[64,184,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.650421,35.629177],\"bearings\":[0,68,184,248],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649979,35.629028],\"bearings\":[68,182,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649734,35.628944],\"bearings\":[67,180,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64856,35.628548],\"bearings\":[67,248],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":71.184,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.4,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.4,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":71.184,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":48.813,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.4,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.4,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":48.813,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":9.2,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":9.2,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[16.4,56.6,37.2,20.9,22.2,20.0,13.6,109.2,28.1,59.8,25.8,29.2,47.2,16.4,8.6,16.6,54.6,83.0,10.3,31.8,56.1,49.1,75.2,9.9,31.8,37.3,32.8,40.0,25.6,52.1,5.9,84.1,7.2,18.4,65.6,43.3,24.0,115.1,52.3,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[2.806,6.795,4.465,2.51,2.659,2.404,1.631,13.099,7.795,16.563,7.744,5.527,9.444,5.358,2.816,1.496,8.94,14.227,0.926,2.866,2.766,2.422,3.71,0.488,1.567,1.84,2.269,2.768,1.675,3.412,0.292,4.148,0.356,0.909,4.214,2.737,1.183,5.677,2.578,1.706,6.592,0.23,2.224,1.065,7.668,4.37,7.049,12.214,8.313,8.68,4.419,0.959,0.23,2.046,5.986,0.371,4.311,2.755,3.214,10.637,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.902,3.66,28.437,5.938,1.396,1.529,2.624,3.106,1.742,33.449,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.307,6.001,19.308,11.535,15.172,7.748,8.877,1.205,1.415,11.625,3.331,0.594,0.425,6.233,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6559143,35.6267014;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"188.534195,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"XRtbaF_GS2v_I974B4mR6jorzFWoJ8SZfbXq2oa2rWCyJLPwOstEBQ\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550394.416131,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4537.56787109375,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":16.371517181396486,"remaining_step_duration":4.556,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":28},{"type":"updateLocation","location":{"lat":35.6267255,"lon":139.6559208,"time":1585550394.624,"speed":1.2925546169281006,"bearing":188.78016662597657,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585550394.624803,"delta_ms":0},{"type":"getStatus","timestamp":1585550396.873,"event_timestamp":1585550395.374844,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550396.873,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.249,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"南方向です その先 左折です","announcement":"南方向です その先 左折です","remaining_step_distance":16.371517181396486,"index":0},"banner_instruction":{"primary":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]},"remaining_step_distance":16.371517181396486,"index":0,"sub":{"text":"左折です","type":"turn","modifier":"left","components":[{"type":"text","text":"左折です"}]}},"key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267184,"lon":139.6559198,"time":1585550395.653,"speed":0.4315113127231598,"bearing":188.96913146972657,"altitude":80.7060546875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550395.653991,"delta_ms":0},{"type":"getStatus","timestamp":1585550397.925,"event_timestamp":1585550396.425761,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550397.925,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.272,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550396.873,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267176,"lon":139.6559198,"time":1585550396.635,"speed":0.4307072162628174,"bearing":188.98533630371095,"altitude":80.76727294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550396.635996,"delta_ms":0},{"type":"getStatus","timestamp":1585550398.982,"event_timestamp":1585550397.482899,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550398.982,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.347,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550397.925,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267184,"lon":139.6559206,"time":1585550397.618,"speed":0.1408269852399826,"bearing":176.14649963378907,"altitude":80.7857666015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550397.618767,"delta_ms":0},{"type":"getStatus","timestamp":1585550400.058,"event_timestamp":1585550398.559279,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550400.058,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.44,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550398.982,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.626719,"lon":139.6559212,"time":1585550398.66,"speed":0.035956576466560367,"bearing":116.06175994873047,"altitude":81.4356689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550398.660463,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267207,"lon":139.6559213,"time":1585550399.622,"speed":0.10364467650651932,"bearing":12.640670776367188,"altitude":80.9991455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550399.622307,"delta_ms":0},{"type":"getStatus","timestamp":1585550401.147,"event_timestamp":1585550399.648494,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550401.147,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.525,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550400.058,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.626722,"lon":139.6559214,"time":1585550400.637,"speed":0.12547388672828675,"bearing":4.741806507110596,"altitude":80.88482666015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550400.638103,"delta_ms":0},{"type":"getStatus","timestamp":1585550402.203,"event_timestamp":1585550400.704074,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550402.203,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.566,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550401.147,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267226,"lon":139.6559212,"time":1585550401.627,"speed":0.09360107779502869,"bearing":356.8313903808594,"altitude":80.92303466796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550401.627823,"delta_ms":0},{"type":"getStatus","timestamp":1585550403.262,"event_timestamp":1585550401.763402,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550403.262,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.635,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550402.203,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267225,"lon":139.6559209,"time":1585550402.62,"speed":0.03679659217596054,"bearing":337.1195373535156,"altitude":81.09149169921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550402.620296,"delta_ms":0},{"type":"getStatus","timestamp":1585550404.305,"event_timestamp":1585550402.806919,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550404.305,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.685,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550403.262,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267227,"lon":139.6559199,"time":1585550403.619,"speed":0.0647372305393219,"bearing":294.0220642089844,"altitude":80.90228271484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550403.619314,"delta_ms":0},{"type":"getStatus","timestamp":1585550405.364,"event_timestamp":1585550403.865774,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550405.364,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.745,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550404.305,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267227,"lon":139.6559192,"time":1585550404.621,"speed":0.0626426637172699,"bearing":277.06103515625,"altitude":81.05230712890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550404.621916,"delta_ms":0},{"type":"getStatus","timestamp":1585550406.457,"event_timestamp":1585550404.958422,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550406.457,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.836,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550405.364,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267219,"lon":139.6559191,"time":1585550405.628,"speed":0.054454952478408816,"bearing":213.57090759277345,"altitude":81.23297119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550405.628908,"delta_ms":0},{"type":"getStatus","timestamp":1585550407.546,"event_timestamp":1585550406.048076,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550407.546,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.918,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550406.457,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267209,"lon":139.6559192,"time":1585550406.628,"speed":0.08203209936618805,"bearing":186.88925170898438,"altitude":81.28277587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550406.628489,"delta_ms":0},{"type":"getStatus","timestamp":1585550408.634,"event_timestamp":1585550407.136264,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550408.634,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.006,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550407.546,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6267163,"lon":139.6559196,"time":1585550407.626,"speed":0.5897247195243836,"bearing":189.00384521484376,"altitude":81.16748046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550407.626431,"delta_ms":0},{"type":"getStatus","timestamp":1585550409.707,"event_timestamp":1585550408.208872,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550409.707,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.081,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550408.634,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267101,"lon":139.6559185,"time":1585550408.65,"speed":0.8995402455329895,"bearing":189.00416564941407,"altitude":81.517333984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550408.650943,"delta_ms":0},{"type":"getStatus","timestamp":1585550410.79,"event_timestamp":1585550409.29113,"result":{"route_state":"tracking","location":{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550410.79,"speed":1.6141016483306885,"bearing":189.7105255126953,"altitude":80.46417236328125,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.86767578125,"remaining_leg_duration":637.928,"step_index":0,"remaining_step_distance":14.671354293823243,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.14,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626686096191409,"lon":139.65591430664063,"time":1585550409.707,"bearing":189.7105255126953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6267009,"lon":139.6559166,"time":1585550409.619,"speed":1.3492136001586915,"bearing":189.00465393066407,"altitude":81.69989013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550409.620132,"delta_ms":0},{"type":"getStatus","timestamp":1585550411.844,"event_timestamp":1585550410.345933,"result":{"route_state":"tracking","location":{"lat":35.626678466796878,"lon":139.65591430664063,"time":1585550411.844,"speed":1.139045000076294,"bearing":189.7105255126953,"altitude":81.69989013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4535.01953125,"remaining_leg_duration":636.928,"step_index":0,"remaining_step_distance":13.823044776916504,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.225,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626678466796878,"lon":139.65591430664063,"time":1585550411.844,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6266867,"lon":139.6559138,"time":1585550410.621,"speed":2.068739891052246,"bearing":189.00466918945313,"altitude":81.59564208984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550410.621601,"delta_ms":0},{"type":"getStatus","timestamp":1585550412.925,"event_timestamp":1585550411.427248,"result":{"route_state":"tracking","location":{"lat":35.62665557861328,"lon":139.65591430664063,"time":1585550412.925,"speed":1.7300260066986085,"bearing":189.7105255126953,"altitude":81.59564208984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4532.47265625,"remaining_leg_duration":636.928,"step_index":0,"remaining_step_distance":11.276344299316407,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.304,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62665557861328,"lon":139.65591430664063,"time":1585550412.925,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6266648,"lon":139.6559093,"time":1585550411.621,"speed":2.9241371154785158,"bearing":189.01695251464845,"altitude":81.7730712890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550411.622049,"delta_ms":0},{"type":"getStatus","timestamp":1585550413.961,"event_timestamp":1585550412.462755,"result":{"route_state":"tracking","location":{"lat":35.626617431640628,"lon":139.65589904785157,"time":1585550413.961,"speed":2.506516218185425,"bearing":189.7105255126953,"altitude":81.7730712890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4528.1240234375,"remaining_leg_duration":634.928,"step_index":0,"remaining_step_distance":6.927384376525879,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.34,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626617431640628,"lon":139.65589904785157,"time":1585550413.961,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6266394,"lon":139.6559039,"time":1585550412.618,"speed":3.565915584564209,"bearing":189.081787109375,"altitude":81.7451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550412.618868,"delta_ms":0},{"type":"getStatus","timestamp":1585550415.01,"event_timestamp":1585550413.511697,"result":{"route_state":"tracking","location":{"lat":35.62657928466797,"lon":139.6558837890625,"time":1585550415.01,"speed":3.170919418334961,"bearing":189.7105255126953,"altitude":81.7451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4523.701171875,"remaining_leg_duration":633.928,"step_index":0,"remaining_step_distance":2.504828453063965,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":2.392,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62657928466797,"lon":139.6558837890625,"time":1585550415.01,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6266061,"lon":139.6558965,"time":1585550413.615,"speed":3.882066249847412,"bearing":189.01707458496095,"altitude":81.88336181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550413.615452,"delta_ms":0},{"type":"getStatus","timestamp":1585550416.043,"event_timestamp":1585550414.544703,"result":{"route_state":"tracking","location":{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550416.043,"speed":3.684915542602539,"bearing":189.7105255126953,"altitude":81.88336181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.428,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550416.043,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6265671,"lon":139.6558877,"time":1585550414.626,"speed":3.7720232009887697,"bearing":188.99537658691407,"altitude":81.9156494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550414.6265,"delta_ms":0},{"type":"getStatus","timestamp":1585550417.085,"event_timestamp":1585550415.588262,"result":{"route_state":"tracking","location":{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550417.085,"speed":3.8339717388153078,"bearing":189.7105255126953,"altitude":81.9156494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.459,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550416.043,"bearing":189.7105255126953}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6265305,"lon":139.6558787,"time":1585550415.654,"speed":4.167867660522461,"bearing":189.0253143310547,"altitude":81.9261474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550415.654848,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6264895,"lon":139.6558689,"time":1585550416.62,"speed":4.695461273193359,"bearing":190.00799560546876,"altitude":82.07080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550416.620706,"delta_ms":0},{"type":"getStatus","timestamp":1585550418.145,"event_timestamp":1585550416.646708,"result":{"route_state":"tracking","location":{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550418.145,"speed":4.560948371887207,"bearing":189.7105255126953,"altitude":82.07080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.525,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550417.085,"bearing":189.7105255126953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6264442,"lon":139.6558582,"time":1585550417.624,"speed":4.739964008331299,"bearing":189.00050354003907,"altitude":82.11236572265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550417.625029,"delta_ms":0},{"type":"getStatus","timestamp":1585550419.191,"event_timestamp":1585550417.695285,"result":{"route_state":"tracking","location":{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550419.191,"speed":4.74845027923584,"bearing":189.7105255126953,"altitude":82.11236572265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.567,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550418.145,"bearing":189.7105255126953}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6264,"lon":139.65585,"time":1585550418.628,"speed":4.740005970001221,"bearing":188.99998474121095,"altitude":81.71270751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550418.628568,"delta_ms":0},{"type":"getStatus","timestamp":1585550420.263,"event_timestamp":1585550418.765586,"result":{"route_state":"tracking","location":{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550420.263,"speed":4.802090167999268,"bearing":189.7105255126953,"altitude":81.71270751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.635,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550419.191,"bearing":189.7105255126953}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6263566,"lon":139.655842,"time":1585550419.639,"speed":4.809385299682617,"bearing":189.00106811523438,"altitude":81.4632568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550419.639397,"delta_ms":0},{"type":"getStatus","timestamp":1585550421.31,"event_timestamp":1585550419.813459,"result":{"route_state":"tracking","location":{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550421.31,"speed":4.842416286468506,"bearing":189.7105255126953,"altitude":81.4632568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.671,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.626556396484378,"lon":139.6558837890625,"time":1585550420.263,"bearing":189.7105255126953}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6263129,"lon":139.6558333,"time":1585550420.623,"speed":5.14733362197876,"bearing":189.00430297851563,"altitude":81.01690673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550420.623806,"delta_ms":0},{"type":"getStatus","timestamp":1585550422.362,"event_timestamp":1585550420.866013,"result":{"route_state":"tracking","location":{"lat":35.6262321472168,"lon":139.6558074951172,"time":1585550422.362,"speed":5.044496059417725,"bearing":189.46617126464845,"altitude":81.01690673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6262657,"lon":139.6558201,"time":1585550421.623,"speed":5.614940643310547,"bearing":190.00770568847657,"altitude":80.970458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550421.623665,"delta_ms":0},{"type":"getStatus","timestamp":1585550423.424,"event_timestamp":1585550421.926458,"result":{"route_state":"tracking","location":{"lat":35.62618637084961,"lon":139.65579223632813,"time":1585550423.424,"speed":5.397548198699951,"bearing":189.46617126464845,"altitude":80.970458984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.626215,"lon":139.655807,"time":1585550422.624,"speed":5.6399006843566898,"bearing":190.0001678466797,"altitude":81.10394287109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550422.625129,"delta_ms":0},{"type":"getStatus","timestamp":1585550424.472,"event_timestamp":1585550422.974372,"result":{"route_state":"tracking","location":{"lat":35.626129150390628,"lon":139.65577697753907,"time":1585550424.472,"speed":5.564681053161621,"bearing":189.46617126464845,"altitude":81.10394287109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6261626,"lon":139.6557956,"time":1585550423.628,"speed":5.8297858238220219,"bearing":190.00021362304688,"altitude":81.49993896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550423.628731,"delta_ms":0},{"type":"getStatus","timestamp":1585550425.514,"event_timestamp":1585550424.01533,"result":{"route_state":"offRoute","location":{"lat":35.62607192993164,"lon":139.65577697753907,"time":1585550425.514,"speed":5.804714202880859,"bearing":189.46617126464845,"altitude":81.49993896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4521.1962890625,"remaining_leg_duration":632.928,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550424.078505,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6261096,"lon":139.6557837,"time":1585550424.63,"speed":6.065953254699707,"bearing":191.0058135986328,"altitude":81.485595703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550424.630615,"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4100.194,\"duration\":681.723,\"geometry\":\"mdm}bA_e|jiGxA\\\\z[rFj[pGhf@jLyAvXsB|TkFzi@}DliAOhjAe@p\\\\_NpHcRlJ}ItEil@tY?xWMp\\\\al@vXkLpGud@~Sqa@~RvDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":681.723,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4100.194,\"duration\":681.723,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":183.669,\"duration\":38.405,\"geometry\":\"mdm}bA_e|jiGxA\\\\z[rFj[pGhf@jL\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655777,35.626072],\"bearing_before\":0.0,\"bearing_after\":195.0,\"instruction\":\"南方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":183.669,\"announcement\":\"南方向です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e南方向です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":71.7,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":183.669,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":38.405,\"intersections\":[{\"location\":[139.655777,35.626072],\"bearings\":[195],\"entry\":[true],\"out\":0},{\"location\":[139.655762,35.626026],\"bearings\":[15,146,192],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.65564,35.625565],\"bearings\":[12,194,270],\"entry\":[false,true,false],\"in\":0,\"out\":1},{\"location\":[139.655502,35.625111],\"bearings\":[14,101,195],\"entry\":[false,false,true],\"in\":0,\"out\":2}]},{\"distance\":394.0,\"duration\":97.511,\"geometry\":\"aaj}bAof{jiGyAvXsB|TkFzi@}DliAOhjAe@p\\\\\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655289,35.624481],\"bearing_before\":195.0,\"bearing_after\":278.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":374.0,\"announcement\":\"400 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e400 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":60.6,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":394.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":97.511,\"intersections\":[{\"location\":[139.655289,35.624481],\"bearings\":[15,101,196,278],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.654877,35.624527],\"bearings\":[98,194,281],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.654526,35.624584],\"bearings\":[101,189,282],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.653839,35.624702],\"bearings\":[0,102,183,276],\"entry\":[false,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.652649,35.624798],\"bearings\":[96,177,270,356],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.651443,35.624805],\"bearings\":[90,273,358],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":179.0,\"duration\":50.8,\"geometry\":\"ovj}bAsxrjiG_NpHcRlJ}ItEil@tY\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.65097,35.624825],\"bearing_before\":273.0,\"bearing_after\":332.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":159.0,\"announcement\":\"200 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.9,\"announcement\":\"左折です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":179.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":52.9,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":50.8,\"intersections\":[{\"location\":[139.65097,35.624825],\"bearings\":[93,153,270,332],\"entry\":[false,false,true,true],\"in\":0,\"out\":3},{\"location\":[139.650635,35.62537],\"bearings\":[153,246,334],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.650528,35.625546],\"bearings\":[89,154,269,334],\"entry\":[true,false,false,true],\"in\":1,\"out\":3}]},{\"distance\":79.0,\"duration\":23.46,\"geometry\":\"{pm}bAgbqjiG?xWMp\\\\\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.650101,35.62627],\"bearing_before\":334.0,\"bearing_after\":270.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":50.5,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":79.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":23.46,\"intersections\":[{\"location\":[139.650101,35.62627],\"bearings\":[6,92,154,270],\"entry\":[true,true,false,true],\"in\":2,\"out\":3},{\"location\":[139.649704,35.62627],\"bearings\":[90,156,271],\"entry\":[false,true,true],\"in\":0,\"out\":2}]},{\"distance\":257.0,\"duration\":58.902,\"geometry\":\"iqm}bA{kojiGal@vXkLpGud@~Sqa@~R\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.649231,35.626278],\"bearing_before\":271.0,\"bearing_after\":335.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":237.0,\"announcement\":\"200 メートル先、左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":65.4,\"announcement\":\"左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":257.0,\"primary\":{\"text\":\"国道246号線\",\"components\":[{\"text\":\"国道246号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":58.902,\"intersections\":[{\"location\":[139.649231,35.626278],\"bearings\":[91,155,335],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.648819,35.626999],\"bearings\":[89,155,244,332],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.648682,35.627213],\"bearings\":[73,152,336],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.648346,35.627815],\"bearings\":[65,156,245,335],\"entry\":[true,false,true,true],\"in\":1,\"out\":3}]},{\"distance\":2533.0,\"duration\":271.738,\"geometry\":\"_tq}bAq`mjiGvDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.648026,35.628368],\"bearing_before\":335.0,\"bearing_after\":247.0,\"instruction\":\"左方向です。その先、国道246号線です\",\"type\":\"end of road\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":2513.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":652.5,\"announcement\":\"700 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":139.8,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":2533.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":139.8,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":271.738,\"intersections\":[{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":70.529,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.9,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.9,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":70.529,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":49.115,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.1,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.1,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":49.115,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":8.48,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":8.48,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[5.3,52.6,52.0,72.7,37.6,32.4,63.5,108.2,109.1,42.9,30.1,37.8,21.8,89.5,35.9,42.8,88.5,26.8,73.7,68.1,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[2.111,8.6,11.709,13.772,9.675,6.137,11.432,17.708,17.849,8.12,6.021,7.559,4.359,17.893,8.615,10.274,10.985,3.45,9.143,16.334,1.706,6.592,0.23,2.224,1.065,7.668,4.37,7.284,12.214,8.313,8.68,4.419,0.959,0.23,2.046,5.879,0.371,4.311,2.755,3.214,10.637,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.902,3.66,28.437,5.938,1.396,1.529,2.624,3.106,1.742,33.449,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.307,6.001,19.308,11.535,13.908,7.103,8.877,1.205,1.415,12.271,2.998,0.535,0.382,5.61,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.655777,35.6260719;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"189.466171,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"CSS3MXNEqiXdxqtiRCvc-7r0tZGxKOrDGvEgsK9ohY32rjr6XQKzxw\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550425.056604,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4095.309326171875,"remaining_leg_duration":681.723,"step_index":0,"remaining_step_distance":182.56021118164063,"remaining_step_duration":38.405,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":21},{"type":"getStatus","timestamp":1585550426.59,"event_timestamp":1585550425.091052,"result":{"route_state":"tracking","location":{"lat":35.62600326538086,"lon":139.65576171875,"time":1585550426.59,"speed":6.021633625030518,"bearing":192.1320343017578,"altitude":81.485595703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4087.48291015625,"remaining_leg_duration":679.723,"step_index":0,"remaining_step_distance":174.7337646484375,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.96,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"南方向です その先 右折です","announcement":"南方向です その先 右折です","remaining_step_distance":182.56021118164063,"index":0},"banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":182.56021118164063,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6260551,"lon":139.6557686,"time":1585550425.621,"speed":6.299661636352539,"bearing":192.9993896484375,"altitude":81.74383544921875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550425.621463,"delta_ms":0},{"type":"getStatus","timestamp":1585550427.661,"event_timestamp":1585550426.162026,"result":{"route_state":"tracking","location":{"lat":35.62594985961914,"lon":139.65574645996095,"time":1585550427.661,"speed":6.196783542633057,"bearing":192.1320343017578,"altitude":81.74383544921875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4081.42529296875,"remaining_leg_duration":678.723,"step_index":0,"remaining_step_distance":168.6761474609375,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.04,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62594985961914,"lon":139.65574645996095,"time":1585550427.661,"bearing":192.1320343017578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.625999,"lon":139.6557513,"time":1585550426.622,"speed":6.548308849334717,"bearing":194.0022735595703,"altitude":81.82568359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550426.62221,"delta_ms":0},{"type":"getStatus","timestamp":1585550428.724,"event_timestamp":1585550427.22606,"result":{"route_state":"tracking","location":{"lat":35.62588119506836,"lon":139.65573120117188,"time":1585550428.724,"speed":6.45979642868042,"bearing":192.1320343017578,"altitude":81.82568359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4073.658447265625,"remaining_leg_duration":676.723,"step_index":0,"remaining_step_distance":160.9092254638672,"remaining_step_duration":34.0,"state_message":"","in_tunnel":false,"predicted":2.102,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62588119506836,"lon":139.65573120117188,"time":1585550428.724,"bearing":192.1320343017578}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.625941,"lon":139.6557341,"time":1585550427.637,"speed":6.589974880218506,"bearing":194.00001525878907,"altitude":81.7032470703125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550427.637939,"delta_ms":0},{"type":"getStatus","timestamp":1585550429.764,"event_timestamp":1585550428.26561,"result":{"route_state":"tracking","location":{"lat":35.625816345214847,"lon":139.6557159423828,"time":1585550429.764,"speed":6.5710368156433109,"bearing":192.1320343017578,"altitude":81.7032470703125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.30908203125,"remaining_leg_duration":675.723,"step_index":0,"remaining_step_distance":153.55990600585938,"remaining_step_duration":32.0,"state_message":"","in_tunnel":false,"predicted":2.127,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.625816345214847,"lon":139.6557159423828,"time":1585550429.764,"bearing":192.1320343017578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.625883,"lon":139.6557177,"time":1585550428.626,"speed":6.33023738861084,"bearing":193.99972534179688,"altitude":81.79656982421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550428.626575,"delta_ms":0},{"type":"getStatus","timestamp":1585550430.811,"event_timestamp":1585550429.312607,"result":{"route_state":"tracking","location":{"lat":35.62575912475586,"lon":139.6556854248047,"time":1585550430.811,"speed":6.470338344573975,"bearing":192.1320343017578,"altitude":81.79656982421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4059.512939453125,"remaining_leg_duration":673.723,"step_index":0,"remaining_step_distance":146.7638397216797,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":2.185,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62575912475586,"lon":139.6556854248047,"time":1585550430.811,"bearing":192.1320343017578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6258265,"lon":139.6557017,"time":1585550429.63,"speed":6.5496826171875,"bearing":194.00045776367188,"altitude":82.0296630859375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550429.630355,"delta_ms":0},{"type":"getStatus","timestamp":1585550431.872,"event_timestamp":1585550430.372832,"result":{"route_state":"tracking","location":{"lat":35.625694274902347,"lon":139.65567016601563,"time":1585550431.872,"speed":6.518686294555664,"bearing":192.1320343017578,"altitude":82.0296630859375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4052.16748046875,"remaining_leg_duration":672.723,"step_index":0,"remaining_step_distance":139.41842651367188,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":2.242,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.625694274902347,"lon":139.65567016601563,"time":1585550431.872,"bearing":192.1320343017578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6257682,"lon":139.6556848,"time":1585550430.625,"speed":6.858353137969971,"bearing":194.00294494628907,"altitude":81.93017578125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550430.625865,"delta_ms":0},{"type":"getStatus","timestamp":1585550432.919,"event_timestamp":1585550431.420575,"result":{"route_state":"tracking","location":{"lat":35.625633239746097,"lon":139.65565490722657,"time":1585550432.919,"speed":6.759421348571777,"bearing":192.1320343017578,"altitude":81.93017578125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4045.2353515625,"remaining_leg_duration":670.723,"step_index":0,"remaining_step_distance":132.48623657226563,"remaining_step_duration":28.0,"state_message":"","in_tunnel":false,"predicted":2.294,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.625633239746097,"lon":139.65565490722657,"time":1585550432.919,"bearing":192.1320343017578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6257065,"lon":139.6556673,"time":1585550431.631,"speed":7.185173034667969,"bearing":192.00961303710938,"altitude":82.0771484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550431.632182,"delta_ms":0},{"type":"getStatus","timestamp":1585550433.963,"event_timestamp":1585550432.464125,"result":{"route_state":"tracking","location":{"lat":35.62556457519531,"lon":139.6556396484375,"time":1585550433.963,"speed":7.021617412567139,"bearing":192.1320343017578,"altitude":82.0771484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4037.47314453125,"remaining_leg_duration":669.723,"step_index":0,"remaining_step_distance":124.72386932373047,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":2.332,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62556457519531,"lon":139.6556396484375,"time":1585550433.963,"bearing":192.1320343017578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6256417,"lon":139.6556521,"time":1585550432.634,"speed":7.507349014282227,"bearing":190.00462341308595,"altitude":82.1871337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550432.634563,"delta_ms":0},{"type":"getStatus","timestamp":1585550435.006,"event_timestamp":1585550433.507122,"result":{"route_state":"tracking","location":{"lat":35.625492095947269,"lon":139.65562438964845,"time":1585550435.006,"speed":7.334898471832275,"bearing":193.81509399414063,"altitude":82.1871337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4029.287353515625,"remaining_leg_duration":667.723,"step_index":0,"remaining_step_distance":116.53811645507813,"remaining_step_duration":25.0,"state_message":"","in_tunnel":false,"predicted":2.372,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62556457519531,"lon":139.6556396484375,"time":1585550433.963,"bearing":192.1320343017578},{"lat":35.625492095947269,"lon":139.65562438964845,"time":1585550435.006,"bearing":193.81509399414063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6255724,"lon":139.6556387,"time":1585550433.621,"speed":7.887060165405273,"bearing":189.00372314453126,"altitude":82.5330810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550433.621255,"delta_ms":0},{"type":"getStatus","timestamp":1585550436.046,"event_timestamp":1585550434.54689,"result":{"route_state":"tracking","location":{"lat":35.62540817260742,"lon":139.6555938720703,"time":1585550436.046,"speed":7.7440009117126469,"bearing":193.81509399414063,"altitude":82.5330810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4019.575927734375,"remaining_leg_duration":665.723,"step_index":0,"remaining_step_distance":106.8266830444336,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":2.425,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62540817260742,"lon":139.6555938720703,"time":1585550436.046,"bearing":193.81509399414063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6255021,"lon":139.6556223,"time":1585550434.624,"speed":8.1096830368042,"bearing":189.99974060058595,"altitude":81.71990966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550434.62512,"delta_ms":0},{"type":"getStatus","timestamp":1585550437.086,"event_timestamp":1585550435.587404,"result":{"route_state":"tracking","location":{"lat":35.62533187866211,"lon":139.6555633544922,"time":1585550437.086,"speed":7.958940029144287,"bearing":193.81509399414063,"altitude":81.71990966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4010.6650390625,"remaining_leg_duration":663.723,"step_index":0,"remaining_step_distance":97.91596221923828,"remaining_step_duration":21.0,"state_message":"","in_tunnel":false,"predicted":2.462,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62533187866211,"lon":139.6555633544922,"time":1585550437.086,"bearing":193.81509399414063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6254285,"lon":139.6556046,"time":1585550435.654,"speed":8.339834213256836,"bearing":191.99911499023438,"altitude":81.5213623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550435.65465,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6253558,"lon":139.655584,"time":1585550436.626,"speed":8.003357887268067,"bearing":192.9940185546875,"altitude":81.42034912109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550436.626816,"delta_ms":0},{"type":"getStatus","timestamp":1585550438.146,"event_timestamp":1585550436.647747,"result":{"route_state":"tracking","location":{"lat":35.625244140625,"lon":139.65553283691407,"time":1585550438.146,"speed":8.172589302062989,"bearing":193.81509399414063,"altitude":81.42034912109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4000.516357421875,"remaining_leg_duration":661.723,"step_index":0,"remaining_step_distance":87.76707458496094,"remaining_step_duration":18.0,"state_message":"","in_tunnel":false,"predicted":1.52,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.625244140625,"lon":139.65553283691407,"time":1585550438.146,"bearing":193.81509399414063}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6252869,"lon":139.6555628,"time":1585550437.63,"speed":7.584844589233398,"bearing":193.99058532714845,"altitude":81.37591552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550437.6304,"delta_ms":0},{"type":"getStatus","timestamp":1585550439.187,"event_timestamp":1585550437.68865,"result":{"route_state":"tracking","location":{"lat":35.625179290771487,"lon":139.655517578125,"time":1585550439.187,"speed":7.824251651763916,"bearing":193.81509399414063,"altitude":81.37591552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3993.18359375,"remaining_leg_duration":660.723,"step_index":0,"remaining_step_distance":80.43450927734375,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":1.557,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.625179290771487,"lon":139.655517578125,"time":1585550439.187,"bearing":193.81509399414063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6252214,"lon":139.6555418,"time":1585550438.617,"speed":7.162655830383301,"bearing":194.99417114257813,"altitude":81.4359130859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550438.617586,"delta_ms":0},{"type":"getStatus","timestamp":1585550440.269,"event_timestamp":1585550438.77031,"result":{"route_state":"tracking","location":{"lat":35.62511444091797,"lon":139.65550231933595,"time":1585550440.269,"speed":7.402380466461182,"bearing":193.81509399414063,"altitude":81.4359130859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3985.84619140625,"remaining_leg_duration":658.723,"step_index":0,"remaining_step_distance":73.09708404541016,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":1.652,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62511444091797,"lon":139.65550231933595,"time":1585550440.269,"bearing":193.81509399414063}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6251596,"lon":139.6555197,"time":1585550439.622,"speed":7.110074520111084,"bearing":194.99989318847657,"altitude":81.6224365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550439.622953,"delta_ms":0},{"type":"getStatus","timestamp":1585550441.311,"event_timestamp":1585550439.81418,"result":{"route_state":"tracking","location":{"lat":35.62504959106445,"lon":139.65548706054688,"time":1585550441.311,"speed":7.2136006355285648,"bearing":195.42295837402345,"altitude":81.6224365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3978.50048828125,"remaining_leg_duration":656.723,"step_index":0,"remaining_step_distance":65.75142669677735,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":1.689,"shape_index":3,"intersection_index":3,"road_name":"","voice_instruction":{"ssml_announcement":"右折です","announcement":"右折です","remaining_step_distance":71.69999694824219,"index":1},"key_points":[{"lat":35.6251106262207,"lon":139.65550231933595,"time":1585550440.329,"bearing":193.81509399414063},{"lat":35.62504959106445,"lon":139.65548706054688,"time":1585550441.311,"bearing":195.42295837402345}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6250979,"lon":139.6554964,"time":1585550440.623,"speed":7.249800205230713,"bearing":195.00027465820313,"altitude":81.615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550440.624031,"delta_ms":0},{"type":"getStatus","timestamp":1585550442.361,"event_timestamp":1585550440.863141,"result":{"route_state":"tracking","location":{"lat":35.6249885559082,"lon":139.65545654296876,"time":1585550442.361,"speed":7.170199871063232,"bearing":195.42295837402345,"altitude":81.615234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3971.22802734375,"remaining_leg_duration":655.723,"step_index":0,"remaining_step_distance":58.47877883911133,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.738,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6249885559082,"lon":139.65545654296876,"time":1585550442.361,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6250362,"lon":139.6554728,"time":1585550441.639,"speed":6.932443618774414,"bearing":194.9748992919922,"altitude":81.69549560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550441.639457,"delta_ms":0},{"type":"getStatus","timestamp":1585550443.399,"event_timestamp":1585550441.903899,"result":{"route_state":"tracking","location":{"lat":35.62491989135742,"lon":139.6554412841797,"time":1585550443.399,"speed":7.066483497619629,"bearing":195.42295837402345,"altitude":81.69549560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3963.494873046875,"remaining_leg_duration":653.723,"step_index":0,"remaining_step_distance":50.74566650390625,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.76,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62491989135742,"lon":139.6554412841797,"time":1585550443.399,"bearing":195.42295837402345}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6249778,"lon":139.6554509,"time":1585550442.628,"speed":6.4777302742004398,"bearing":194.94017028808595,"altitude":81.645263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550442.628174,"delta_ms":0},{"type":"getStatus","timestamp":1585550444.447,"event_timestamp":1585550442.947742,"result":{"route_state":"tracking","location":{"lat":35.62487030029297,"lon":139.65542602539063,"time":1585550444.447,"speed":6.677475929260254,"bearing":195.42295837402345,"altitude":81.645263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3957.804443359375,"remaining_leg_duration":652.723,"step_index":0,"remaining_step_distance":45.05532455444336,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.819,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62487030029297,"lon":139.65542602539063,"time":1585550444.447,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6249206,"lon":139.6554301,"time":1585550443.616,"speed":6.899480819702148,"bearing":196.0002899169922,"altitude":81.871337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550443.616242,"delta_ms":0},{"type":"getStatus","timestamp":1585550445.488,"event_timestamp":1585550443.990518,"result":{"route_state":"tracking","location":{"lat":35.62480926513672,"lon":139.6553955078125,"time":1585550445.488,"speed":6.832082271575928,"bearing":195.42295837402345,"altitude":81.871337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3950.522216796875,"remaining_leg_duration":651.723,"step_index":0,"remaining_step_distance":37.7730712890625,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.872,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62480926513672,"lon":139.6553955078125,"time":1585550445.488,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6248612,"lon":139.6554072,"time":1585550444.619,"speed":6.660336971282959,"bearing":195.9994659423828,"altitude":81.8668212890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550444.619245,"delta_ms":0},{"type":"getStatus","timestamp":1585550446.532,"event_timestamp":1585550445.033729,"result":{"route_state":"tracking","location":{"lat":35.624752044677737,"lon":139.65538024902345,"time":1585550446.532,"speed":6.699134826660156,"bearing":195.42295837402345,"altitude":81.8668212890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3944.016845703125,"remaining_leg_duration":649.723,"step_index":0,"remaining_step_distance":31.267555236816408,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.913,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624752044677737,"lon":139.65538024902345,"time":1585550446.532,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6248049,"lon":139.655385,"time":1585550445.621,"speed":6.490238189697266,"bearing":195.9995880126953,"altitude":81.47625732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550445.621697,"delta_ms":0},{"type":"getStatus","timestamp":1585550447.573,"event_timestamp":1585550446.074606,"result":{"route_state":"tracking","location":{"lat":35.62468719482422,"lon":139.65536499023438,"time":1585550447.573,"speed":6.554641246795654,"bearing":195.42295837402345,"altitude":81.47625732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3936.687255859375,"remaining_leg_duration":648.723,"step_index":0,"remaining_step_distance":23.93811798095703,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":1.952,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62468719482422,"lon":139.65536499023438,"time":1585550447.573,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6247511,"lon":139.6553636,"time":1585550446.636,"speed":6.065838813781738,"bearing":195.98597717285157,"altitude":81.4425048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550446.637114,"delta_ms":0},{"type":"getStatus","timestamp":1585550448.616,"event_timestamp":1585550447.117216,"result":{"route_state":"tracking","location":{"lat":35.6246452331543,"lon":139.6553497314453,"time":1585550448.616,"speed":6.215320587158203,"bearing":195.42295837402345,"altitude":81.4425048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3931.818359375,"remaining_leg_duration":647.723,"step_index":0,"remaining_step_distance":19.069286346435548,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.98,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6246452331543,"lon":139.6553497314453,"time":1585550448.616,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6247017,"lon":139.6553451,"time":1585550447.621,"speed":5.560436725616455,"bearing":195.999267578125,"altitude":81.10125732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550447.621514,"delta_ms":0},{"type":"getStatus","timestamp":1585550449.65,"event_timestamp":1585550448.150976,"result":{"route_state":"tracking","location":{"lat":35.62459182739258,"lon":139.6553192138672,"time":1585550449.65,"speed":5.792184352874756,"bearing":195.42295837402345,"altitude":81.10125732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3925.351806640625,"remaining_leg_duration":645.723,"step_index":0,"remaining_step_distance":12.602607727050782,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.029,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62459182739258,"lon":139.6553192138672,"time":1585550449.65,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246589,"lon":139.6553288,"time":1585550448.622,"speed":4.119471073150635,"bearing":195.93052673339845,"altitude":80.81475830078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550448.623077,"delta_ms":0},{"type":"getStatus","timestamp":1585550450.686,"event_timestamp":1585550449.187758,"result":{"route_state":"tracking","location":{"lat":35.62456512451172,"lon":139.6553192138672,"time":1585550450.686,"speed":4.688438892364502,"bearing":195.42295837402345,"altitude":80.81475830078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3922.4892578125,"remaining_leg_duration":645.723,"step_index":0,"remaining_step_distance":9.740005493164063,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.064,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62456512451172,"lon":139.6553192138672,"time":1585550450.686,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246295,"lon":139.6553172,"time":1585550449.617,"speed":2.771287202835083,"bearing":195.9942626953125,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550449.618122,"delta_ms":0},{"type":"getStatus","timestamp":1585550451.724,"event_timestamp":1585550450.225511,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550451.724,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.107,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550451.724,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6246123,"lon":139.6553095,"time":1585550450.618,"speed":1.470168113708496,"bearing":195.89700317382813,"altitude":80.33160400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550450.619072,"delta_ms":0},{"type":"getStatus","timestamp":1585550452.78,"event_timestamp":1585550451.282167,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550452.78,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.162,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550451.724,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6246056,"lon":139.6553053,"time":1585550451.629,"speed":0.43022286891937258,"bearing":195.64505004882813,"altitude":80.21484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550451.630125,"delta_ms":0},{"type":"getStatus","timestamp":1585550453.856,"event_timestamp":1585550452.357624,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550453.856,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.227,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550452.78,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6246064,"lon":139.6553037,"time":1585550452.624,"speed":0.42404016852378847,"bearing":195.8829803466797,"altitude":80.0478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550452.624544,"delta_ms":0},{"type":"getStatus","timestamp":1585550454.917,"event_timestamp":1585550453.419281,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550454.917,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.293,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550453.856,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6246056,"lon":139.655303,"time":1585550453.626,"speed":0.2438599020242691,"bearing":201.32557678222657,"altitude":81.16180419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550453.626459,"delta_ms":0},{"type":"getStatus","timestamp":1585550455.988,"event_timestamp":1585550454.489143,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550455.988,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.362,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550454.917,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246059,"lon":139.655303,"time":1585550454.614,"speed":0.08139724284410477,"bearing":206.09503173828126,"altitude":81.1097412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550454.614387,"delta_ms":0},{"type":"getStatus","timestamp":1585550457.042,"event_timestamp":1585550455.543807,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550457.042,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.428,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550455.988,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6246063,"lon":139.6553033,"time":1585550455.648,"speed":0.004237629007548094,"bearing":164.85009765625,"altitude":80.99456787109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550455.648836,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246065,"lon":139.6553047,"time":1585550456.625,"speed":0.07032542675733566,"bearing":84.26062774658203,"altitude":80.65765380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550456.626161,"delta_ms":0},{"type":"getStatus","timestamp":1585550458.138,"event_timestamp":1585550456.638544,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550458.138,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.513,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550457.042,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246052,"lon":139.6553055,"time":1585550457.657,"speed":0.10424914211034775,"bearing":135.88685607910157,"altitude":81.180908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550457.658057,"delta_ms":0},{"type":"getStatus","timestamp":1585550459.169,"event_timestamp":1585550457.669514,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550459.169,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.512,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550458.138,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.624604,"lon":139.6553056,"time":1585550458.626,"speed":0.11473304033279419,"bearing":161.48928833007813,"altitude":81.1815185546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550458.62728,"delta_ms":0},{"type":"getStatus","timestamp":1585550460.219,"event_timestamp":1585550458.719783,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550460.219,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.593,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550459.169,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246025,"lon":139.6553054,"time":1585550459.619,"speed":0.14762520790100099,"bearing":178.53118896484376,"altitude":81.16656494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550459.6196,"delta_ms":0},{"type":"getStatus","timestamp":1585550461.27,"event_timestamp":1585550459.770952,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550461.27,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.651,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550460.219,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6246013,"lon":139.6553047,"time":1585550460.632,"speed":0.1427360475063324,"bearing":193.6077880859375,"altitude":81.12615966796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550460.632544,"delta_ms":0},{"type":"getStatus","timestamp":1585550462.333,"event_timestamp":1585550460.834826,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550462.333,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.701,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550461.27,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6246005,"lon":139.6553036,"time":1585550461.631,"speed":0.1303732991218567,"bearing":213.1717071533203,"altitude":80.81689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550461.632035,"delta_ms":0},{"type":"getStatus","timestamp":1585550463.408,"event_timestamp":1585550461.909448,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550463.408,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.777,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550462.333,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6245997,"lon":139.655303,"time":1585550462.621,"speed":0.11318551748991013,"bearing":213.96926879882813,"altitude":80.5277099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550462.621507,"delta_ms":0},{"type":"getStatus","timestamp":1585550464.472,"event_timestamp":1585550462.973756,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550464.472,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.851,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550463.408,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6245979,"lon":139.6553036,"time":1585550463.623,"speed":0.15972261130809785,"bearing":176.91671752929688,"altitude":80.6898193359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550463.623934,"delta_ms":0},{"type":"getStatus","timestamp":1585550465.544,"event_timestamp":1585550464.04744,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550465.544,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.921,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550464.472,"bearing":195.42295837402345}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.624597,"lon":139.6553043,"time":1585550464.624,"speed":0.13081558048725129,"bearing":163.96978759765626,"altitude":80.725341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550464.624639,"delta_ms":0},{"type":"getStatus","timestamp":1585550466.59,"event_timestamp":1585550465.092087,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550466.59,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.966,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550465.544,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6245958,"lon":139.6553044,"time":1585550465.618,"speed":0.12908877432346345,"bearing":170.51779174804688,"altitude":80.6878662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550465.618588,"delta_ms":0},{"type":"getStatus","timestamp":1585550467.681,"event_timestamp":1585550466.18241,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550467.681,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.063,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550466.59,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.624595,"lon":139.6553041,"time":1585550466.619,"speed":0.10525161027908325,"bearing":182.12326049804688,"altitude":80.665283203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550466.619245,"delta_ms":0},{"type":"getStatus","timestamp":1585550468.732,"event_timestamp":1585550467.232873,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550468.732,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.113,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550467.681,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6245946,"lon":139.6553044,"time":1585550467.627,"speed":0.07387778908014298,"bearing":169.66714477539063,"altitude":80.589599609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550467.628046,"delta_ms":0},{"type":"getStatus","timestamp":1585550469.788,"event_timestamp":1585550468.289766,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550469.788,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.161,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550468.732,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6245946,"lon":139.6553037,"time":1585550468.619,"speed":0.04117359220981598,"bearing":227.6705322265625,"altitude":80.37896728515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550468.619588,"delta_ms":0},{"type":"getStatus","timestamp":1585550470.878,"event_timestamp":1585550469.37957,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550470.878,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.259,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550469.788,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6245934,"lon":139.6553034,"time":1585550469.627,"speed":0.15996696054935456,"bearing":196.00320434570313,"altitude":80.4588623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550469.627594,"delta_ms":0},{"type":"getStatus","timestamp":1585550471.956,"event_timestamp":1585550470.457716,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550471.956,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.329,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550470.878,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6245913,"lon":139.6553018,"time":1585550470.625,"speed":0.5995522737503052,"bearing":196.0110321044922,"altitude":80.15435791015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550470.625377,"delta_ms":0},{"type":"getStatus","timestamp":1585550473.042,"event_timestamp":1585550471.543528,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550473.042,"speed":3.4338903427124025,"bearing":195.42295837402345,"altitude":80.68817138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.417,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550471.956,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6245848,"lon":139.6552988,"time":1585550471.632,"speed":1.2858556509017945,"bearing":196.04698181152345,"altitude":79.95770263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550471.633022,"delta_ms":0},{"type":"getStatus","timestamp":1585550474.108,"event_timestamp":1585550472.608887,"result":{"route_state":"tracking","location":{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550474.108,"speed":0.9580322504043579,"bearing":195.42295837402345,"altitude":79.95770263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3921.25927734375,"remaining_leg_duration":644.723,"step_index":0,"remaining_step_distance":8.510120391845704,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.476,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62455368041992,"lon":139.6553192138672,"time":1585550473.042,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6245714,"lon":139.6552931,"time":1585550472.661,"speed":2.1487345695495607,"bearing":196.00747680664063,"altitude":79.8941650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550472.661459,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6245496,"lon":139.6552841,"time":1585550473.622,"speed":3.0698344707489015,"bearing":196.0479278564453,"altitude":79.94775390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550473.622362,"delta_ms":0},{"type":"getStatus","timestamp":1585550475.156,"event_timestamp":1585550473.65804,"result":{"route_state":"tracking","location":{"lat":35.624515533447269,"lon":139.65530395507813,"time":1585550475.156,"speed":2.573547840118408,"bearing":195.42295837402345,"altitude":79.94775390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3916.7998046875,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":4.050731182098389,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.534,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624515533447269,"lon":139.65530395507813,"time":1585550475.156,"bearing":195.42295837402345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6245234,"lon":139.6552727,"time":1585550474.636,"speed":3.7554686069488527,"bearing":196.05491638183595,"altitude":79.72296142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550474.636321,"delta_ms":0},{"type":"getStatus","timestamp":1585550476.209,"event_timestamp":1585550474.709769,"result":{"route_state":"tracking","location":{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550476.209,"speed":3.364084482192993,"bearing":195.42295837402345,"altitude":79.72296142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.573,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550476.209,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.624494,"lon":139.6552608,"time":1585550475.625,"speed":4.236865520477295,"bearing":197.67979431152345,"altitude":79.1611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550475.625743,"delta_ms":0},{"type":"getStatus","timestamp":1585550477.246,"event_timestamp":1585550475.747613,"result":{"route_state":"tracking","location":{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550477.246,"speed":3.9051353931427,"bearing":195.42295837402345,"altitude":79.1611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.621,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550476.209,"bearing":195.42295837402345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.62445,"lon":139.6552437,"time":1585550476.623,"speed":4.979457378387451,"bearing":197.0009002685547,"altitude":78.8900146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550476.623217,"delta_ms":0},{"type":"getStatus","timestamp":1585550478.297,"event_timestamp":1585550476.800519,"result":{"route_state":"tracking","location":{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550478.297,"speed":4.624039173126221,"bearing":195.42295837402345,"altitude":78.8900146484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.674,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550477.246,"bearing":195.42295837402345}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6244035,"lon":139.6552261,"time":1585550477.622,"speed":4.68719482421875,"bearing":196.976318359375,"altitude":78.7027587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550477.62236,"delta_ms":0},{"type":"getStatus","timestamp":1585550479.402,"event_timestamp":1585550477.905923,"result":{"route_state":"tracking","location":{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550479.402,"speed":4.757387638092041,"bearing":195.42295837402345,"altitude":78.7027587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.78,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550478.297,"bearing":195.42295837402345}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6243614,"lon":139.6552107,"time":1585550478.62,"speed":4.5517096519470219,"bearing":196.99423217773438,"altitude":78.88409423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550478.621056,"delta_ms":0},{"type":"getStatus","timestamp":1585550480.493,"event_timestamp":1585550478.99862,"result":{"route_state":"tracking","location":{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550480.493,"speed":4.721498489379883,"bearing":195.42295837402345,"altitude":78.88409423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.873,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550479.402,"bearing":195.42295837402345}]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6243215,"lon":139.6551958,"time":1585550479.622,"speed":4.818091869354248,"bearing":197.00582885742188,"altitude":78.53466796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550479.622763,"delta_ms":0},{"type":"getStatus","timestamp":1585550481.56,"event_timestamp":1585550480.064803,"result":{"route_state":"tracking","location":{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550481.56,"speed":4.82789945602417,"bearing":195.42295837402345,"altitude":78.53466796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.938,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.624481201171878,"lon":139.65528869628907,"time":1585550480.493,"bearing":195.42295837402345}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6242833,"lon":139.6551846,"time":1585550480.627,"speed":5.492492198944092,"bearing":196.04815673828126,"altitude":79.14031982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550480.627435,"delta_ms":0},{"type":"getStatus","timestamp":1585550482.654,"event_timestamp":1585550481.158292,"result":{"route_state":"tracking","location":{"lat":35.624176025390628,"lon":139.6551971435547,"time":1585550482.654,"speed":5.220537185668945,"bearing":194.7212371826172,"altitude":79.14031982421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6242294,"lon":139.6551678,"time":1585550481.627,"speed":6.119589805603027,"bearing":195.04920959472657,"altitude":79.0474853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550481.627479,"delta_ms":0},{"type":"getStatus","timestamp":1585550483.722,"event_timestamp":1585550482.22424,"result":{"route_state":"tracking","location":{"lat":35.624122619628909,"lon":139.65516662597657,"time":1585550483.722,"speed":5.791086196899414,"bearing":194.7212371826172,"altitude":79.0474853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6241712,"lon":139.6551505,"time":1585550482.634,"speed":6.719122409820557,"bearing":195.00135803222657,"altitude":78.6114501953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550482.635079,"delta_ms":0},{"type":"getStatus","timestamp":1585550484.764,"event_timestamp":1585550483.265932,"result":{"route_state":"tracking","location":{"lat":35.62405014038086,"lon":139.6551513671875,"time":1585550484.764,"speed":6.435658931732178,"bearing":198.0115966796875,"altitude":78.6114501953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6241077,"lon":139.6551329,"time":1585550483.63,"speed":7.149506568908691,"bearing":194.00103759765626,"altitude":79.17572021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550483.63068,"delta_ms":0},{"type":"getStatus","timestamp":1585550485.8,"event_timestamp":1585550484.301364,"result":{"route_state":"offRoute","location":{"lat":35.62397384643555,"lon":139.65512084960938,"time":1585550485.8,"speed":6.9757609367370609,"bearing":198.0115966796875,"altitude":79.17572021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.749267578125,"remaining_leg_duration":643.723,"step_index":0,"remaining_step_distance":-0.000011920928955078125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[]},"delta_ms":1},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550484.348889,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.624044,"lon":139.6551139,"time":1585550484.696,"speed":6.85015344619751,"bearing":193.99996948242188,"altitude":79.21136474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550484.696973,"delta_ms":0},{"type":"getStatus","timestamp":1585550486.863,"event_timestamp":1585550485.364197,"result":{"route_state":"invalid","location":{"lat":35.62391662597656,"lon":139.65509033203126,"time":1585550486.863,"speed":6.92957067489624,"bearing":198.0115966796875,"altitude":79.21136474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4134.505,\"duration\":675.508,\"geometry\":\"iai}bA_|zjiG|IvCdKxBf]nIUfb@OtZ}OtbAhRxk@pRvm@m}@be@{_Afd@}ExB}c@|S}m@vYal@vXkLpGud@~Sqa@~RvDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":675.508,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4134.505,\"duration\":675.508,\"summary\":\"国道246号線, 駒沢通り\",\"steps\":[{\"distance\":98.979,\"duration\":19.233,\"geometry\":\"iai}bA_|zjiG|IvCdKxBf]nI\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.655121,35.623974],\"bearing_before\":0.0,\"bearing_after\":199.0,\"instruction\":\"南方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":98.979,\"announcement\":\"南方向です その先 右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e南方向です その先 右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":77.2,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":98.979,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":19.233,\"intersections\":[{\"location\":[139.655121,35.623974],\"bearings\":[199],\"entry\":[true],\"out\":0},{\"location\":[139.655045,35.623798],\"bearings\":[19,107,194,284],\"entry\":[false,false,true,false],\"in\":0,\"out\":2},{\"location\":[139.654984,35.623604],\"bearings\":[14,107,196],\"entry\":[false,false,true],\"in\":0,\"out\":2}]},{\"distance\":343.0,\"duration\":98.929,\"geometry\":\"}kg}bA}hzjiGUfb@OtZ}OtbAhRxk@pRvm@\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.654816,35.623119],\"bearing_before\":196.0,\"bearing_after\":271.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":323.0,\"announcement\":\"300 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.0,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":343.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":98.929,\"intersections\":[{\"location\":[139.654816,35.623119],\"bearings\":[16,99,203,271],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.654251,35.623131],\"bearings\":[8,91,271],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.653809,35.623138],\"bearings\":[91,180,287,355],\"entry\":[false,true,true,false],\"in\":0,\"out\":2},{\"location\":[139.652725,35.623409],\"bearings\":[107,176,242,358],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.652008,35.6231],\"bearings\":[62,153,243,334],\"entry\":[false,false,true,true],\"in\":0,\"out\":2}]},{\"distance\":685.0,\"duration\":145.75,\"geometry\":\"ewf}bAwjsjiGm}@be@{_Afd@}ExB}c@|S}m@vYal@vXkLpGud@~Sqa@~R\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.65126,35.622787],\"bearing_before\":243.0,\"bearing_after\":334.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":665.0,\"announcement\":\"700 メートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":329.0,\"announcement\":\"300 メートル先、左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":70.5,\"announcement\":\"左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":685.0,\"primary\":{\"text\":\"国道246号線\",\"components\":[{\"text\":\"国道246号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":145.75,\"intersections\":[{\"location\":[139.65126,35.622787],\"bearings\":[63,153,239,334],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.65065,35.623787],\"bearings\":[93,154,244,335],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.650055,35.624825],\"bearings\":[90,155,244,336],\"entry\":[false,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.649994,35.624935],\"bearings\":[63,156,335],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.649658,35.625526],\"bearings\":[89,155,258,335],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649231,35.626278],\"bearings\":[92,155,335],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.648819,35.626999],\"bearings\":[89,155,244,332],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.648682,35.627213],\"bearings\":[73,152,336],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.648346,35.627815],\"bearings\":[65,156,245,335],\"entry\":[true,false,true,true],\"in\":1,\"out\":3}]},{\"distance\":2533.0,\"duration\":271.943,\"geometry\":\"_tq}bAq`mjiGvDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.648026,35.628368],\"bearing_before\":335.0,\"bearing_after\":247.0,\"instruction\":\"左方向です。その先、国道246号線です\",\"type\":\"end of road\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":2513.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":652.0,\"announcement\":\"700 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":139.7,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":2533.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":139.7,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":271.943,\"intersections\":[{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":69.275,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.8,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":52.8,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":69.275,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":49.115,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.1,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.1,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":49.115,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":8.48,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":8.48,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[20.7,22.4,56.0,51.1,40.1,102.6,73.4,76.1,124.2,127.4,13.5,72.5,92.2,88.5,26.8,73.7,68.1,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[3.729,3.095,7.758,13.141,8.01,20.513,12.591,15.218,13.55,14.8,1.215,12.427,22.118,10.985,3.45,9.469,15.313,1.675,6.592,0.23,2.224,1.065,7.668,4.37,7.284,12.214,8.313,8.68,4.419,0.959,0.23,2.046,5.879,0.371,4.311,2.755,3.214,10.637,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.902,3.66,28.437,5.938,1.396,1.529,2.624,3.106,1.742,33.449,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.499,6.501,20.917,11.535,13.908,7.103,8.877,1.205,1.415,12.271,2.998,0.535,0.382,5.61,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6551208,35.6239738;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"198.011597,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"-SPyb7xaF-vbKkzVPr23A-DcEuwht6z9LR6zYywNKyOv8T3DaRDe0g\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550485.45889,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4133.3515625,"remaining_leg_duration":675.508,"step_index":0,"remaining_step_distance":99.0968017578125,"remaining_step_duration":19.233,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":21},{"type":"updateLocation","location":{"lat":35.623984,"lon":139.6550949,"time":1585550485.623,"speed":6.811316013336182,"bearing":193.99745178222657,"altitude":79.3612060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550485.623543,"delta_ms":0},{"type":"getStatus","timestamp":1585550487.926,"event_timestamp":1585550486.427512,"result":{"route_state":"tracking","location":{"lat":35.62384796142578,"lon":139.65505981445313,"time":1585550487.926,"speed":6.935549736022949,"bearing":199.4642791748047,"altitude":79.3612060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4118.28857421875,"remaining_leg_duration":672.508,"step_index":0,"remaining_step_distance":84.03421783447266,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.303,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"南方向です その先 右折です","announcement":"南方向です その先 右折です","remaining_step_distance":98.97899627685547,"index":0},"banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":98.97899627685547,"index":0},"key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6239245,"lon":139.6550761,"time":1585550486.716,"speed":6.593998908996582,"bearing":193.99212646484376,"altitude":79.58843994140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550486.716192,"delta_ms":0},{"type":"getStatus","timestamp":1585550488.975,"event_timestamp":1585550487.476406,"result":{"route_state":"tracking","location":{"lat":35.6237907409668,"lon":139.65504455566407,"time":1585550488.975,"speed":6.708499908447266,"bearing":194.30636596679688,"altitude":79.58843994140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4111.783203125,"remaining_leg_duration":671.508,"step_index":0,"remaining_step_distance":77.52887725830078,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":2.259,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62379837036133,"lon":139.65504455566407,"time":1585550488.838,"bearing":199.4642791748047},{"lat":35.6237907409668,"lon":139.65504455566407,"time":1585550488.975,"bearing":194.30636596679688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6238699,"lon":139.6550585,"time":1585550487.634,"speed":6.140341758728027,"bearing":193.9995880126953,"altitude":79.54852294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550487.634413,"delta_ms":0},{"type":"getStatus","timestamp":1585550490.044,"event_timestamp":1585550488.545318,"result":{"route_state":"tracking","location":{"lat":35.62373352050781,"lon":139.655029296875,"time":1585550490.044,"speed":6.375349044799805,"bearing":194.30636596679688,"altitude":79.54852294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4105.28369140625,"remaining_leg_duration":670.508,"step_index":0,"remaining_step_distance":71.02931213378906,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":2.41,"shape_index":1,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"右折です","announcement":"右折です","remaining_step_distance":77.19999694824219,"index":1},"key_points":[{"lat":35.62373352050781,"lon":139.655029296875,"time":1585550490.044,"bearing":194.30636596679688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6238187,"lon":139.6550408,"time":1585550488.624,"speed":5.96014928817749,"bearing":194.99942016601563,"altitude":79.0684814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550488.624524,"delta_ms":0},{"type":"getStatus","timestamp":1585550491.083,"event_timestamp":1585550489.58377,"result":{"route_state":"tracking","location":{"lat":35.623687744140628,"lon":139.65501403808595,"time":1585550491.083,"speed":6.113579273223877,"bearing":194.30636596679688,"altitude":79.0684814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4100.0126953125,"remaining_leg_duration":669.508,"step_index":0,"remaining_step_distance":65.75804138183594,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.459,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.623687744140628,"lon":139.65501403808595,"time":1585550491.083,"bearing":194.30636596679688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6237689,"lon":139.6550222,"time":1585550489.629,"speed":5.8732991218566898,"bearing":194.99212646484376,"altitude":78.93121337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550489.630209,"delta_ms":0},{"type":"getStatus","timestamp":1585550492.125,"event_timestamp":1585550490.625755,"result":{"route_state":"tracking","location":{"lat":35.623634338378909,"lon":139.65499877929688,"time":1585550492.125,"speed":5.931211471557617,"bearing":194.30636596679688,"altitude":78.93121337890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4093.909423828125,"remaining_leg_duration":667.508,"step_index":0,"remaining_step_distance":59.65496063232422,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":2.496,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.623634338378909,"lon":139.65499877929688,"time":1585550492.125,"bearing":194.30636596679688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6237193,"lon":139.6550053,"time":1585550490.664,"speed":5.434525012969971,"bearing":193.9904327392578,"altitude":79.3245849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550490.664271,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6236736,"lon":139.6549905,"time":1585550491.648,"speed":4.8920769691467289,"bearing":194.63507080078126,"altitude":79.09014892578125,"accuracyHorizontal":4.853000164031982,"provider":"fused"},"result":true,"event_timestamp":1585550491.648276,"delta_ms":0},{"type":"getStatus","timestamp":1585550493.157,"event_timestamp":1585550491.658303,"result":{"route_state":"tracking","location":{"lat":35.623600006103519,"lon":139.6549835205078,"time":1585550493.157,"speed":5.1592116355896,"bearing":195.7284393310547,"altitude":79.09014892578125,"accuracyHorizontal":4.853000164031982,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4089.85791015625,"remaining_leg_duration":667.508,"step_index":0,"remaining_step_distance":55.60348129272461,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.509,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62360382080078,"lon":139.6549835205078,"time":1585550493.049,"bearing":194.30636596679688},{"lat":35.623600006103519,"lon":139.6549835205078,"time":1585550493.157,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6236455,"lon":139.6549777,"time":1585550492.622,"speed":3.757446765899658,"bearing":272.73431396484377,"altitude":78.49627685546875,"accuracyHorizontal":6.159999847412109,"provider":"fused"},"result":true,"event_timestamp":1585550492.622942,"delta_ms":0},{"type":"getStatus","timestamp":1585550494.196,"event_timestamp":1585550492.698258,"result":{"route_state":"tracking","location":{"lat":35.62358474731445,"lon":139.65496826171876,"time":1585550494.196,"speed":4.2149434089660648,"bearing":195.7284393310547,"altitude":78.49627685546875,"accuracyHorizontal":6.159999847412109,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4087.75048828125,"remaining_leg_duration":666.508,"step_index":0,"remaining_step_distance":53.49605178833008,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":1.574,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62358474731445,"lon":139.65496826171876,"time":1585550494.196,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6236387,"lon":139.6549527,"time":1585550493.625,"speed":3.806000232696533,"bearing":204.223876953125,"altitude":78.02294921875,"accuracyHorizontal":7.420000076293945,"provider":"fused"},"result":true,"event_timestamp":1585550493.625719,"delta_ms":0},{"type":"getStatus","timestamp":1585550495.264,"event_timestamp":1585550493.765484,"result":{"route_state":"tracking","location":{"lat":35.623558044433597,"lon":139.65496826171876,"time":1585550495.264,"speed":3.81657075881958,"bearing":195.7284393310547,"altitude":78.02294921875,"accuracyHorizontal":7.420000076293945,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4085.00341796875,"remaining_leg_duration":666.508,"step_index":0,"remaining_step_distance":50.74877166748047,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":1.639,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623558044433597,"lon":139.65496826171876,"time":1585550495.264,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6236086,"lon":139.6549489,"time":1585550494.639,"speed":3.4567301273345949,"bearing":195.8836669921875,"altitude":77.8785400390625,"accuracyHorizontal":8.59000015258789,"provider":"fused"},"result":true,"event_timestamp":1585550494.639436,"delta_ms":0},{"type":"getStatus","timestamp":1585550496.306,"event_timestamp":1585550494.808261,"result":{"route_state":"tracking","location":{"lat":35.623531341552737,"lon":139.6549530029297,"time":1585550496.306,"speed":3.4813976287841799,"bearing":195.7284393310547,"altitude":77.8785400390625,"accuracyHorizontal":8.59000015258789,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4081.755126953125,"remaining_leg_duration":665.508,"step_index":0,"remaining_step_distance":47.50065612792969,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.667,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623531341552737,"lon":139.6549530029297,"time":1585550496.306,"bearing":195.7284393310547}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6235794,"lon":139.6549451,"time":1585550495.625,"speed":3.4723169803619386,"bearing":195.87814331054688,"altitude":77.6827392578125,"accuracyHorizontal":8.887999534606934,"provider":"fused"},"result":true,"event_timestamp":1585550495.62528,"delta_ms":0},{"type":"getStatus","timestamp":1585550497.35,"event_timestamp":1585550495.850829,"result":{"route_state":"tracking","location":{"lat":35.62350082397461,"lon":139.6549530029297,"time":1585550497.35,"speed":3.4004456996917726,"bearing":195.7284393310547,"altitude":77.6827392578125,"accuracyHorizontal":8.887999534606934,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4078.489501953125,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":44.234886169433597,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.725,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62350082397461,"lon":139.6549530029297,"time":1585550497.35,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6235513,"lon":139.6549421,"time":1585550496.627,"speed":2.7871580123901369,"bearing":199.82662963867188,"altitude":77.4178466796875,"accuracyHorizontal":9.958999633789063,"provider":"fused"},"result":true,"event_timestamp":1585550496.627318,"delta_ms":0},{"type":"getStatus","timestamp":1585550498.391,"event_timestamp":1585550496.89259,"result":{"route_state":"tracking","location":{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550498.391,"speed":2.9685044288635256,"bearing":195.7284393310547,"altitude":77.4178466796875,"accuracyHorizontal":9.958999633789063,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4075.670166015625,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":41.41552734375,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.764,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550498.391,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6235254,"lon":139.6549351,"time":1585550497.629,"speed":1.4408622980117798,"bearing":194.993896484375,"altitude":76.86260986328125,"accuracyHorizontal":8.949000358581543,"provider":"fused"},"result":true,"event_timestamp":1585550497.629229,"delta_ms":0},{"type":"getStatus","timestamp":1585550499.432,"event_timestamp":1585550497.933384,"result":{"route_state":"tracking","location":{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550499.432,"speed":2.9685044288635256,"bearing":195.7284393310547,"altitude":77.4178466796875,"accuracyHorizontal":9.958999633789063,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4075.670166015625,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":41.41552734375,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.803,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550498.391,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6235122,"lon":139.6549326,"time":1585550498.62,"speed":1.0003818273544312,"bearing":194.99525451660157,"altitude":77.0238037109375,"accuracyHorizontal":8.019000053405762,"provider":"fused"},"result":true,"event_timestamp":1585550498.620943,"delta_ms":0},{"type":"getStatus","timestamp":1585550500.474,"event_timestamp":1585550498.974994,"result":{"route_state":"tracking","location":{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550500.474,"speed":2.9685044288635256,"bearing":195.7284393310547,"altitude":77.4178466796875,"accuracyHorizontal":9.958999633789063,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4075.670166015625,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":41.41552734375,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.854,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550499.432,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6235045,"lon":139.654931,"time":1585550499.615,"speed":0.5432757139205933,"bearing":194.9146728515625,"altitude":76.73974609375,"accuracyHorizontal":6.968999862670898,"provider":"fused"},"result":true,"event_timestamp":1585550499.615918,"delta_ms":0},{"type":"getStatus","timestamp":1585550501.527,"event_timestamp":1585550500.028637,"result":{"route_state":"tracking","location":{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550501.527,"speed":2.9685044288635256,"bearing":195.7284393310547,"altitude":77.4178466796875,"accuracyHorizontal":9.958999633789063,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4075.670166015625,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":41.41552734375,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":1.912,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550500.474,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6234995,"lon":139.6549297,"time":1585550500.622,"speed":0.7898571491241455,"bearing":195.00218200683595,"altitude":76.400634765625,"accuracyHorizontal":5.99399995803833,"provider":"fused"},"result":true,"event_timestamp":1585550500.622663,"delta_ms":0},{"type":"getStatus","timestamp":1585550502.622,"event_timestamp":1585550501.123639,"result":{"route_state":"tracking","location":{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550502.622,"speed":0.7626127004623413,"bearing":195.7284393310547,"altitude":76.400634765625,"accuracyHorizontal":5.99399995803833,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4075.670166015625,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":41.41552734375,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":2.0,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623477935791019,"lon":139.65493774414063,"time":1585550501.527,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6234911,"lon":139.6549272,"time":1585550501.631,"speed":1.3275065422058106,"bearing":195.02587890625,"altitude":76.244384765625,"accuracyHorizontal":4.914000034332275,"provider":"fused"},"result":true,"event_timestamp":1585550501.631862,"delta_ms":0},{"type":"getStatus","timestamp":1585550503.702,"event_timestamp":1585550502.203192,"result":{"route_state":"tracking","location":{"lat":35.62346649169922,"lon":139.65493774414063,"time":1585550503.702,"speed":1.1055628061294556,"bearing":195.7284393310547,"altitude":76.244384765625,"accuracyHorizontal":4.914000034332275,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4074.4443359375,"remaining_leg_duration":664.508,"step_index":0,"remaining_step_distance":40.18983840942383,"remaining_step_duration":8.0,"state_message":"","in_tunnel":false,"predicted":2.071,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62346649169922,"lon":139.65493774414063,"time":1585550503.702,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6234758,"lon":139.6549227,"time":1585550502.626,"speed":2.32558012008667,"bearing":195.02574157714845,"altitude":76.08001708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550502.627498,"delta_ms":0},{"type":"getStatus","timestamp":1585550504.769,"event_timestamp":1585550503.270029,"result":{"route_state":"tracking","location":{"lat":35.623435974121097,"lon":139.65492248535157,"time":1585550504.769,"speed":1.8743780851364136,"bearing":195.7284393310547,"altitude":76.08001708984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4070.79931640625,"remaining_leg_duration":663.508,"step_index":0,"remaining_step_distance":36.54468536376953,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.143,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623435974121097,"lon":139.65492248535157,"time":1585550504.769,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6234531,"lon":139.6549161,"time":1585550503.631,"speed":2.759660482406616,"bearing":196.0011444091797,"altitude":75.85260009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550503.63159,"delta_ms":0},{"type":"getStatus","timestamp":1585550505.833,"event_timestamp":1585550504.334249,"result":{"route_state":"tracking","location":{"lat":35.6234016418457,"lon":139.6549072265625,"time":1585550505.833,"speed":2.453558921813965,"bearing":195.7284393310547,"altitude":75.85260009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.74169921875,"remaining_leg_duration":662.508,"step_index":0,"remaining_step_distance":32.48725128173828,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.202,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6234016418457,"lon":139.6549072265625,"time":1585550505.833,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6234268,"lon":139.6549086,"time":1585550504.619,"speed":3.0991098880767824,"bearing":196.00390625,"altitude":75.606689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550504.619287,"delta_ms":0},{"type":"getStatus","timestamp":1585550506.882,"event_timestamp":1585550505.384939,"result":{"route_state":"tracking","location":{"lat":35.62337112426758,"lon":139.6549072265625,"time":1585550506.882,"speed":2.892298936843872,"bearing":195.7284393310547,"altitude":75.606689453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4063.47509765625,"remaining_leg_duration":661.508,"step_index":0,"remaining_step_distance":29.22061538696289,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.263,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62337112426758,"lon":139.6549072265625,"time":1585550506.882,"bearing":195.7284393310547}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6233969,"lon":139.6548976,"time":1585550505.632,"speed":3.948927879333496,"bearing":197.00282287597657,"altitude":75.67535400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550505.632313,"delta_ms":0},{"type":"getStatus","timestamp":1585550507.927,"event_timestamp":1585550506.428217,"result":{"route_state":"tracking","location":{"lat":35.62332534790039,"lon":139.65487670898438,"time":1585550507.927,"speed":3.573481559753418,"bearing":195.7284393310547,"altitude":75.67535400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4057.811767578125,"remaining_leg_duration":660.508,"step_index":0,"remaining_step_distance":23.557247161865236,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.295,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62332534790039,"lon":139.65487670898438,"time":1585550507.927,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6233584,"lon":139.6548834,"time":1585550506.625,"speed":5.0186567306518559,"bearing":196.03355407714845,"altitude":75.38720703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550506.626019,"delta_ms":0},{"type":"getStatus","timestamp":1585550508.996,"event_timestamp":1585550507.499818,"result":{"route_state":"tracking","location":{"lat":35.623268127441409,"lon":139.6548614501953,"time":1585550508.996,"speed":4.570981025695801,"bearing":195.7284393310547,"altitude":75.38720703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4051.315185546875,"remaining_leg_duration":659.508,"step_index":0,"remaining_step_distance":17.060726165771486,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.371,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623268127441409,"lon":139.6548614501953,"time":1585550508.996,"bearing":195.7284393310547}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6233103,"lon":139.6548659,"time":1585550507.61,"speed":5.729270935058594,"bearing":196.0012664794922,"altitude":75.578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550507.610537,"delta_ms":0},{"type":"getStatus","timestamp":1585550510.033,"event_timestamp":1585550508.53417,"result":{"route_state":"tracking","location":{"lat":35.623191833496097,"lon":139.65484619140626,"time":1585550510.033,"speed":5.393259525299072,"bearing":195.7284393310547,"altitude":75.578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4042.76708984375,"remaining_leg_duration":657.508,"step_index":0,"remaining_step_distance":8.512470245361329,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":2.423,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623191833496097,"lon":139.65484619140626,"time":1585550510.033,"bearing":195.7284393310547}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6232575,"lon":139.6548463,"time":1585550508.619,"speed":6.086648464202881,"bearing":197.00697326660157,"altitude":75.54742431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550508.619321,"delta_ms":0},{"type":"getStatus","timestamp":1585550511.092,"event_timestamp":1585550509.593252,"result":{"route_state":"tracking","location":{"lat":35.623130798339847,"lon":139.65481567382813,"time":1585550511.092,"speed":5.897650718688965,"bearing":195.7284393310547,"altitude":75.54742431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4035.479736328125,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":1.2251319885253907,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.473,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.623130798339847,"lon":139.65481567382813,"time":1585550511.092,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6232035,"lon":139.6548254,"time":1585550509.646,"speed":6.168587684631348,"bearing":197.00352478027345,"altitude":75.42974853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550509.646615,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6231499,"lon":139.6548046,"time":1585550510.623,"speed":6.190075874328613,"bearing":197.99815368652345,"altitude":75.2586669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550510.624053,"delta_ms":0},{"type":"getStatus","timestamp":1585550512.141,"event_timestamp":1585550510.642762,"result":{"route_state":"tracking","location":{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550512.141,"speed":6.235947608947754,"bearing":195.7284393310547,"altitude":75.2586669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.518,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550512.141,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6230965,"lon":139.6547812,"time":1585550511.622,"speed":6.28993558883667,"bearing":199.9989471435547,"altitude":74.69110107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550511.622537,"delta_ms":0},{"type":"getStatus","timestamp":1585550513.18,"event_timestamp":1585550511.682196,"result":{"route_state":"tracking","location":{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550513.18,"speed":6.290980815887451,"bearing":195.7284393310547,"altitude":74.69110107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.558,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550512.141,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.623044,"lon":139.6547562,"time":1585550512.621,"speed":5.831521034240723,"bearing":200.99481201171876,"altitude":74.565185546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550512.622142,"delta_ms":0},{"type":"getStatus","timestamp":1585550514.225,"event_timestamp":1585550512.726228,"result":{"route_state":"tracking","location":{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550514.225,"speed":6.041568279266357,"bearing":195.7284393310547,"altitude":74.565185546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.604,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550513.18,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6229969,"lon":139.6547332,"time":1585550513.631,"speed":4.700582981109619,"bearing":201.9985809326172,"altitude":75.1451416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550513.631474,"delta_ms":0},{"type":"getStatus","timestamp":1585550515.285,"event_timestamp":1585550513.788652,"result":{"route_state":"tracking","location":{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550515.285,"speed":5.2114362716674809,"bearing":195.7284393310547,"altitude":75.1451416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.654,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550514.225,"bearing":195.7284393310547}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6229605,"lon":139.654715,"time":1585550514.621,"speed":3.860626220703125,"bearing":201.99801635742188,"altitude":74.74761962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550514.621267,"delta_ms":0},{"type":"getStatus","timestamp":1585550516.36,"event_timestamp":1585550514.862044,"result":{"route_state":"tracking","location":{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550516.36,"speed":4.399967670440674,"bearing":195.7284393310547,"altitude":74.74761962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.739,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550515.285,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6229299,"lon":139.6547001,"time":1585550515.627,"speed":3.6001553535461427,"bearing":201.9993896484375,"altitude":74.88299560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550515.627214,"delta_ms":0},{"type":"getStatus","timestamp":1585550517.425,"event_timestamp":1585550515.927885,"result":{"route_state":"tracking","location":{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550517.425,"speed":3.8723835945129396,"bearing":195.7284393310547,"altitude":74.88299560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.798,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62311935424805,"lon":139.65481567382813,"time":1585550516.36,"bearing":195.7284393310547}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6229006,"lon":139.6546854,"time":1585550516.623,"speed":3.649794101715088,"bearing":202.00100708007813,"altitude":74.8436279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550516.62357,"delta_ms":0},{"type":"getStatus","timestamp":1585550518.508,"event_timestamp":1585550517.00962,"result":{"route_state":"tracking","location":{"lat":35.622833251953128,"lon":139.6546630859375,"time":1585550518.508,"speed":3.653836965560913,"bearing":203.24053955078126,"altitude":74.8436279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6228694,"lon":139.6546702,"time":1585550517.629,"speed":4.158520221710205,"bearing":202.0511474609375,"altitude":74.8555908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550517.629676,"delta_ms":0},{"type":"getStatus","timestamp":1585550519.55,"event_timestamp":1585550518.051549,"result":{"route_state":"tracking","location":{"lat":35.622802734375,"lon":139.65464782714845,"time":1585550519.55,"speed":3.9498467445373537,"bearing":203.24053955078126,"altitude":74.8555908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6228335,"lon":139.6546509,"time":1585550518.62,"speed":4.53993558883667,"bearing":203.0357208251953,"altitude":74.77099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550518.620775,"delta_ms":0},{"type":"getStatus","timestamp":1585550520.596,"event_timestamp":1585550519.09661,"result":{"route_state":"tracking","location":{"lat":35.62275695800781,"lon":139.6546173095703,"time":1585550520.596,"speed":4.309020519256592,"bearing":203.24053955078126,"altitude":74.77099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6227955,"lon":139.6546299,"time":1585550519.619,"speed":4.659051418304443,"bearing":203.0038299560547,"altitude":74.7032470703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550519.619666,"delta_ms":0},{"type":"getStatus","timestamp":1585550521.632,"event_timestamp":1585550520.132938,"result":{"route_state":"offRoute","location":{"lat":35.62271499633789,"lon":139.65460205078126,"time":1585550521.632,"speed":4.527942180633545,"bearing":205.4049072265625,"altitude":74.7032470703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4034.254638671875,"remaining_leg_duration":656.508,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550520.180781,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6227563,"lon":139.654609,"time":1585550520.65,"speed":4.719527721405029,"bearing":203.00184631347657,"altitude":74.7061767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550520.650173,"delta_ms":0},{"type":"getStatus","timestamp":1585550522.687,"event_timestamp":1585550521.188798,"result":{"route_state":"invalid","location":{"lat":35.6226692199707,"lon":139.65457153320313,"time":1585550522.687,"speed":4.669512748718262,"bearing":205.4049072265625,"altitude":74.7061767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":1},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":4177.526,\"duration\":695.88,\"geometry\":\"srf}bAs{yjiGli@xWtSnIdKfw@bKz_A_h@zUk[fOsUhLm}@be@{_Afd@}ExB}c@|S}m@vYal@vXkLpGud@~Sqa@~RvDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJOuDpBiMhM{k@~Syj@bLuZlEiM|TnI`B\\\\dEzAl_@hMxGxBt@?d@?bGaR_EyBoC}@sPmJ\",\"weight\":695.88,\"weight_name\":\"routability\",\"legs\":[{\"distance\":4177.526,\"duration\":695.88,\"summary\":\"都道416号線, 国道246号線\",\"steps\":[{\"distance\":124.0,\"duration\":35.8,\"geometry\":\"srf}bAs{yjiGli@xWtSnI\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.654602,35.622715],\"bearing_before\":0.0,\"bearing_after\":205.0,\"instruction\":\"南西方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":124.0,\"announcement\":\"南西方向です その先 深沢不動を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e南西方向です その先 深沢不動を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":52.0,\"announcement\":\"深沢不動を右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e深沢不動を右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":124.0,\"primary\":{\"text\":\"深沢不動\",\"components\":[{\"text\":\"深沢不動\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":35.8,\"intersections\":[{\"location\":[139.654602,35.622715],\"bearings\":[205],\"entry\":[true],\"out\":0},{\"location\":[139.654205,35.622036],\"bearings\":[25,202,306],\"entry\":[false,true,false],\"in\":0,\"out\":1}]},{\"distance\":180.0,\"duration\":52.978,\"geometry\":\"osd}bAixxjiGdKfw@bKz_A\",\"name\":\"都道416号線\",\"ref\":\"都道416号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.654037,35.621704],\"bearing_before\":202.0,\"bearing_after\":255.0,\"instruction\":\"深沢不動を右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":160.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.0,\"announcement\":\"右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":180.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":52.978,\"intersections\":[{\"location\":[139.654037,35.621704],\"bearings\":[22,72,203,255],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.653137,35.62151],\"bearings\":[32,75,211,257],\"entry\":[false,false,true,true],\"in\":1,\"out\":3}]},{\"distance\":866.0,\"duration\":193.199,\"geometry\":\"e{c}bAe_ujiG_h@zUk[fOsUhLm}@be@{_Afd@}ExB}c@|S}m@vYal@vXkLpGud@~Sqa@~R\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6521,35.621315],\"bearing_before\":257.0,\"bearing_after\":336.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":846.0,\"announcement\":\"800 メートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e800 メートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":313.8,\"announcement\":\"300 メートル先、左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":67.2,\"announcement\":\"左方向です。その先、国道246号線です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左方向です。その先、国道246号線です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":866.0,\"primary\":{\"text\":\"国道246号線\",\"components\":[{\"text\":\"国道246号線\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":193.199,\"intersections\":[{\"location\":[139.6521,35.621315],\"bearings\":[77,152,255,336],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.651733,35.621971],\"bearings\":[63,156,248,335],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.651474,35.622425],\"bearings\":[63,155,334],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.65126,35.622787],\"bearings\":[63,154,239,334],\"entry\":[false,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.65065,35.623787],\"bearings\":[93,154,244,335],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.650055,35.624825],\"bearings\":[90,155,244,336],\"entry\":[false,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.649994,35.624935],\"bearings\":[63,156,335],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.649658,35.625526],\"bearings\":[89,155,258,335],\"entry\":[true,false,false,true],\"in\":1,\"out\":3},{\"location\":[139.649231,35.626278],\"bearings\":[92,155,335],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.648819,35.626999],\"bearings\":[89,155,244,332],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.648682,35.627213],\"bearings\":[73,152,336],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.648346,35.627815],\"bearings\":[65,156,245,335],\"entry\":[true,false,true,true],\"in\":1,\"out\":3}]},{\"distance\":2533.0,\"duration\":271.943,\"geometry\":\"_tq}bAq`mjiGvDdOvS~|@d@zAzE~RjArFnIxWrG`StNdd@fTls@bVhv@`\\\\rdA`Nj`@tDlJd@zAtJxWxWhv@t@vChWls@tNj`@tO`g@z[~|@d@zAzAtD~Sxl@xArFt@xBlTzj@rVjt@dKtZtJvXfq@jrBdKzUjAvDjBtDzErGhHpGfDvCxdBrxAng@ja@lExBlJvCbB|@dEvCzAz@jPlKrGvCrFxBhLvCxl@nJdOtDlJzAxRvCfIzAju@lJ\",\"name\":\"国道246号線\",\"ref\":\"国道246号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.648026,35.628368],\"bearing_before\":335.0,\"bearing_after\":247.0,\"instruction\":\"左方向です。その先、国道246号線です\",\"type\":\"end of road\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":2513.0,\"announcement\":\"国道246号線を3 キロメートル直進です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e国道246号線を3 キロメートル直進です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":652.0,\"announcement\":\"700 メートル先、左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e700 メートル先、左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":139.7,\"announcement\":\"左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":2533.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":139.7,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"\",\"components\":[{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"left\",\"straight\"],\"active\":true},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"straight\"],\"active\":false},{\"text\":\"\",\"type\":\"lane\",\"directions\":[\"right\"],\"active\":false}]}}],\"driving_side\":\"left\",\"weight\":271.943,\"intersections\":[{\"location\":[139.648026,35.628368],\"bearings\":[68,155,247],\"entry\":[false,false,true],\"in\":1,\"out\":2},{\"location\":[139.647766,35.628277],\"bearings\":[67,168,248],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646774,35.627945],\"bearings\":[68,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.646729,35.627926],\"bearings\":[63,135,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646408,35.627815],\"bearings\":[67,153,249],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.646286,35.627777],\"bearings\":[69,152,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.645889,35.627609],\"bearings\":[63,152,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.645569,35.627472],\"bearings\":[62,153,243],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.644974,35.62722],\"bearings\":[63,153,244,332,335],\"entry\":[false,true,true,false,false],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.644135,35.626881],\"bearings\":[64,153,243],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.64325,35.626511],\"bearings\":[63,152,243,329,332],\"entry\":[false,false,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.642136,35.626045],\"bearings\":[63,153,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641602,35.625805],\"bearings\":[61,158,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641418,35.625713],\"bearings\":[58,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.641373,35.625694],\"bearings\":[63,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.640976,35.625507],\"bearings\":[60,158,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.640091,35.625111],\"bearings\":[61,156,247],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640015,35.625084],\"bearings\":[67,240],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.639175,35.624695],\"bearings\":[60,152,240],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638641,35.624443],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.638,35.624176],\"bearings\":[63,146,240,321,324],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":2,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\",\"right\"]}]},{\"location\":[139.637009,35.623714],\"bearings\":[60,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.636963,35.623695],\"bearings\":[63,141,238],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.636871,35.62365],\"bearings\":[58,139,240],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.636017,35.623268],\"bearings\":[18,62,201,242],\"entry\":[true,false,false,true],\"in\":1,\"out\":3,\"lanes\":[{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]},{\"valid\":true,\"indications\":[\"straight\"]}]},{\"location\":[139.635956,35.623241],\"bearings\":[62,239],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.635254,35.622898],\"bearings\":[59,110,241],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634399,35.62252],\"bearings\":[61,190,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633957,35.622326],\"bearings\":[62,115,241],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.633545,35.622139],\"bearings\":[61,234,242],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.631699,35.621334],\"bearings\":[62,238],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.631241,35.621101],\"bearings\":[59,229],\"classes\":[\"tunnel\"],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.630875,35.620789],\"bearings\":[39,215],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629364,35.619076],\"bearings\":[35,52,215],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.628815,35.618427],\"bearings\":[35,138,206],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.628754,35.618324],\"bearings\":[26,200,220],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.62854,35.617947],\"bearings\":[31,211],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.628204,35.617409],\"bearings\":[24,197],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627853,35.616203],\"bearings\":[17,118,191],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.627808,35.61602],\"bearings\":[11,190],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.627686,35.61554],\"bearings\":[13,190],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":244.0,\"duration\":71.583,\"geometry\":\"y{v|bA{}diiGOuDpBiMhM{k@~Syj@bLuZlEiM\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.627502,35.61467],\"bearing_before\":190.0,\"bearing_after\":95.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":224.0,\"announcement\":\"200 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e200 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":51.1,\"announcement\":\"右折です その先 左折です。その先、駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 左折です。その先、駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":244.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}},{\"distanceAlongGeometry\":51.1,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"},\"sub\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":71.583,\"intersections\":[{\"location\":[139.627502,35.61467],\"bearings\":[10,95,187,282,284],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":1,\"lanes\":[{\"valid\":true,\"indications\":[\"left\",\"straight\"]},{\"valid\":false,\"indications\":[\"straight\"]},{\"valid\":false,\"indications\":[\"right\"]}]},{\"location\":[139.62854,35.614391],\"bearings\":[11,120,184,292],\"entry\":[true,true,true,false],\"in\":3,\"out\":1},{\"location\":[139.629242,35.614056],\"bearings\":[120,199,300],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629684,35.613846],\"bearings\":[119,300],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":138.0,\"duration\":49.115,\"geometry\":\"{au|bAqtiiiG|TnI`B\\\\dEzAl_@hMxGxB\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629913,35.613743],\"bearing_before\":119.0,\"bearing_after\":201.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":42.1,\"announcement\":\"左折です。その先、駒沢通りです その先 左折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です。その先、駒沢通りです その先 左折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":138.0,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}},{\"distanceAlongGeometry\":42.1,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"},\"sub\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":49.115,\"intersections\":[{\"location\":[139.629913,35.613743],\"bearings\":[23,130,201,299],\"entry\":[true,true,true,false],\"in\":3,\"out\":2},{\"location\":[139.629745,35.613392],\"bearings\":[21,194],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.62973,35.613342],\"bearings\":[14,201],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.629684,35.613243],\"bearings\":[21,200,291],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.629456,35.612724],\"bearings\":[20,199,291],\"entry\":[false,true,true],\"in\":0,\"out\":1}]},{\"distance\":36.0,\"duration\":8.48,\"geometry\":\"myr|bActhiiGt@?d@?bGaR\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629395,35.612583],\"bearing_before\":199.0,\"bearing_after\":132.0,\"instruction\":\"左折です。その先、駒沢通りです\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":36.0,\"announcement\":\"左折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e左折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":36.0,\"primary\":{\"text\":\"左折です\",\"components\":[{\"text\":\"左折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":8.48,\"intersections\":[{\"location\":[139.629395,35.612583],\"bearings\":[19,132],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":12.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":119.0,\"bearing_after\":27.0,\"instruction\":\"左折です\",\"type\":\"turn\",\"modifier\":\"left\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":22.1,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":22.1,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":12.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,122,299],\"entry\":[true,true,false],\"in\":2,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[83.7,39.9,84.3,96.4,80.2,55.7,44.7,124.2,127.4,13.5,72.5,92.2,88.5,26.8,73.7,68.1,25.6,97.0,4.7,31.5,11.8,40.5,32.8,60.7,84.8,90.1,113.3,55.2,19.5,4.7,41.5,91.5,7.5,87.4,55.9,65.2,103.4,4.7,9.7,76.1,12.2,6.3,74.1,88.0,45.5,42.7,189.6,39.6,9.3,10.2,17.5,20.7,11.6,223.0,87.7,12.7,21.5,6.2,13.0,5.8,35.8,16.8,14.7,24.8,83.2,30.0,20.8,35.9,18.7,98.2,8.3,21.7,69.7,73.7,46.4,23.7,41.9,5.7,11.8,61.4,16.7,3.0,2.1,31.2,12.0,8.5,35.5],\"duration\":[23.173,9.587,17.851,18.257,22.211,7.429,5.965,13.55,15.293,1.215,12.427,22.118,10.985,3.45,9.469,15.313,1.675,6.592,0.23,2.224,1.065,7.668,4.37,7.284,12.214,8.313,8.68,4.419,0.959,0.23,2.046,5.879,0.371,4.311,2.755,3.214,10.637,0.453,0.48,7.608,1.216,0.309,7.212,7.921,3.902,3.66,28.437,5.938,1.396,1.529,2.624,3.106,1.742,33.449,7.696,0.881,1.549,0.444,0.938,0.417,2.579,1.208,1.056,1.783,5.99,2.163,3.941,6.805,3.548,18.612,2.499,6.501,20.917,11.535,13.908,7.103,8.877,1.205,1.415,12.271,2.998,0.535,0.382,5.61,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.6546021,35.622715;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"205.404907,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"LWrBf6aUcwUr6gZp88ONrt76tNDMHXcOZrl3tb1TaMrwSOkju7Aqvw\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550521.358822,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":4175.9345703125,"remaining_leg_duration":695.881,"step_index":0,"remaining_step_distance":123.62481689453125,"remaining_step_duration":35.8,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":16},{"type":"updateLocation","location":{"lat":35.6227164,"lon":139.6545885,"time":1585550521.623,"speed":4.819226264953613,"bearing":203.00296020507813,"altitude":74.6649169921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550521.623449,"delta_ms":0},{"type":"getStatus","timestamp":1585550523.737,"event_timestamp":1585550522.237969,"result":{"route_state":"tracking","location":{"lat":35.62263107299805,"lon":139.65455627441407,"time":1585550523.737,"speed":4.783298492431641,"bearing":205.4049072265625,"altitude":74.6649169921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4165.71533203125,"remaining_leg_duration":692.881,"step_index":0,"remaining_step_distance":113.40525817871094,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":2.114,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"南西方向です その先 深沢不動を右折です","announcement":"南西方向です その先 深沢不動を右折です","remaining_step_distance":123.62481689453125,"index":0},"banner_instruction":{"primary":{"text":"深沢不動","type":"turn","modifier":"right","components":[{"type":"text","text":"深沢不動"}]},"remaining_step_distance":123.62481689453125,"index":0},"key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6226753,"lon":139.6545677,"time":1585550522.639,"speed":4.929528713226318,"bearing":203.00169372558595,"altitude":74.55548095703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550522.643855,"delta_ms":4},{"type":"getStatus","timestamp":1585550524.806,"event_timestamp":1585550523.306977,"result":{"route_state":"tracking","location":{"lat":35.62258529663086,"lon":139.65452575683595,"time":1585550524.806,"speed":4.867747783660889,"bearing":205.4049072265625,"altitude":74.55548095703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4159.9306640625,"remaining_leg_duration":690.881,"step_index":0,"remaining_step_distance":107.62103271484375,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":2.167,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62258529663086,"lon":139.65452575683595,"time":1585550524.806,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6226335,"lon":139.6545461,"time":1585550523.622,"speed":4.999948024749756,"bearing":203.0001220703125,"altitude":74.19622802734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550523.622394,"delta_ms":0},{"type":"getStatus","timestamp":1585550525.84,"event_timestamp":1585550524.341991,"result":{"route_state":"tracking","location":{"lat":35.62253189086914,"lon":139.6544952392578,"time":1585550525.84,"speed":4.998191833496094,"bearing":205.4049072265625,"altitude":74.19622802734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4153.3759765625,"remaining_leg_duration":688.881,"step_index":0,"remaining_step_distance":101.06600189208985,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":2.218,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62253189086914,"lon":139.6544952392578,"time":1585550525.84,"bearing":205.4049072265625}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6225929,"lon":139.6545248,"time":1585550524.641,"speed":4.652852535247803,"bearing":202.9886474609375,"altitude":73.8974609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550524.6416,"delta_ms":0},{"type":"getStatus","timestamp":1585550526.889,"event_timestamp":1585550525.390128,"result":{"route_state":"tracking","location":{"lat":35.622501373291019,"lon":139.65447998046876,"time":1585550526.889,"speed":4.771150588989258,"bearing":205.4049072265625,"altitude":73.8974609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4149.7138671875,"remaining_leg_duration":687.881,"step_index":0,"remaining_step_distance":97.40390014648438,"remaining_step_duration":28.0,"state_message":"","in_tunnel":false,"predicted":2.248,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.622501373291019,"lon":139.65447998046876,"time":1585550526.889,"bearing":205.4049072265625}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6225348,"lon":139.6544938,"time":1585550525.649,"speed":4.7297587394714359,"bearing":204.9983673095703,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550525.649821,"delta_ms":0},{"type":"getStatus","timestamp":1585550527.935,"event_timestamp":1585550526.4361,"result":{"route_state":"tracking","location":{"lat":35.62245178222656,"lon":139.65444946289063,"time":1585550527.935,"speed":4.940239429473877,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4143.54345703125,"remaining_leg_duration":686.881,"step_index":0,"remaining_step_distance":91.23347473144531,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":2.286,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62245178222656,"lon":139.65444946289063,"time":1585550527.935,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6225047,"lon":139.6544758,"time":1585550526.618,"speed":4.859474182128906,"bearing":206.99717712402345,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550526.619143,"delta_ms":0},{"type":"getStatus","timestamp":1585550529.006,"event_timestamp":1585550527.507368,"result":{"route_state":"tracking","location":{"lat":35.62240219116211,"lon":139.6544189453125,"time":1585550529.006,"speed":4.89716100692749,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4137.3720703125,"remaining_leg_duration":684.881,"step_index":0,"remaining_step_distance":85.0623550415039,"remaining_step_duration":25.0,"state_message":"","in_tunnel":false,"predicted":2.388,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62240219116211,"lon":139.6544189453125,"time":1585550529.006,"bearing":205.4049072265625}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6224703,"lon":139.6544525,"time":1585550527.622,"speed":4.939948081970215,"bearing":207.99960327148438,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550527.622553,"delta_ms":0},{"type":"getStatus","timestamp":1585550530.053,"event_timestamp":1585550528.55596,"result":{"route_state":"tracking","location":{"lat":35.62236785888672,"lon":139.65440368652345,"time":1585550530.053,"speed":4.895959854125977,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4133.326171875,"remaining_leg_duration":683.881,"step_index":0,"remaining_step_distance":81.01609802246094,"remaining_step_duration":23.0,"state_message":"","in_tunnel":false,"predicted":2.431,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62236785888672,"lon":139.65440368652345,"time":1585550530.053,"bearing":205.4049072265625}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6224339,"lon":139.6544264,"time":1585550528.624,"speed":5.059937953948975,"bearing":209.99913024902345,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550528.624608,"delta_ms":0},{"type":"getStatus","timestamp":1585550531.112,"event_timestamp":1585550529.613863,"result":{"route_state":"tracking","location":{"lat":35.62232971191406,"lon":139.6543731689453,"time":1585550531.112,"speed":4.970088481903076,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4128.3056640625,"remaining_leg_duration":681.881,"step_index":0,"remaining_step_distance":75.9959716796875,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":2.488,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62232971191406,"lon":139.6543731689453,"time":1585550531.112,"bearing":205.4049072265625}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6223961,"lon":139.6543986,"time":1585550529.657,"speed":5.079986572265625,"bearing":210.00003051757813,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550529.657443,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6223565,"lon":139.6543707,"time":1585550530.628,"speed":5.1998982429504398,"bearing":208.00115966796876,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550530.628715,"delta_ms":0},{"type":"getStatus","timestamp":1585550532.151,"event_timestamp":1585550530.652097,"result":{"route_state":"tracking","location":{"lat":35.622291564941409,"lon":139.65435791015626,"time":1585550532.151,"speed":5.089941024780273,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4123.8779296875,"remaining_leg_duration":680.881,"step_index":0,"remaining_step_distance":71.5682601928711,"remaining_step_duration":21.0,"state_message":"","in_tunnel":false,"predicted":1.523,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.622291564941409,"lon":139.65435791015626,"time":1585550532.151,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6223147,"lon":139.6543459,"time":1585550531.622,"speed":5.159998416900635,"bearing":204.00140380859376,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550531.622941,"delta_ms":0},{"type":"getStatus","timestamp":1585550533.186,"event_timestamp":1585550531.687367,"result":{"route_state":"tracking","location":{"lat":35.62224197387695,"lon":139.65432739257813,"time":1585550533.186,"speed":5.164092540740967,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4117.70703125,"remaining_leg_duration":678.881,"step_index":0,"remaining_step_distance":65.3973388671875,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":1.564,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62224197387695,"lon":139.65432739257813,"time":1585550533.186,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6222712,"lon":139.6543242,"time":1585550532.626,"speed":5.329857349395752,"bearing":201.00140380859376,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550532.626269,"delta_ms":0},{"type":"getStatus","timestamp":1585550534.231,"event_timestamp":1585550532.73484,"result":{"route_state":"tracking","location":{"lat":35.62220001220703,"lon":139.65431213378907,"time":1585550534.231,"speed":5.225866794586182,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4112.88916015625,"remaining_leg_duration":677.881,"step_index":0,"remaining_step_distance":60.57923126220703,"remaining_step_duration":18.0,"state_message":"","in_tunnel":false,"predicted":1.605,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62220001220703,"lon":139.65431213378907,"time":1585550534.231,"bearing":205.4049072265625}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6222258,"lon":139.6543036,"time":1585550533.62,"speed":5.398714542388916,"bearing":201.99742126464845,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550533.620771,"delta_ms":0},{"type":"getStatus","timestamp":1585550535.277,"event_timestamp":1585550533.778175,"result":{"route_state":"tracking","location":{"lat":35.62214279174805,"lon":139.65426635742188,"time":1585550535.277,"speed":5.3797101974487309,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4105.36474609375,"remaining_leg_duration":675.881,"step_index":0,"remaining_step_distance":53.05474853515625,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":1.657,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62214279174805,"lon":139.65426635742188,"time":1585550535.277,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6221809,"lon":139.654281,"time":1585550534.627,"speed":5.294183731079102,"bearing":201.98541259765626,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550534.627994,"delta_ms":0},{"type":"getStatus","timestamp":1585550536.323,"event_timestamp":1585550534.823652,"result":{"route_state":"tracking","location":{"lat":35.622100830078128,"lon":139.6542510986328,"time":1585550536.323,"speed":5.312497615814209,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4100.55029296875,"remaining_leg_duration":673.881,"step_index":0,"remaining_step_distance":48.24028015136719,"remaining_step_duration":14.0,"state_message":"","in_tunnel":false,"predicted":1.696,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"深沢不動を右折です","announcement":"深沢不動を右折です","remaining_step_distance":52.0,"index":1},"key_points":[{"lat":35.622100830078128,"lon":139.6542510986328,"time":1585550536.323,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6221388,"lon":139.6542594,"time":1585550535.637,"speed":4.530799388885498,"bearing":202.9969482421875,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550535.637739,"delta_ms":0},{"type":"getStatus","timestamp":1585550537.384,"event_timestamp":1585550535.884835,"result":{"route_state":"tracking","location":{"lat":35.62206268310547,"lon":139.6542205810547,"time":1585550537.384,"speed":4.805219650268555,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4095.5322265625,"remaining_leg_duration":672.881,"step_index":0,"remaining_step_distance":43.222328186035159,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":1.747,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62206268310547,"lon":139.6542205810547,"time":1585550537.384,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6221039,"lon":139.6542406,"time":1585550536.621,"speed":3.780587911605835,"bearing":202.99790954589845,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550536.62191,"delta_ms":0},{"type":"getStatus","timestamp":1585550538.439,"event_timestamp":1585550536.940327,"result":{"route_state":"tracking","location":{"lat":35.62204360961914,"lon":139.65420532226563,"time":1585550538.439,"speed":4.191652297973633,"bearing":205.4049072265625,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4093.021240234375,"remaining_leg_duration":671.881,"step_index":0,"remaining_step_distance":40.71125793457031,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.818,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62204360961914,"lon":139.65420532226563,"time":1585550538.439,"bearing":205.4049072265625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220767,"lon":139.6542255,"time":1585550537.623,"speed":2.7705767154693605,"bearing":202.99661254882813,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550537.623713,"delta_ms":0},{"type":"getStatus","timestamp":1585550539.477,"event_timestamp":1585550537.977529,"result":{"route_state":"tracking","location":{"lat":35.62202072143555,"lon":139.65420532226563,"time":1585550539.477,"speed":3.2710142135620119,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.557373046875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":38.24738693237305,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.854,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62203598022461,"lon":139.65420532226563,"time":1585550538.785,"bearing":205.4049072265625},{"lat":35.62202072143555,"lon":139.65420532226563,"time":1585550539.477,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220575,"lon":139.6542161,"time":1585550538.632,"speed":1.7805739641189576,"bearing":202.99508666992188,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550538.632341,"delta_ms":0},{"type":"getStatus","timestamp":1585550540.514,"event_timestamp":1585550539.015646,"result":{"route_state":"tracking","location":{"lat":35.62202072143555,"lon":139.65420532226563,"time":1585550540.514,"speed":3.2710142135620119,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.557373046875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":38.24738693237305,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.882,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62202072143555,"lon":139.65420532226563,"time":1585550539.477,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220462,"lon":139.6542109,"time":1585550539.62,"speed":1.0248825550079346,"bearing":202.90966796875,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550539.620963,"delta_ms":0},{"type":"getStatus","timestamp":1585550541.554,"event_timestamp":1585550540.054482,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550541.554,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.934,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550541.554,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220409,"lon":139.6542088,"time":1585550540.619,"speed":0.41324377059936526,"bearing":202.84889221191407,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550540.619813,"delta_ms":0},{"type":"getStatus","timestamp":1585550542.639,"event_timestamp":1585550541.139732,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550542.639,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.02,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550541.554,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220397,"lon":139.6542082,"time":1585550541.619,"speed":0.17007125914096833,"bearing":202.99191284179688,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550541.619529,"delta_ms":0},{"type":"getStatus","timestamp":1585550543.708,"event_timestamp":1585550542.20898,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550543.708,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.089,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550542.639,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220398,"lon":139.654208,"time":1585550542.616,"speed":0.17000187933444978,"bearing":203.00045776367188,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550542.617106,"delta_ms":0},{"type":"getStatus","timestamp":1585550544.77,"event_timestamp":1585550543.271499,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550544.77,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.154,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550543.708,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220408,"lon":139.6542082,"time":1585550543.623,"speed":0.02350027672946453,"bearing":241.47801208496095,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550543.623253,"delta_ms":0},{"type":"getStatus","timestamp":1585550545.819,"event_timestamp":1585550544.319447,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550545.819,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.196,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550544.77,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220419,"lon":139.6542085,"time":1585550544.624,"speed":0.0712759718298912,"bearing":7.943299293518066,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550544.624799,"delta_ms":0},{"type":"getStatus","timestamp":1585550546.861,"event_timestamp":1585550545.362629,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550546.861,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.237,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550545.819,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220424,"lon":139.6542092,"time":1585550545.647,"speed":0.07025859504938126,"bearing":35.85258483886719,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550545.648252,"delta_ms":1},{"type":"getStatus","timestamp":1585550547.922,"event_timestamp":1585550546.424184,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550547.922,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.275,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550546.861,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220426,"lon":139.6542104,"time":1585550546.662,"speed":0.08721555024385452,"bearing":63.96697998046875,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550546.66256,"delta_ms":0},{"type":"getStatus","timestamp":1585550548.985,"event_timestamp":1585550547.486502,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550548.985,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.323,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550547.922,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220431,"lon":139.654211,"time":1585550547.628,"speed":0.07875294983386994,"bearing":52.99192428588867,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550547.6283,"delta_ms":0},{"type":"getStatus","timestamp":1585550550.046,"event_timestamp":1585550548.548042,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550550.046,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.418,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550548.985,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.622042,"lon":139.6542109,"time":1585550548.623,"speed":0.05352484807372093,"bearing":154.9220428466797,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550548.624146,"delta_ms":0},{"type":"getStatus","timestamp":1585550551.104,"event_timestamp":1585550549.605278,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550551.104,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.481,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550550.046,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220414,"lon":139.6542112,"time":1585550549.672,"speed":0.06614050269126892,"bearing":158.24256896972657,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550549.6727,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.622041,"lon":139.6542111,"time":1585550550.626,"speed":0.051484186202287677,"bearing":173.93093872070313,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550550.626729,"delta_ms":0},{"type":"getStatus","timestamp":1585550552.167,"event_timestamp":1585550550.668474,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550552.167,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.541,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550551.104,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220411,"lon":139.6542107,"time":1585550551.631,"speed":0.02039441093802452,"bearing":238.98434448242188,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550551.63384,"delta_ms":1},{"type":"getStatus","timestamp":1585550553.225,"event_timestamp":1585550551.725781,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550553.225,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.594,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550552.167,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220405,"lon":139.6542105,"time":1585550552.628,"speed":0.04673287272453308,"bearing":203.27134704589845,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550552.629047,"delta_ms":0},{"type":"getStatus","timestamp":1585550554.307,"event_timestamp":1585550552.808504,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550554.307,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.679,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550553.225,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220401,"lon":139.65421,"time":1585550553.625,"speed":0.0572553388774395,"bearing":217.6663055419922,"altitude":77.69999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550553.626131,"delta_ms":0},{"type":"getStatus","timestamp":1585550555.403,"event_timestamp":1585550553.904851,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550555.403,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.778,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550554.307,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220397,"lon":139.654209,"time":1585550554.613,"speed":0.07820118963718414,"bearing":234.49913024902345,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550554.613619,"delta_ms":0},{"type":"getStatus","timestamp":1585550556.502,"event_timestamp":1585550555.002968,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550556.502,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.889,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550555.403,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220392,"lon":139.6542077,"time":1585550555.625,"speed":0.1105562373995781,"bearing":242.99472045898438,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550555.632129,"delta_ms":6},{"type":"getStatus","timestamp":1585550557.561,"event_timestamp":1585550556.061462,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550557.561,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.936,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550556.502,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220393,"lon":139.6542058,"time":1585550556.627,"speed":0.1394716054201126,"bearing":264.6960754394531,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550556.627653,"delta_ms":0},{"type":"getStatus","timestamp":1585550558.615,"event_timestamp":1585550557.116184,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550558.615,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.988,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550557.561,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220394,"lon":139.654205,"time":1585550557.621,"speed":0.10095321387052536,"bearing":267.4935302734375,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550557.621401,"delta_ms":0},{"type":"getStatus","timestamp":1585550559.671,"event_timestamp":1585550558.172534,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550559.671,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.05,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550558.615,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220388,"lon":139.6542041,"time":1585550558.621,"speed":0.09713269025087357,"bearing":244.8749542236328,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550558.621816,"delta_ms":0},{"type":"getStatus","timestamp":1585550560.758,"event_timestamp":1585550559.259609,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550560.758,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.137,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550559.671,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220386,"lon":139.6542037,"time":1585550559.625,"speed":0.06635839492082596,"bearing":247.92636108398438,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550559.6261,"delta_ms":0},{"type":"getStatus","timestamp":1585550561.838,"event_timestamp":1585550560.338945,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550561.838,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.213,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550560.758,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220384,"lon":139.6542036,"time":1585550560.642,"speed":0.040873996913433078,"bearing":231.63055419921876,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550560.642545,"delta_ms":0},{"type":"getStatus","timestamp":1585550562.918,"event_timestamp":1585550561.419411,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550562.918,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.276,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550561.838,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220383,"lon":139.6542034,"time":1585550561.618,"speed":0.03031681478023529,"bearing":231.28733825683595,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550561.618685,"delta_ms":0},{"type":"getStatus","timestamp":1585550564.0,"event_timestamp":1585550562.501286,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550564.0,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.382,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550562.918,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220386,"lon":139.654203,"time":1585550562.64,"speed":0.029791541397571565,"bearing":292.39434814453127,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550562.641721,"delta_ms":1},{"type":"getStatus","timestamp":1585550565.091,"event_timestamp":1585550563.5923,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550565.091,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.451,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550564.0,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220385,"lon":139.6542022,"time":1585550563.654,"speed":0.05287928879261017,"bearing":272.5103759765625,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550563.654358,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.622039,"lon":139.6542014,"time":1585550564.636,"speed":0.07308090478181839,"bearing":294.0321044921875,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550564.637155,"delta_ms":0},{"type":"getStatus","timestamp":1585550566.15,"event_timestamp":1585550564.650545,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550566.15,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.514,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550565.091,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220392,"lon":139.6542006,"time":1585550565.633,"speed":0.07334386557340622,"bearing":291.61322021484377,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550565.633851,"delta_ms":0},{"type":"getStatus","timestamp":1585550567.211,"event_timestamp":1585550565.712021,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550567.211,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.578,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550566.15,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220389,"lon":139.6542,"time":1585550566.636,"speed":0.05821773782372475,"bearing":263.8485107421875,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550566.637825,"delta_ms":0},{"type":"getStatus","timestamp":1585550568.271,"event_timestamp":1585550566.772971,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550568.271,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.635,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550567.211,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220383,"lon":139.6542001,"time":1585550567.625,"speed":0.04594696685671806,"bearing":207.48846435546876,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550567.62595,"delta_ms":0},{"type":"getStatus","timestamp":1585550569.365,"event_timestamp":1585550567.866535,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550569.365,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.74,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550568.271,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220382,"lon":139.6541997,"time":1585550568.626,"speed":0.03757571801543236,"bearing":229.62249755859376,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550568.627018,"delta_ms":0},{"type":"getStatus","timestamp":1585550570.447,"event_timestamp":1585550568.948753,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550570.447,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.821,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550569.365,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220388,"lon":139.6541985,"time":1585550569.622,"speed":0.08318079262971878,"bearing":288.0063781738281,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550569.623329,"delta_ms":0},{"type":"getStatus","timestamp":1585550571.536,"event_timestamp":1585550570.038447,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550571.536,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.914,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550570.447,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220392,"lon":139.6541973,"time":1585550570.627,"speed":0.1008199080824852,"bearing":290.0518798828125,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550570.627922,"delta_ms":0},{"type":"getStatus","timestamp":1585550572.623,"event_timestamp":1585550571.124055,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550572.623,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.996,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550571.536,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220392,"lon":139.6541969,"time":1585550571.621,"speed":0.060818031430244449,"bearing":284.80633544921877,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550571.621149,"delta_ms":0},{"type":"getStatus","timestamp":1585550573.7,"event_timestamp":1585550572.201945,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550573.7,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.079,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550572.623,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220397,"lon":139.654196,"time":1585550572.627,"speed":0.08407818526029587,"bearing":298.40057373046877,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550572.627634,"delta_ms":0},{"type":"getStatus","timestamp":1585550574.794,"event_timestamp":1585550573.29555,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550574.794,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.167,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550573.7,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220394,"lon":139.6541964,"time":1585550573.636,"speed":0.01108455192297697,"bearing":251.3792266845703,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550573.637051,"delta_ms":0},{"type":"getStatus","timestamp":1585550575.882,"event_timestamp":1585550574.38316,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550575.882,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.246,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550574.794,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.622039,"lon":139.6541964,"time":1585550574.632,"speed":0.02667183056473732,"bearing":190.29513549804688,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550574.632174,"delta_ms":0},{"type":"getStatus","timestamp":1585550576.946,"event_timestamp":1585550575.448497,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550576.946,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.314,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550575.882,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220398,"lon":139.6541954,"time":1585550575.625,"speed":0.06902056932449341,"bearing":307.32086181640627,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550575.625459,"delta_ms":0},{"type":"getStatus","timestamp":1585550578.01,"event_timestamp":1585550576.51159,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550578.01,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.385,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550576.946,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220399,"lon":139.6541946,"time":1585550576.634,"speed":0.06490850448608399,"bearing":289.6917419433594,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550576.63481,"delta_ms":0},{"type":"getStatus","timestamp":1585550579.097,"event_timestamp":1585550577.599191,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550579.097,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.463,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550578.01,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220396,"lon":139.6541944,"time":1585550577.668,"speed":0.03912828490138054,"bearing":258.7218322753906,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550577.66847,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220397,"lon":139.6541938,"time":1585550578.633,"speed":0.044972408562898639,"bearing":269.8585510253906,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550578.633414,"delta_ms":0},{"type":"getStatus","timestamp":1585550580.162,"event_timestamp":1585550578.66309,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550580.162,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.529,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550579.097,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220398,"lon":139.6541939,"time":1585550579.642,"speed":0.01869218982756138,"bearing":290.5945129394531,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550579.642447,"delta_ms":0},{"type":"getStatus","timestamp":1585550581.229,"event_timestamp":1585550579.730365,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550581.229,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.587,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550580.162,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220404,"lon":139.6541936,"time":1585550580.629,"speed":0.04532049968838692,"bearing":333.3068542480469,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550580.629701,"delta_ms":0},{"type":"getStatus","timestamp":1585550582.294,"event_timestamp":1585550580.796891,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550582.294,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.665,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550581.229,"bearing":202.34814453125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6220406,"lon":139.6541936,"time":1585550581.629,"speed":0.03615952283143997,"bearing":341.18023681640627,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550581.630053,"delta_ms":0},{"type":"getStatus","timestamp":1585550583.386,"event_timestamp":1585550581.888575,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550583.386,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.757,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550582.294,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.622041,"lon":139.6541932,"time":1585550582.621,"speed":0.04317333921790123,"bearing":330.7964172363281,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550582.62151,"delta_ms":0},{"type":"getStatus","timestamp":1585550584.463,"event_timestamp":1585550582.963909,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550584.463,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.842,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550583.386,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220413,"lon":139.6541928,"time":1585550583.625,"speed":0.047153692692518237,"bearing":320.6041564941406,"altitude":77.69999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550583.626046,"delta_ms":0},{"type":"getStatus","timestamp":1585550585.541,"event_timestamp":1585550584.043297,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550585.541,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.916,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550584.463,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220421,"lon":139.6541918,"time":1585550584.623,"speed":0.0938359946012497,"bearing":313.9670715332031,"altitude":75.56427001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550584.623892,"delta_ms":0},{"type":"getStatus","timestamp":1585550586.614,"event_timestamp":1585550585.115337,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550586.614,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.991,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550585.541,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220436,"lon":139.6541909,"time":1585550585.635,"speed":0.1469830423593521,"bearing":330.10552978515627,"altitude":75.4808349609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550585.63617,"delta_ms":0},{"type":"getStatus","timestamp":1585550587.7,"event_timestamp":1585550586.201777,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550587.7,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.065,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550586.614,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.622045,"lon":139.6541906,"time":1585550586.629,"speed":0.1516624540090561,"bearing":340.9786376953125,"altitude":75.5364990234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550586.629674,"delta_ms":0},{"type":"getStatus","timestamp":1585550588.77,"event_timestamp":1585550587.271613,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550588.77,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.141,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550587.7,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220461,"lon":139.6541901,"time":1585550587.639,"speed":0.13944804668426515,"bearing":340.5504150390625,"altitude":75.534423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550587.639747,"delta_ms":0},{"type":"getStatus","timestamp":1585550589.863,"event_timestamp":1585550588.364531,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550589.863,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.224,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550588.77,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220468,"lon":139.6541898,"time":1585550588.637,"speed":0.10489671677350998,"bearing":341.7099304199219,"altitude":75.57904052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550588.637836,"delta_ms":0},{"type":"getStatus","timestamp":1585550590.943,"event_timestamp":1585550589.444385,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550590.943,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.306,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550589.863,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220475,"lon":139.6541911,"time":1585550589.62,"speed":0.09760978817939758,"bearing":31.412281036376954,"altitude":75.5218505859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550589.620401,"delta_ms":0},{"type":"getStatus","timestamp":1585550592.046,"event_timestamp":1585550590.547692,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550592.046,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.426,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550590.943,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220474,"lon":139.6541926,"time":1585550590.622,"speed":0.10764259099960327,"bearing":72.97488403320313,"altitude":75.54180908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550590.622559,"delta_ms":0},{"type":"getStatus","timestamp":1585550593.112,"event_timestamp":1585550591.613617,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550593.112,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.49,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550592.046,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220469,"lon":139.654194,"time":1585550591.675,"speed":0.11327138543128967,"bearing":99.66331481933594,"altitude":75.5399169921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550591.675801,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220472,"lon":139.6541948,"time":1585550592.646,"speed":0.09165729582309723,"bearing":83.98027801513672,"altitude":75.51995849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550592.647563,"delta_ms":0},{"type":"getStatus","timestamp":1585550594.172,"event_timestamp":1585550592.673077,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550594.172,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.526,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550593.112,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220473,"lon":139.6541952,"time":1585550593.631,"speed":0.06311501562595368,"bearing":79.7606201171875,"altitude":75.6195068359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550593.631947,"delta_ms":0},{"type":"getStatus","timestamp":1585550595.23,"event_timestamp":1585550593.731625,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550595.23,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.599,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550594.172,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220476,"lon":139.654195,"time":1585550594.625,"speed":0.024404698982834817,"bearing":27.24351692199707,"altitude":75.62701416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550594.625653,"delta_ms":0},{"type":"getStatus","timestamp":1585550596.29,"event_timestamp":1585550594.791414,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550596.29,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.665,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550595.23,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220475,"lon":139.6541951,"time":1585550595.629,"speed":0.012537267990410328,"bearing":72.26228332519531,"altitude":75.57891845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550595.630197,"delta_ms":0},{"type":"getStatus","timestamp":1585550597.376,"event_timestamp":1585550595.877942,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550597.376,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.747,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550596.29,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220476,"lon":139.6541952,"time":1585550596.626,"speed":0.01371915452182293,"bearing":51.7098388671875,"altitude":75.5211181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550596.626521,"delta_ms":0},{"type":"getStatus","timestamp":1585550598.455,"event_timestamp":1585550596.956581,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550598.455,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.829,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550597.376,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220462,"lon":139.6541943,"time":1585550597.624,"speed":0.4091465473175049,"bearing":203.04063415527345,"altitude":75.5626220703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550597.625178,"delta_ms":0},{"type":"getStatus","timestamp":1585550599.544,"event_timestamp":1585550598.04528,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550599.544,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.92,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550598.455,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6220415,"lon":139.6541919,"time":1585550598.624,"speed":1.119573950767517,"bearing":204.00624084472657,"altitude":75.49957275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550598.624838,"delta_ms":0},{"type":"getStatus","timestamp":1585550600.641,"event_timestamp":1585550599.143014,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550600.641,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.017,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550599.544,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6220292,"lon":139.6541854,"time":1585550599.625,"speed":2.2542316913604738,"bearing":204.0475311279297,"altitude":75.5216064453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550599.625398,"delta_ms":0},{"type":"getStatus","timestamp":1585550601.724,"event_timestamp":1585550600.227491,"result":{"route_state":"tracking","location":{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550601.724,"speed":1.439979076385498,"bearing":202.34814453125,"altitude":77.69999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4090.131591796875,"remaining_leg_duration":670.881,"step_index":0,"remaining_step_distance":37.821815490722659,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.099,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62201690673828,"lon":139.65420532226563,"time":1585550600.641,"bearing":202.34814453125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6220067,"lon":139.6541735,"time":1585550600.65,"speed":3.2632243633270265,"bearing":204.0372772216797,"altitude":75.46942138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550600.65077,"delta_ms":0},{"type":"getStatus","timestamp":1585550602.806,"event_timestamp":1585550601.310707,"result":{"route_state":"tracking","location":{"lat":35.62196731567383,"lon":139.6541748046875,"time":1585550602.806,"speed":2.55334210395813,"bearing":202.34814453125,"altitude":75.46942138671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4084.127685546875,"remaining_leg_duration":668.881,"step_index":0,"remaining_step_distance":31.817829132080079,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":2.156,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62196731567383,"lon":139.6541748046875,"time":1585550602.806,"bearing":202.34814453125}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6219796,"lon":139.6541587,"time":1585550601.632,"speed":4.0356764793396,"bearing":204.06190490722657,"altitude":75.47216796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550601.632573,"delta_ms":0},{"type":"getStatus","timestamp":1585550603.92,"event_timestamp":1585550602.421882,"result":{"route_state":"tracking","location":{"lat":35.62191390991211,"lon":139.65414428710938,"time":1585550603.92,"speed":3.57718825340271,"bearing":202.34814453125,"altitude":75.47216796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4077.586181640625,"remaining_leg_duration":667.881,"step_index":0,"remaining_step_distance":25.276369094848634,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":2.288,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62191390991211,"lon":139.65414428710938,"time":1585550603.92,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6219458,"lon":139.6541406,"time":1585550602.631,"speed":4.422954559326172,"bearing":203.17433166503907,"altitude":75.30731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550602.631326,"delta_ms":0},{"type":"getStatus","timestamp":1585550604.959,"event_timestamp":1585550603.460681,"result":{"route_state":"tracking","location":{"lat":35.62186813354492,"lon":139.65411376953126,"time":1585550604.959,"speed":4.143627643585205,"bearing":202.34814453125,"altitude":75.30731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4071.816162109375,"remaining_leg_duration":665.881,"step_index":0,"remaining_step_distance":19.506223678588868,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.328,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62186813354492,"lon":139.65411376953126,"time":1585550604.959,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6219067,"lon":139.6541204,"time":1585550603.624,"speed":3.4059505462646486,"bearing":202.85787963867188,"altitude":75.0947265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550603.624326,"delta_ms":0},{"type":"getStatus","timestamp":1585550606.019,"event_timestamp":1585550604.520462,"result":{"route_state":"tracking","location":{"lat":35.62183380126953,"lon":139.6540985107422,"time":1585550606.019,"speed":3.8650684356689455,"bearing":202.34814453125,"altitude":75.0947265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4067.7607421875,"remaining_leg_duration":664.881,"step_index":0,"remaining_step_distance":15.450780868530274,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.395,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62183380126953,"lon":139.6540985107422,"time":1585550606.019,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6218812,"lon":139.6541072,"time":1585550604.634,"speed":1.9138206243515015,"bearing":202.86502075195313,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550604.634696,"delta_ms":0},{"type":"getStatus","timestamp":1585550607.06,"event_timestamp":1585550605.561034,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550607.06,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.426,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550607.06,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6218693,"lon":139.6541007,"time":1585550605.621,"speed":0.8277793526649475,"bearing":201.38719177246095,"altitude":75.0172119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550605.621177,"delta_ms":0},{"type":"getStatus","timestamp":1585550608.105,"event_timestamp":1585550606.606035,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550608.105,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":2.484,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550607.06,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6218654,"lon":139.6540979,"time":1585550606.656,"speed":0.2035307139158249,"bearing":201.67359924316407,"altitude":75.111572265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550606.656196,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621866,"lon":139.6540977,"time":1585550607.629,"speed":0.20161613821983338,"bearing":201.86582946777345,"altitude":75.03948974609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550607.630204,"delta_ms":0},{"type":"getStatus","timestamp":1585550609.154,"event_timestamp":1585550607.655125,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550609.154,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.525,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550608.105,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6218678,"lon":139.654097,"time":1585550608.626,"speed":0.0759940892457962,"bearing":291.3067321777344,"altitude":75.46551513671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550608.626595,"delta_ms":0},{"type":"getStatus","timestamp":1585550610.208,"event_timestamp":1585550608.708791,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550610.208,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.582,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550609.154,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6218693,"lon":139.6540956,"time":1585550609.641,"speed":0.15207362174987794,"bearing":317.71295166015627,"altitude":75.73919677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550609.641406,"delta_ms":0},{"type":"getStatus","timestamp":1585550611.263,"event_timestamp":1585550609.764094,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550611.263,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.622,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550610.208,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6218656,"lon":139.6540932,"time":1585550610.633,"speed":0.6291289329528809,"bearing":202.02947998046876,"altitude":75.7294921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550610.634098,"delta_ms":0},{"type":"getStatus","timestamp":1585550612.326,"event_timestamp":1585550610.82803,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550612.326,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.693,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550611.263,"bearing":202.34814453125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.621857,"lon":139.6540872,"time":1585550611.626,"speed":1.4774547815322877,"bearing":203.03126525878907,"altitude":75.44781494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550611.627204,"delta_ms":0},{"type":"getStatus","timestamp":1585550613.423,"event_timestamp":1585550611.924765,"result":{"route_state":"tracking","location":{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550613.423,"speed":2.6796839237213136,"bearing":202.34814453125,"altitude":75.112060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4066.97802734375,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":14.668190002441407,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.797,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621826171875,"lon":139.6540985107422,"time":1585550612.326,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6218411,"lon":139.6540783,"time":1585550612.637,"speed":2.3831074237823488,"bearing":203.0529022216797,"altitude":75.4112548828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550612.638045,"delta_ms":0},{"type":"getStatus","timestamp":1585550614.522,"event_timestamp":1585550613.026619,"result":{"route_state":"tracking","location":{"lat":35.62180709838867,"lon":139.6540985107422,"time":1585550614.522,"speed":1.8958642482757569,"bearing":202.34814453125,"altitude":75.4112548828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4065.00390625,"remaining_leg_duration":663.881,"step_index":0,"remaining_step_distance":12.694015502929688,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.885,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62180709838867,"lon":139.6540985107422,"time":1585550614.522,"bearing":202.34814453125}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6218167,"lon":139.6540646,"time":1585550613.619,"speed":3.6967930793762209,"bearing":204.06329345703126,"altitude":75.546142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550613.619964,"delta_ms":0},{"type":"getStatus","timestamp":1585550615.611,"event_timestamp":1585550614.112461,"result":{"route_state":"tracking","location":{"lat":35.621761322021487,"lon":139.65406799316407,"time":1585550615.611,"speed":3.0782971382141115,"bearing":202.34814453125,"altitude":75.546142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4059.2509765625,"remaining_leg_duration":661.881,"step_index":0,"remaining_step_distance":6.941089630126953,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.992,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621761322021487,"lon":139.65406799316407,"time":1585550615.611,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6217956,"lon":139.6540537,"time":1585550614.396,"speed":3.714895248413086,"bearing":201.9675750732422,"altitude":75.546142578125,"accuracyHorizontal":4.860000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550614.396994,"delta_ms":0},{"type":"getStatus","timestamp":1585550616.662,"event_timestamp":1585550615.163482,"result":{"route_state":"tracking","location":{"lat":35.62171936035156,"lon":139.654052734375,"time":1585550616.662,"speed":3.4937429428100588,"bearing":202.34814453125,"altitude":75.546142578125,"accuracyHorizontal":4.860000133514404,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4054.400634765625,"remaining_leg_duration":660.881,"step_index":0,"remaining_step_distance":2.090728759765625,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":2.266,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62171936035156,"lon":139.654052734375,"time":1585550616.662,"bearing":202.34814453125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6217676,"lon":139.6540372,"time":1585550615.5,"speed":3.2256786823272707,"bearing":206.48843383789063,"altitude":75.31005859375,"accuracyHorizontal":6.728000164031982,"provider":"fused"},"result":true,"event_timestamp":1585550615.500759,"delta_ms":0},{"type":"getStatus","timestamp":1585550617.707,"event_timestamp":1585550616.211911,"result":{"route_state":"tracking","location":{"lat":35.6217041015625,"lon":139.65403747558595,"time":1585550617.707,"speed":3.3213956356048586,"bearing":202.34814453125,"altitude":75.31005859375,"accuracyHorizontal":6.728000164031982,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4052.309814453125,"remaining_leg_duration":659.881,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.207,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.6217041015625,"lon":139.65403747558595,"time":1585550617.707,"bearing":202.34814453125}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6217123,"lon":139.6539836,"time":1585550616.638,"speed":5.387490272521973,"bearing":223.92127990722657,"altitude":75.257080078125,"accuracyHorizontal":6.414000034332275,"provider":"fused"},"result":true,"event_timestamp":1585550616.638296,"delta_ms":0},{"type":"getStatus","timestamp":1585550618.769,"event_timestamp":1585550617.271711,"result":{"route_state":"tracking","location":{"lat":35.621681213378909,"lon":139.65394592285157,"time":1585550618.769,"speed":4.813022136688232,"bearing":255.1127166748047,"altitude":75.257080078125,"accuracyHorizontal":6.414000034332275,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4043.642822265625,"remaining_leg_duration":657.081,"step_index":1,"remaining_step_distance":171.98538208007813,"remaining_step_duration":50.0,"state_message":"","in_tunnel":false,"predicted":2.131,"shape_index":2,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":180.0,"index":0},"key_points":[{"lat":35.6217041015625,"lon":139.65403747558595,"time":1585550617.707,"bearing":202.34814453125},{"lat":35.621681213378909,"lon":139.65394592285157,"time":1585550618.769,"bearing":255.1127166748047}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.621678,"lon":139.6539353,"time":1585550617.639,"speed":5.632466793060303,"bearing":235.88916015625,"altitude":75.18780517578125,"accuracyHorizontal":6.414000034332275,"provider":"fused"},"result":true,"event_timestamp":1585550617.639558,"delta_ms":0},{"type":"getStatus","timestamp":1585550619.813,"event_timestamp":1585550618.314644,"result":{"route_state":"tracking","location":{"lat":35.62165832519531,"lon":139.65383911132813,"time":1585550619.813,"speed":5.47910737991333,"bearing":255.1127166748047,"altitude":75.18780517578125,"accuracyHorizontal":6.414000034332275,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4033.650634765625,"remaining_leg_duration":655.081,"step_index":1,"remaining_step_distance":161.99322509765626,"remaining_step_duration":48.0,"state_message":"","in_tunnel":false,"predicted":2.174,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62165832519531,"lon":139.65383911132813,"time":1585550619.813,"bearing":255.1127166748047}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6216555,"lon":139.6538707,"time":1585550618.64,"speed":6.449609756469727,"bearing":250.99151611328126,"altitude":75.6343994140625,"accuracyHorizontal":6.728000164031982,"provider":"fused"},"result":true,"event_timestamp":1585550618.640729,"delta_ms":0},{"type":"getStatus","timestamp":1585550620.859,"event_timestamp":1585550619.361205,"result":{"route_state":"tracking","location":{"lat":35.62163543701172,"lon":139.65374755859376,"time":1585550620.859,"speed":6.144166469573975,"bearing":255.1127166748047,"altitude":75.6343994140625,"accuracyHorizontal":6.728000164031982,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4024.984375,"remaining_leg_duration":652.081,"step_index":1,"remaining_step_distance":153.32693481445313,"remaining_step_duration":45.0,"state_message":"","in_tunnel":false,"predicted":2.219,"shape_index":2,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"200 メートル先、右折です","announcement":"200 メートル先、右折です","remaining_step_distance":160.0,"index":0},"key_points":[{"lat":35.62163543701172,"lon":139.65374755859376,"time":1585550620.859,"bearing":255.1127166748047}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6216408,"lon":139.6537944,"time":1585550619.632,"speed":7.368205547332764,"bearing":256.97357177734377,"altitude":75.9332275390625,"accuracyHorizontal":6.007999897003174,"provider":"fused"},"result":true,"event_timestamp":1585550619.633042,"delta_ms":0},{"type":"getStatus","timestamp":1585550621.909,"event_timestamp":1585550620.410431,"result":{"route_state":"tracking","location":{"lat":35.62161636352539,"lon":139.6536407470703,"time":1585550621.909,"speed":6.9825568199157719,"bearing":255.1127166748047,"altitude":75.9332275390625,"accuracyHorizontal":6.007999897003174,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4015.10498046875,"remaining_leg_duration":649.081,"step_index":1,"remaining_step_distance":143.44769287109376,"remaining_step_duration":42.0,"state_message":"","in_tunnel":false,"predicted":2.277,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62161636352539,"lon":139.6536407470703,"time":1585550621.909,"bearing":255.1127166748047}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621627,"lon":139.6537074,"time":1585550620.616,"speed":8.319009780883789,"bearing":257.99896240234377,"altitude":76.3399658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550620.616593,"delta_ms":0},{"type":"getStatus","timestamp":1585550622.968,"event_timestamp":1585550621.468811,"result":{"route_state":"tracking","location":{"lat":35.62158966064453,"lon":139.6535186767578,"time":1585550622.968,"speed":7.96405029296875,"bearing":255.1127166748047,"altitude":76.3399658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":4003.666015625,"remaining_leg_duration":646.081,"step_index":1,"remaining_step_distance":132.00860595703126,"remaining_step_duration":39.0,"state_message":"","in_tunnel":false,"predicted":2.352,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62158966064453,"lon":139.6535186767578,"time":1585550622.968,"bearing":255.1127166748047}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6216113,"lon":139.6536117,"time":1585550621.611,"speed":9.32187557220459,"bearing":256.9783630371094,"altitude":76.0880126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550621.611881,"delta_ms":0},{"type":"getStatus","timestamp":1585550624.015,"event_timestamp":1585550622.516261,"result":{"route_state":"tracking","location":{"lat":35.62156295776367,"lon":139.6533966064453,"time":1585550624.015,"speed":8.922667503356934,"bearing":255.1127166748047,"altitude":76.0880126953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3992.22705078125,"remaining_leg_duration":642.081,"step_index":1,"remaining_step_distance":120.56953430175781,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":2.404,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62156295776367,"lon":139.6533966064453,"time":1585550624.015,"bearing":255.1127166748047}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6215917,"lon":139.6535071,"time":1585550622.619,"speed":10.317825317382813,"bearing":255.98646545410157,"altitude":75.669677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550622.61978,"delta_ms":0},{"type":"getStatus","timestamp":1585550625.053,"event_timestamp":1585550623.553815,"result":{"route_state":"tracking","location":{"lat":35.62153244018555,"lon":139.6532440185547,"time":1585550625.053,"speed":9.945711135864258,"bearing":255.1127166748047,"altitude":75.669677734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3978.0107421875,"remaining_leg_duration":638.081,"step_index":1,"remaining_step_distance":106.35321044921875,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":2.434,"shape_index":2,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62153244018555,"lon":139.6532440185547,"time":1585550625.053,"bearing":255.1127166748047}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6215687,"lon":139.6533916,"time":1585550623.626,"speed":11.198948860168457,"bearing":256.99884033203127,"altitude":75.3013916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550623.626833,"delta_ms":0},{"type":"getStatus","timestamp":1585550626.094,"event_timestamp":1585550624.595654,"result":{"route_state":"tracking","location":{"lat":35.62150192260742,"lon":139.65310668945313,"time":1585550626.094,"speed":10.681527137756348,"bearing":257.0115966796875,"altitude":75.3013916015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3965.1259765625,"remaining_leg_duration":634.081,"step_index":1,"remaining_step_distance":93.46864318847656,"remaining_step_duration":27.0,"state_message":"","in_tunnel":false,"predicted":2.468,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62150955200195,"lon":139.65313720703126,"time":1585550625.86,"bearing":255.1127166748047},{"lat":35.62150192260742,"lon":139.65310668945313,"time":1585550626.094,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6215464,"lon":139.653268,"time":1585550624.643,"speed":11.1802339553833,"bearing":257.000244140625,"altitude":75.7052001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550624.643251,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621524,"lon":139.6531497,"time":1585550625.62,"speed":10.780136108398438,"bearing":256.9999694824219,"altitude":75.2353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550625.62063,"delta_ms":0},{"type":"getStatus","timestamp":1585550627.136,"event_timestamp":1585550625.637258,"result":{"route_state":"tracking","location":{"lat":35.62147903442383,"lon":139.65298461914063,"time":1585550627.136,"speed":10.930895805358887,"bearing":257.0115966796875,"altitude":75.2353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3953.795654296875,"remaining_leg_duration":631.081,"step_index":1,"remaining_step_distance":82.13816833496094,"remaining_step_duration":24.0,"state_message":"","in_tunnel":false,"predicted":1.516,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62147903442383,"lon":139.65298461914063,"time":1585550627.136,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6215022,"lon":139.6530362,"time":1585550626.631,"speed":10.524866104125977,"bearing":256.007568359375,"altitude":75.22491455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550626.631223,"delta_ms":0},{"type":"getStatus","timestamp":1585550628.175,"event_timestamp":1585550626.675463,"result":{"route_state":"tracking","location":{"lat":35.621456146240237,"lon":139.65286254882813,"time":1585550628.175,"speed":10.717650413513184,"bearing":257.0115966796875,"altitude":75.22491455078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3942.460205078125,"remaining_leg_duration":628.081,"step_index":1,"remaining_step_distance":70.80268096923828,"remaining_step_duration":21.0,"state_message":"","in_tunnel":false,"predicted":1.544,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621456146240237,"lon":139.65286254882813,"time":1585550628.175,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6214799,"lon":139.6529261,"time":1585550627.627,"speed":10.243574142456055,"bearing":256.0045166015625,"altitude":75.2811279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550627.62778,"delta_ms":0},{"type":"getStatus","timestamp":1585550629.217,"event_timestamp":1585550627.717717,"result":{"route_state":"tracking","location":{"lat":35.621437072753909,"lon":139.65274047851563,"time":1585550629.217,"speed":10.499224662780762,"bearing":257.0115966796875,"altitude":75.2811279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3931.219482421875,"remaining_leg_duration":624.081,"step_index":1,"remaining_step_distance":59.56217575073242,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":1.59,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621437072753909,"lon":139.65274047851563,"time":1585550629.217,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6214586,"lon":139.6528212,"time":1585550628.622,"speed":9.36668586730957,"bearing":256.00909423828127,"altitude":75.261474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550628.622931,"delta_ms":0},{"type":"getStatus","timestamp":1585550630.252,"event_timestamp":1585550628.753777,"result":{"route_state":"tracking","location":{"lat":35.62141799926758,"lon":139.65264892578126,"time":1585550630.252,"speed":9.793537139892579,"bearing":257.0115966796875,"altitude":75.261474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3922.67041015625,"remaining_leg_duration":622.081,"step_index":1,"remaining_step_distance":51.01297378540039,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":1.63,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62141799926758,"lon":139.65264892578126,"time":1585550630.252,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6214389,"lon":139.6527253,"time":1585550629.633,"speed":8.48513412475586,"bearing":256.0076904296875,"altitude":75.135986328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550629.63377,"delta_ms":0},{"type":"getStatus","timestamp":1585550631.292,"event_timestamp":1585550629.793213,"result":{"route_state":"tracking","location":{"lat":35.62139892578125,"lon":139.6525421142578,"time":1585550631.292,"speed":8.90980052947998,"bearing":257.0115966796875,"altitude":75.135986328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3912.77490234375,"remaining_leg_duration":619.081,"step_index":1,"remaining_step_distance":41.11758041381836,"remaining_step_duration":12.0,"state_message":"","in_tunnel":false,"predicted":1.659,"shape_index":3,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"右折です","announcement":"右折です","remaining_step_distance":51.0,"index":1},"key_points":[{"lat":35.62139892578125,"lon":139.6525421142578,"time":1585550631.292,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6214215,"lon":139.6526393,"time":1585550630.674,"speed":7.854850769042969,"bearing":256.00799560546877,"altitude":75.13525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550630.682609,"delta_ms":7},{"type":"getStatus","timestamp":1585550632.344,"event_timestamp":1585550630.845609,"result":{"route_state":"tracking","location":{"lat":35.62138748168945,"lon":139.65249633789063,"time":1585550632.344,"speed":8.087401390075684,"bearing":257.0115966796875,"altitude":75.13525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3908.451904296875,"remaining_leg_duration":618.081,"step_index":1,"remaining_step_distance":36.79454040527344,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":1.67,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62138748168945,"lon":139.65249633789063,"time":1585550632.344,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6214059,"lon":139.6525608,"time":1585550631.621,"speed":6.850522994995117,"bearing":256.0200500488281,"altitude":75.04266357421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550631.621147,"delta_ms":0},{"type":"getStatus","timestamp":1585550633.395,"event_timestamp":1585550631.897129,"result":{"route_state":"tracking","location":{"lat":35.621376037597659,"lon":139.6524200439453,"time":1585550633.395,"speed":7.309778690338135,"bearing":257.0115966796875,"altitude":75.04266357421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3901.438720703125,"remaining_leg_duration":616.081,"step_index":1,"remaining_step_distance":29.78131103515625,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.774,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621376037597659,"lon":139.6524200439453,"time":1585550633.395,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213929,"lon":139.6524942,"time":1585550632.621,"speed":5.523744106292725,"bearing":256.0084533691406,"altitude":75.06243896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550632.621262,"delta_ms":0},{"type":"getStatus","timestamp":1585550634.444,"event_timestamp":1585550632.945253,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65235900878907,"time":1585550634.444,"speed":6.122115612030029,"bearing":257.0115966796875,"altitude":75.06243896484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3895.674560546875,"remaining_leg_duration":614.081,"step_index":1,"remaining_step_distance":24.01715850830078,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.823,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65235900878907,"time":1585550634.444,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213829,"lon":139.6524437,"time":1585550633.641,"speed":4.060739517211914,"bearing":256.0345764160156,"altitude":75.32904052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550633.641209,"delta_ms":0},{"type":"getStatus","timestamp":1585550635.488,"event_timestamp":1585550633.989077,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65234375,"time":1585550635.488,"speed":4.600539207458496,"bearing":257.0115966796875,"altitude":75.32904052734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3894.329833984375,"remaining_leg_duration":614.081,"step_index":1,"remaining_step_distance":22.67235565185547,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.847,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65234375,"time":1585550635.488,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213777,"lon":139.6524155,"time":1585550634.622,"speed":3.001443386077881,"bearing":256.0943908691406,"altitude":75.46539306640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550634.622611,"delta_ms":0},{"type":"getStatus","timestamp":1585550636.534,"event_timestamp":1585550635.034725,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550636.534,"speed":3.3862409591674806,"bearing":257.0115966796875,"altitude":75.46539306640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.912,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550636.534,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213734,"lon":139.6523915,"time":1585550635.617,"speed":1.8984794616699219,"bearing":256.47613525390627,"altitude":75.622314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550635.61746,"delta_ms":0},{"type":"getStatus","timestamp":1585550637.59,"event_timestamp":1585550636.091824,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550637.59,"speed":3.3862409591674806,"bearing":257.0115966796875,"altitude":75.46539306640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.973,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550636.534,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.621371,"lon":139.6523761,"time":1585550636.616,"speed":0.8088287115097046,"bearing":256.3083190917969,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550636.616858,"delta_ms":0},{"type":"getStatus","timestamp":1585550638.64,"event_timestamp":1585550637.140798,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550638.64,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.024,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550637.59,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213721,"lon":139.6523705,"time":1585550637.618,"speed":0.22406145930290223,"bearing":256.2418518066406,"altitude":76.41741943359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550637.619078,"delta_ms":0},{"type":"getStatus","timestamp":1585550639.674,"event_timestamp":1585550638.175756,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550639.674,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.056,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550638.64,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213744,"lon":139.6523716,"time":1585550638.641,"speed":0.395102322101593,"bearing":255.83505249023438,"altitude":76.854248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550638.642071,"delta_ms":0},{"type":"getStatus","timestamp":1585550640.753,"event_timestamp":1585550639.254045,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550640.753,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.112,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550639.674,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621376,"lon":139.6523739,"time":1585550639.616,"speed":0.5789479613304138,"bearing":255.7445068359375,"altitude":77.1824951171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550639.61985,"delta_ms":3},{"type":"getStatus","timestamp":1585550641.807,"event_timestamp":1585550640.308507,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550641.807,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.191,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550640.753,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213776,"lon":139.6523779,"time":1585550640.629,"speed":0.48044678568840029,"bearing":256.0107116699219,"altitude":77.2698974609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550640.630075,"delta_ms":0},{"type":"getStatus","timestamp":1585550642.9,"event_timestamp":1585550641.401735,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550642.9,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.271,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550641.807,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213775,"lon":139.6523756,"time":1585550641.643,"speed":0.4761544167995453,"bearing":255.89700317382813,"altitude":78.131103515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550641.643529,"delta_ms":0},{"type":"getStatus","timestamp":1585550643.953,"event_timestamp":1585550642.453923,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550643.953,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.31,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550642.9,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213791,"lon":139.6523744,"time":1585550642.622,"speed":0.2724781632423401,"bearing":278.9117431640625,"altitude":77.95965576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550642.62308,"delta_ms":0},{"type":"getStatus","timestamp":1585550645.008,"event_timestamp":1585550643.509121,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550645.008,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.386,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550643.953,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621381,"lon":139.6523765,"time":1585550643.621,"speed":0.14207711815834046,"bearing":1.93990159034729,"altitude":77.796630859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550643.621236,"delta_ms":0},{"type":"getStatus","timestamp":1585550646.061,"event_timestamp":1585550644.562041,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550646.061,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.44,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550645.008,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213824,"lon":139.6523789,"time":1585550644.652,"speed":0.19675108790397645,"bearing":40.07973098754883,"altitude":77.545654296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550644.652919,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213839,"lon":139.6523803,"time":1585550645.628,"speed":0.20868968963623048,"bearing":37.69667053222656,"altitude":77.13665771484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550645.628539,"delta_ms":0},{"type":"getStatus","timestamp":1585550647.14,"event_timestamp":1585550645.641061,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550647.14,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.512,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550646.061,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213844,"lon":139.6523815,"time":1585550646.624,"speed":0.15083332359790803,"bearing":49.5848388671875,"altitude":77.0751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550646.624779,"delta_ms":0},{"type":"getStatus","timestamp":1585550648.175,"event_timestamp":1585550646.675411,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550648.175,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.551,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550647.14,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213843,"lon":139.6523828,"time":1585550647.62,"speed":0.12384216487407685,"bearing":71.57252502441406,"altitude":77.00372314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550647.620262,"delta_ms":0},{"type":"getStatus","timestamp":1585550649.22,"event_timestamp":1585550647.721019,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550649.22,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.6,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550648.175,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213848,"lon":139.6523831,"time":1585550648.629,"speed":0.07845263183116913,"bearing":55.3458251953125,"altitude":76.8922119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550648.629929,"delta_ms":0},{"type":"getStatus","timestamp":1585550650.29,"event_timestamp":1585550648.790532,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550650.29,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.661,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550649.22,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621385,"lon":139.6523829,"time":1585550649.622,"speed":0.03626372665166855,"bearing":33.070194244384769,"altitude":76.85919189453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550649.622931,"delta_ms":0},{"type":"getStatus","timestamp":1585550651.354,"event_timestamp":1585550649.854922,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550651.354,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.732,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550650.29,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213852,"lon":139.6523829,"time":1585550650.619,"speed":0.029334180057048799,"bearing":11.006550788879395,"altitude":76.68365478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550650.619507,"delta_ms":0},{"type":"getStatus","timestamp":1585550652.441,"event_timestamp":1585550650.941852,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550652.441,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.822,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550651.354,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213853,"lon":139.6523831,"time":1585550651.623,"speed":0.02628733403980732,"bearing":39.09920120239258,"altitude":76.53265380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550651.623767,"delta_ms":0},{"type":"getStatus","timestamp":1585550653.506,"event_timestamp":1585550652.009451,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550653.506,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.883,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550652.441,"bearing":257.0115966796875}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6213855,"lon":139.652383,"time":1585550652.62,"speed":0.01952517032623291,"bearing":356.87481689453127,"altitude":76.608642578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550652.620365,"delta_ms":0},{"type":"getStatus","timestamp":1585550654.604,"event_timestamp":1585550653.105612,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550654.604,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.984,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550653.506,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213844,"lon":139.652382,"time":1585550653.616,"speed":0.07835846394300461,"bearing":219.2971954345703,"altitude":76.20977783203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550653.616316,"delta_ms":0},{"type":"getStatus","timestamp":1585550655.663,"event_timestamp":1585550654.16438,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550655.663,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.047,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550654.604,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213841,"lon":139.6523824,"time":1585550654.624,"speed":0.04965244606137276,"bearing":179.9768829345703,"altitude":76.3153076171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550654.624484,"delta_ms":0},{"type":"getStatus","timestamp":1585550656.743,"event_timestamp":1585550655.243642,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550656.743,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.119,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550655.663,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213834,"lon":139.652383,"time":1585550655.649,"speed":0.0675547868013382,"bearing":152.73741149902345,"altitude":76.26593017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550655.649939,"delta_ms":0},{"type":"getStatus","timestamp":1585550657.789,"event_timestamp":1585550656.291016,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550657.789,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.14,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550656.743,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213829,"lon":139.6523836,"time":1585550656.61,"speed":0.07228951901197434,"bearing":146.58482360839845,"altitude":76.10870361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550656.610413,"delta_ms":0},{"type":"getStatus","timestamp":1585550658.849,"event_timestamp":1585550657.35022,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550658.849,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.239,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550657.789,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213825,"lon":139.6523836,"time":1585550657.63,"speed":0.056621577590703967,"bearing":159.97750854492188,"altitude":75.864501953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550657.630947,"delta_ms":0},{"type":"getStatus","timestamp":1585550659.909,"event_timestamp":1585550658.410386,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550659.909,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.279,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550658.849,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213822,"lon":139.6523833,"time":1585550658.621,"speed":0.037928257137537,"bearing":189.3172149658203,"altitude":75.826416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550658.621288,"delta_ms":0},{"type":"getStatus","timestamp":1585550660.973,"event_timestamp":1585550659.474567,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550660.973,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.352,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550659.909,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213818,"lon":139.652383,"time":1585550659.612,"speed":0.047405652701854709,"bearing":206.2863311767578,"altitude":75.6998291015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550659.612334,"delta_ms":0},{"type":"getStatus","timestamp":1585550662.028,"event_timestamp":1585550660.528929,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550662.028,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.416,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550660.973,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213814,"lon":139.6523828,"time":1585550660.62,"speed":0.04815104976296425,"bearing":202.746826171875,"altitude":75.64617919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550660.620302,"delta_ms":0},{"type":"getStatus","timestamp":1585550663.081,"event_timestamp":1585550661.582326,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550663.081,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.461,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550662.028,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213809,"lon":139.652383,"time":1585550661.644,"speed":0.04983917623758316,"bearing":176.81236267089845,"altitude":75.4534912109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550661.644517,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621381,"lon":139.6523837,"time":1585550662.625,"speed":0.04284112527966499,"bearing":114.87490844726563,"altitude":75.35009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550662.625391,"delta_ms":0},{"type":"getStatus","timestamp":1585550664.136,"event_timestamp":1585550662.637216,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550664.136,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.511,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550663.081,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213806,"lon":139.6523843,"time":1585550663.628,"speed":0.05349745601415634,"bearing":122.28700256347656,"altitude":74.91119384765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550663.628791,"delta_ms":0},{"type":"getStatus","timestamp":1585550665.186,"event_timestamp":1585550663.686806,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550665.186,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.558,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550664.136,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213802,"lon":139.65238539999999,"time":1585550664.627,"speed":0.0882507935166359,"bearing":115.564208984375,"altitude":74.87420654296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550664.627893,"delta_ms":0},{"type":"getStatus","timestamp":1585550666.235,"event_timestamp":1585550664.736995,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550666.235,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.608,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550665.186,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213801,"lon":139.6523858,"time":1585550665.623,"speed":0.06126481667160988,"bearing":116.95995330810547,"altitude":74.96405029296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550665.623391,"delta_ms":0},{"type":"getStatus","timestamp":1585550667.29,"event_timestamp":1585550665.791371,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550667.29,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.667,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550666.235,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213798,"lon":139.6523863,"time":1585550666.612,"speed":0.05675220862030983,"bearing":119.78753662109375,"altitude":74.9056396484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550666.613047,"delta_ms":0},{"type":"getStatus","timestamp":1585550668.341,"event_timestamp":1585550666.842001,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550668.341,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.729,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550667.29,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213797,"lon":139.652387,"time":1585550667.623,"speed":0.05817359685897827,"bearing":110.58238220214844,"altitude":74.691650390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550667.623733,"delta_ms":0},{"type":"getStatus","timestamp":1585550669.409,"event_timestamp":1585550667.910068,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550669.409,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.786,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550668.341,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213795,"lon":139.6523841,"time":1585550668.623,"speed":0.4299061596393585,"bearing":254.99700927734376,"altitude":74.73272705078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550668.624158,"delta_ms":0},{"type":"getStatus","timestamp":1585550670.499,"event_timestamp":1585550669.000597,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550670.499,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.876,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550669.409,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213787,"lon":139.6523774,"time":1585550669.619,"speed":1.0749403238296509,"bearing":255.93785095214845,"altitude":74.89349365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550669.619468,"delta_ms":0},{"type":"getStatus","timestamp":1585550671.585,"event_timestamp":1585550670.086126,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550671.585,"speed":1.3380272388458253,"bearing":257.0115966796875,"altitude":75.78387451171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.966,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550670.499,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213763,"lon":139.6523626,"time":1585550670.619,"speed":2.0789732933044435,"bearing":255.93069458007813,"altitude":75.0025634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550670.619218,"delta_ms":0},{"type":"getStatus","timestamp":1585550672.683,"event_timestamp":1585550671.184986,"result":{"route_state":"tracking","location":{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550672.683,"speed":1.620634913444519,"bearing":257.0115966796875,"altitude":75.0025634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3892.98388671875,"remaining_leg_duration":613.081,"step_index":1,"remaining_step_distance":21.32636260986328,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":2.064,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621360778808597,"lon":139.65232849121095,"time":1585550671.585,"bearing":257.0115966796875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6213717,"lon":139.6523367,"time":1585550671.637,"speed":3.305720806121826,"bearing":255.82565307617188,"altitude":74.94580078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550671.637598,"delta_ms":0},{"type":"getStatus","timestamp":1585550673.753,"event_timestamp":1585550672.256309,"result":{"route_state":"tracking","location":{"lat":35.62135314941406,"lon":139.65228271484376,"time":1585550673.753,"speed":2.5957953929901125,"bearing":257.0115966796875,"altitude":74.94580078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3888.756103515625,"remaining_leg_duration":612.081,"step_index":1,"remaining_step_distance":17.09868621826172,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":2.116,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62135314941406,"lon":139.65228271484376,"time":1585550673.753,"bearing":257.0115966796875}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6213641,"lon":139.6522908,"time":1585550672.612,"speed":4.564878940582275,"bearing":256.9595947265625,"altitude":74.8494873046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550672.612215,"delta_ms":0},{"type":"getStatus","timestamp":1585550674.842,"event_timestamp":1585550673.343291,"result":{"route_state":"tracking","location":{"lat":35.621341705322269,"lon":139.6522216796875,"time":1585550674.842,"speed":3.9000439643859865,"bearing":257.0115966796875,"altitude":74.8494873046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3883.088134765625,"remaining_leg_duration":610.081,"step_index":1,"remaining_step_distance":11.430694580078125,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":2.23,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621341705322269,"lon":139.6522216796875,"time":1585550674.842,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.621355200000007,"lon":139.6522356,"time":1585550673.65,"speed":5.69601583480835,"bearing":256.99462890625,"altitude":74.94598388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550673.650288,"delta_ms":0},{"type":"getStatus","timestamp":1585550675.898,"event_timestamp":1585550674.399635,"result":{"route_state":"tracking","location":{"lat":35.62131881713867,"lon":139.65211486816407,"time":1585550675.898,"speed":5.223555088043213,"bearing":257.0115966796875,"altitude":74.94598388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3873.09814453125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":1.4408340454101563,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.248,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62131881713867,"lon":139.65211486816407,"time":1585550675.898,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213418,"lon":139.652165,"time":1585550674.646,"speed":6.608945369720459,"bearing":255.99937438964845,"altitude":75.15045166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550674.646528,"delta_ms":0},{"type":"getStatus","timestamp":1585550676.953,"event_timestamp":1585550675.453978,"result":{"route_state":"tracking","location":{"lat":35.621315002441409,"lon":139.652099609375,"time":1585550676.953,"speed":6.2102861404418949,"bearing":257.0115966796875,"altitude":75.15045166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.307,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621315002441409,"lon":139.652099609375,"time":1585550676.953,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213259,"lon":139.652087,"time":1585550675.617,"speed":7.5283589363098148,"bearing":255.99803161621095,"altitude":75.30731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550675.618009,"delta_ms":0},{"type":"getStatus","timestamp":1585550678.0,"event_timestamp":1585550676.500838,"result":{"route_state":"tracking","location":{"lat":35.621315002441409,"lon":139.652099609375,"time":1585550678.0,"speed":7.198770046234131,"bearing":257.0115966796875,"altitude":75.30731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.383,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621315002441409,"lon":139.652099609375,"time":1585550676.953,"bearing":257.0115966796875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6213092,"lon":139.6520008,"time":1585550676.627,"speed":8.00823974609375,"bearing":256.99700927734377,"altitude":75.57080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550676.628102,"delta_ms":0},{"type":"getStatus","timestamp":1585550679.044,"event_timestamp":1585550677.546624,"result":{"route_state":"tracking","location":{"lat":35.621315002441409,"lon":139.652099609375,"time":1585550679.044,"speed":7.800044059753418,"bearing":257.0115966796875,"altitude":75.57080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.417,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621315002441409,"lon":139.652099609375,"time":1585550678.0,"bearing":257.0115966796875}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6212932,"lon":139.6519107,"time":1585550677.624,"speed":7.810947895050049,"bearing":257.0013732910156,"altitude":75.7359619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550677.624826,"delta_ms":0},{"type":"getStatus","timestamp":1585550680.119,"event_timestamp":1585550678.619818,"result":{"route_state":"tracking","location":{"lat":35.62123107910156,"lon":139.65170288085938,"time":1585550680.119,"speed":7.867559432983398,"bearing":256.54742431640627,"altitude":75.7359619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6212773,"lon":139.6518253,"time":1585550678.666,"speed":7.6825761795043949,"bearing":257.00408935546877,"altitude":75.9036865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550678.666994,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6212615,"lon":139.6517436,"time":1585550679.627,"speed":7.2546000480651859,"bearing":256.00927734375,"altitude":76.21783447265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550679.627816,"delta_ms":0},{"type":"getStatus","timestamp":1585550681.159,"event_timestamp":1585550679.659926,"result":{"route_state":"tracking","location":{"lat":35.6212158203125,"lon":139.651611328125,"time":1585550681.159,"speed":7.562730312347412,"bearing":256.54742431640627,"altitude":76.21783447265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6212459,"lon":139.6516671,"time":1585550680.628,"speed":7.120151042938232,"bearing":256.0002136230469,"altitude":76.5179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550680.628282,"delta_ms":0},{"type":"getStatus","timestamp":1585550682.203,"event_timestamp":1585550680.703938,"result":{"route_state":"tracking","location":{"lat":35.6212043762207,"lon":139.65155029296876,"time":1585550682.203,"speed":7.260990619659424,"bearing":256.22930908203127,"altitude":76.5179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6212297,"lon":139.6515928,"time":1585550681.62,"speed":7.319887161254883,"bearing":255.99990844726563,"altitude":75.9617919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550681.621101,"delta_ms":0},{"type":"getStatus","timestamp":1585550683.272,"event_timestamp":1585550681.773255,"result":{"route_state":"offRoute","location":{"lat":35.621185302734378,"lon":139.65147399902345,"time":1585550683.272,"speed":7.287077903747559,"bearing":256.22930908203127,"altitude":75.9617919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":3871.657470703125,"remaining_leg_duration":607.081,"step_index":1,"remaining_step_distance":-0.00000762939453125,"remaining_step_duration":0.0,"state_message":"from_mpp","in_tunnel":false,"predicted":0.0,"shape_index":3,"intersection_index":1,"road_name":"","key_points":[]},"delta_ms":1},{"type":"setRoute","route":"{}","route_index":0,"leg_index":0,"event_timestamp":1585550681.860825,"result":{"route_state":"invalid","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHorizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"no legs within the route.","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6212126,"lon":139.6515143,"time":1585550682.627,"speed":7.667337417602539,"bearing":254.99623107910157,"altitude":75.935791015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550682.627925,"delta_ms":0},{"type":"getStatus","timestamp":1585550684.37,"event_timestamp":1585550682.871497,"result":{"route_state":"invalid","location":{"lat":35.62117004394531,"lon":139.65138244628907,"time":1585550684.37,"speed":7.499286651611328,"bearing":256.22930908203127,"altitude":75.935791015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":0.0,"remaining_leg_duration":0.0,"step_index":0,"remaining_step_distance":0.0,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"都道416号線","key_points":[]},"delta_ms":0},{"type":"setRoute","route":"{\"routeIndex\":\"0\",\"distance\":2567.959,\"duration\":631.354,\"geometry\":\"asc}bAaxsjiG~Ihv@nCvW`MvaAdK|}@dEvX|Dp\\\\bG`g@`C|T`Hvm@xG~g@|Ihv@rGtZbF|T~CfMxCnJzE`QvDjLxGlJpGpHpCvC~HlJ|JjLzKhM`R|Sbe@~g@|@xCld@pp@hf@ju@jL`RtNzUbGlJn]zk@xCtDhMro@|Ibf@fDbQtJj`@pGjLvDrElEvDrFxBfIxBlE\\\\lE?jF?lE]zK]~C}@pMuDrF{AvH{AnI{@pCz@tDzAvDvC`CxCpBtDjAvChBrFzLn^d@zArFbQlJp\\\\}EhM}IxVoc@dmAkUrp@aCrF_EyBoC}@sPmJ\",\"weight\":631.354,\"weight_name\":\"routability\",\"legs\":[{\"distance\":2567.959,\"duration\":631.354,\"summary\":\"都道416号線, 駒沢通り\",\"steps\":[{\"distance\":2221.433,\"duration\":545.583,\"geometry\":\"asc}bAaxsjiG~Ihv@nCvW`MvaAdK|}@dEvX|Dp\\\\bG`g@`C|T`Hvm@xG~g@|Ihv@rGtZbF|T~CfMxCnJzE`QvDjLxGlJpGpHpCvC~HlJ|JjLzKhM`R|Sbe@~g@|@xCld@pp@hf@ju@jL`RtNzUbGlJn]zk@xCtDhMro@|Ibf@fDbQtJj`@pGjLvDrElEvDrFxBfIxBlE\\\\lE?jF?lE]zK]~C}@pMuDrF{AvH{AnI{@pCz@tDzAvDvC`CxCpBtDjAvChBrFzLn^d@zArFbQlJp\\\\\",\"name\":\"都道416号線\",\"ref\":\"都道416号線\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.651474,35.621185],\"bearing_before\":0.0,\"bearing_after\":256.0,\"instruction\":\"都道416号線を西方向です\",\"type\":\"depart\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":2221.433,\"announcement\":\"都道416号線を西方向に2 キロメートルです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e都道416号線を西方向に2 キロメートルです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":285.0,\"announcement\":\"300 メートル先、右方向 です。その先駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、右方向 です。その先駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":61.1,\"announcement\":\"右方向 です。その先駒沢通りです\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右方向 です。その先駒沢通りです\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":2221.433,\"primary\":{\"text\":\"駒沢通り\",\"components\":[{\"text\":\"駒沢通り\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":545.583,\"intersections\":[{\"location\":[139.651474,35.621185],\"bearings\":[256],\"entry\":[true],\"out\":0},{\"location\":[139.650589,35.62101],\"bearings\":[76,163,257],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.650192,35.620937],\"bearings\":[77,175,255],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.649124,35.620712],\"bearings\":[75,134,257,332],\"entry\":[false,true,true,false],\"in\":0,\"out\":2},{\"location\":[139.648117,35.620518],\"bearings\":[77,139,254,345],\"entry\":[false,false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647705,35.620419],\"bearings\":[74,145,256],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.647232,35.620323],\"bearings\":[76,256,349],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.64624,35.620129],\"bearings\":[77,257,339],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.645493,35.619984],\"bearings\":[77,158,255,339],\"entry\":[false,true,true,false],\"in\":0,\"out\":2},{\"location\":[139.644836,35.619843],\"bearings\":[75,163,256,341],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.643951,35.619667],\"bearings\":[76,169,248,336],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.643158,35.619415],\"bearings\":[68,169,246,327],\"entry\":[false,true,true,false],\"in\":0,\"out\":2},{\"location\":[139.642746,35.619259],\"bearings\":[64,168,245],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.642242,35.619057],\"bearings\":[61,146,226,324],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.641907,35.618778],\"bearings\":[41,94,163,221,338],\"entry\":[false,false,true,true,false],\"in\":0,\"out\":3},{\"location\":[139.64183,35.618706],\"bearings\":[41,175,223,336],\"entry\":[false,false,true,true],\"in\":0,\"out\":2},{\"location\":[139.641647,35.618546],\"bearings\":[43,222,327],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.641434,35.618355],\"bearings\":[42,222,318],\"entry\":[false,true,false],\"in\":0,\"out\":1},{\"location\":[139.641205,35.618149],\"bearings\":[42,87,222],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640869,35.617844],\"bearings\":[42,110,142,221,314],\"entry\":[false,true,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.640213,35.617233],\"bearings\":[41,125,244],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.640137,35.617203],\"bearings\":[64,177,227,314],\"entry\":[false,false,true,false],\"in\":0,\"out\":2},{\"location\":[139.639343,35.616604],\"bearings\":[47,138,228,317],\"entry\":[false,false,true,true],\"in\":0,\"out\":2},{\"location\":[139.638474,35.615974],\"bearings\":[48,137,229,318],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.638168,35.615761],\"bearings\":[49,145,230],\"entry\":[false,false,true],\"in\":0,\"out\":2},{\"location\":[139.637802,35.615509],\"bearings\":[50,229,327],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.637619,35.615379],\"bearings\":[49,138,230,331],\"entry\":[false,true,true,true],\"in\":0,\"out\":2},{\"location\":[139.636902,35.614891],\"bearings\":[50,159,220,224,341],\"entry\":[false,true,true,true,false],\"in\":0,\"out\":3},{\"location\":[139.63681,35.614815],\"bearings\":[44,46,159,250,341],\"entry\":[false,true,false,true,true],\"in\":0,\"out\":3},{\"location\":[139.636032,35.614586],\"bearings\":[70,251,341],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.635406,35.61441],\"bearings\":[71,182,250],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.635117,35.614326],\"bearings\":[70,247,349],\"entry\":[false,true,false],\"in\":0,\"out\":1},{\"location\":[139.634583,35.61414],\"bearings\":[11,67,232,297],\"entry\":[false,false,true,true],\"in\":1,\"out\":2},{\"location\":[139.634048,35.613522],\"bearings\":[19,184,298],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.634033,35.613316],\"bearings\":[4,101,180],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.634033,35.613197],\"bearings\":[0,176,270],\"entry\":[false,true,false],\"in\":0,\"out\":1},{\"location\":[139.634094,35.612808],\"bearings\":[72,161,349],\"entry\":[true,true,false],\"in\":2,\"out\":1},{\"location\":[139.633789,35.61166],\"bearings\":[60,152,242,327],\"entry\":[false,false,true,true],\"in\":0,\"out\":2},{\"location\":[139.633286,35.611439],\"bearings\":[62,243],\"entry\":[false,true],\"in\":0,\"out\":1},{\"location\":[139.63324,35.61142],\"bearings\":[63,243,321],\"entry\":[false,true,true],\"in\":0,\"out\":1},{\"location\":[139.63295,35.611298],\"bearings\":[63,245],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":290.0,\"duration\":65.989,\"geometry\":\"s}o|bAwtniiG}EhM}IxVoc@dmAkUrp@aCrF\",\"name\":\"駒沢通り\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.632477,35.611115],\"bearing_before\":245.0,\"bearing_after\":301.0,\"instruction\":\"右方向 です。その先駒沢通りです\",\"type\":\"continue\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":270.0,\"announcement\":\"300 メートル先、右折です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e300 メートル先、右折です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"},{\"distanceAlongGeometry\":65.9,\"announcement\":\"右折です その先 まもなく目的地に到着します\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e右折です その先 まもなく目的地に到着します\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":290.0,\"primary\":{\"text\":\"右折です\",\"components\":[{\"text\":\"右折です\",\"type\":\"text\"}],\"type\":\"turn\",\"modifier\":\"right\"}}],\"driving_side\":\"left\",\"weight\":65.989,\"intersections\":[{\"location\":[139.632477,35.611115],\"bearings\":[65,146,239,301],\"entry\":[false,true,true,true],\"in\":0,\"out\":3},{\"location\":[139.632248,35.611225],\"bearings\":[32,121,300],\"entry\":[true,false,true],\"in\":1,\"out\":2},{\"location\":[139.631866,35.611401],\"bearings\":[120,244,300],\"entry\":[false,true,true],\"in\":0,\"out\":2},{\"location\":[139.630615,35.611984],\"bearings\":[23,120,206,299],\"entry\":[true,false,true,true],\"in\":1,\"out\":3},{\"location\":[139.629822,35.612343],\"bearings\":[119,303],\"entry\":[false,true],\"in\":0,\"out\":1}]},{\"distance\":56.526,\"duration\":19.783,\"geometry\":\"mnr|bAegiiiG_EyBoC}@sPmJ\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.6297,35.612408],\"bearing_before\":303.0,\"bearing_after\":27.0,\"instruction\":\"右折です\",\"type\":\"turn\",\"modifier\":\"right\"},\"voiceInstructions\":[{\"distanceAlongGeometry\":14.3,\"announcement\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"ssmlAnnouncement\":\"\\u003cspeak\\u003e\\u003camazon:effect name\\u003d\\\"drc\\\"\\u003e\\u003cprosody rate\\u003d\\\"1.08\\\"\\u003e日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\\u003c/prosody\\u003e\\u003c/amazon:effect\\u003e\\u003c/speak\\u003e\"}],\"bannerInstructions\":[{\"distanceAlongGeometry\":14.3,\"primary\":{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"components\":[{\"text\":\"日本, 東京都東京都世田谷区玉川2丁目14番19\",\"type\":\"text\"}],\"type\":\"arrive\",\"modifier\":\"left\"}}],\"driving_side\":\"left\",\"weight\":19.783,\"intersections\":[{\"location\":[139.6297,35.612408],\"bearings\":[27,123,298],\"entry\":[true,false,true],\"in\":1,\"out\":0},{\"location\":[139.629761,35.612503],\"bearings\":[19,207],\"entry\":[true,false],\"in\":1,\"out\":0},{\"location\":[139.629791,35.612576],\"bearings\":[28,199],\"entry\":[true,false],\"in\":1,\"out\":0}]},{\"distance\":0.0,\"duration\":0.0,\"geometry\":\"qjs|bAkxiiiG??\",\"name\":\"\",\"mode\":\"driving\",\"maneuver\":{\"location\":[139.629974,35.612858],\"bearing_before\":28.0,\"bearing_after\":0.0,\"instruction\":\"日本, 東京都東京都世田谷区玉川2丁目14番19に到着しました。目的地は左側です\",\"type\":\"arrive\",\"modifier\":\"left\"},\"voiceInstructions\":[],\"bannerInstructions\":[],\"driving_side\":\"left\",\"weight\":0.0,\"intersections\":[{\"location\":[139.629974,35.612858],\"bearings\":[208],\"entry\":[true],\"in\":0}]}],\"annotation\":{\"distance\":[82.4,36.8,99.8,93.7,38.9,44.1,59.8,32.6,69.6,61.4,82.4,42.9,34.2,22.6,18.6,29.0,21.9,22.8,20.6,10.6,24.3,28.7,30.9,45.6,90.2,7.7,98.0,105.4,36.4,43.4,22.0,84.7,11.9,74.9,59.9,27.9,52.6,24.6,14.0,14.1,14.7,19.1,11.5,11.5,13.2,11.5,23.0,9.3,27.2,14.2,17.9,18.9,8.5,11.0,12.3,10.0,10.5,8.1,12.5,51.8,4.7,29.5,47.4,24.1,39.7,130.6,82.2,13.2,12.0,8.5,35.5],\"duration\":[9.573,4.568,22.466,19.836,6.665,7.217,13.447,7.328,15.65,13.006,12.903,7.715,6.159,3.866,3.192,6.137,4.628,5.48,4.944,0.956,4.869,3.829,5.855,6.563,17.097,1.026,18.565,34.487,7.718,9.191,5.275,27.706,1.068,13.481,9.374,4.011,7.577,3.286,1.873,1.886,1.956,2.544,1.599,1.588,1.58,1.663,3.308,1.344,6.527,3.41,4.295,4.533,2.047,2.64,2.954,2.397,2.508,1.945,3.011,8.477,1.048,6.648,10.668,5.103,8.925,21.363,12.324,1.188,1.436,1.023,4.263],\"congestion\":[\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\",\"unknown\"]}}],\"routeOptions\":{\"baseUrl\":\"https://api.mapbox.com\",\"user\":\"mapbox\",\"profile\":\"driving-traffic\",\"coordinates\":\"139.651474,35.6211853;139.629888,35.6129\",\"alternatives\":true,\"language\":\"ja\",\"bearings\":\"256.229309,90;\",\"continue_straight\":false,\"roundabout_exits\":false,\"geometries\":\"polyline6\",\"overview\":\"full\",\"steps\":true,\"annotations\":\"congestion,duration,distance\",\"voice_instructions\":true,\"banner_instructions\":true,\"voice_units\":\"metric\",\"access_token\":\"pk.abcd1234\",\"uuid\":\"qMqcRiHLTiYbMKJQbiRs6bVvWo6qUdsPdjqcP1AJXoRv3_u8PeKmKw\\u003d\\u003d\",\"waypoint_names\":\";日本, 東京都東京都世田谷区玉川2丁目14番19\",\"waypoint_targets\":\";\"},\"voiceLocale\":\"ja-JP\"}","route_index":0,"leg_index":0,"event_timestamp":1585550683.045606,"result":{"route_state":"initialized","location":{"lat":2.2250738585072014e-308,"lon":2.2250738585072014e-308,"time":0.0,"accuracyHosrizontal":0.0},"route_index":0,"leg_index":0,"remaining_leg_distance":2565.888916015625,"remaining_leg_duration":631.355,"step_index":0,"remaining_step_distance":2220.1953125,"remaining_step_duration":545.583,"state_message":"","in_tunnel":false,"predicted":0.0,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[]},"delta_ms":10},{"type":"updateLocation","location":{"lat":35.621195,"lon":139.6514315,"time":1585550683.623,"speed":7.948722839355469,"bearing":256.9781188964844,"altitude":75.9725341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550683.623344,"delta_ms":0},{"type":"getStatus","timestamp":1585550685.418,"event_timestamp":1585550683.919924,"result":{"route_state":"tracking","location":{"lat":35.62114715576172,"lon":139.6512908935547,"time":1585550685.418,"speed":7.86134672164917,"bearing":256.2925720214844,"altitude":75.9725341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2548.783935546875,"remaining_leg_duration":627.355,"step_index":0,"remaining_step_distance":2203.09033203125,"remaining_step_duration":541.0,"state_message":"","in_tunnel":false,"predicted":1.795,"shape_index":0,"intersection_index":0,"road_name":"","voice_instruction":{"ssml_announcement":"都道416号線を西方向に2 キロメートルです","announcement":"都道416号線を西方向に2 キロメートルです","remaining_step_distance":2220.1953125,"index":0},"banner_instruction":{"primary":{"text":"駒沢通り","type":"turn","modifier":"right","components":[{"type":"text","text":"駒沢通り"}]},"remaining_step_distance":2220.1953125,"index":0},"key_points":[]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6211803,"lon":139.651345,"time":1585550684.626,"speed":8.129724502563477,"bearing":258.9989929199219,"altitude":76.2252197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550684.627608,"delta_ms":0},{"type":"getStatus","timestamp":1585550686.477,"event_timestamp":1585550684.977818,"result":{"route_state":"tracking","location":{"lat":35.62112808227539,"lon":139.6511993408203,"time":1585550686.477,"speed":7.948859691619873,"bearing":256.2925720214844,"altitude":76.2252197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2540.231689453125,"remaining_leg_duration":625.355,"step_index":0,"remaining_step_distance":2194.5380859375,"remaining_step_duration":539.0,"state_message":"","in_tunnel":false,"predicted":1.851,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62112808227539,"lon":139.6511993408203,"time":1585550686.477,"bearing":256.2925720214844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6211675,"lon":139.6512583,"time":1585550685.634,"speed":7.662935256958008,"bearing":259.03173828125,"altitude":76.2752685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550685.634728,"delta_ms":0},{"type":"getStatus","timestamp":1585550687.518,"event_timestamp":1585550686.021233,"result":{"route_state":"tracking","location":{"lat":35.62110900878906,"lon":139.65109252929688,"time":1585550687.518,"speed":7.8206610679626469,"bearing":256.2925720214844,"altitude":76.2752685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2530.340087890625,"remaining_leg_duration":622.355,"step_index":0,"remaining_step_distance":2184.646484375,"remaining_step_duration":537.0,"state_message":"","in_tunnel":false,"predicted":1.884,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62110900878906,"lon":139.65109252929688,"time":1585550687.518,"bearing":256.2925720214844}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6211544,"lon":139.651177,"time":1585550686.638,"speed":7.520675182342529,"bearing":257.0020446777344,"altitude":76.29461669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550686.639195,"delta_ms":0},{"type":"getStatus","timestamp":1585550688.581,"event_timestamp":1585550687.082023,"result":{"route_state":"tracking","location":{"lat":35.621097564697269,"lon":139.6510467529297,"time":1585550688.581,"speed":7.568572044372559,"bearing":256.2925720214844,"altitude":76.29461669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2526.0126953125,"remaining_leg_duration":621.355,"step_index":0,"remaining_step_distance":2180.319091796875,"remaining_step_duration":536.0,"state_message":"","in_tunnel":false,"predicted":1.943,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.621097564697269,"lon":139.6510467529297,"time":1585550688.581,"bearing":256.2925720214844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6211383,"lon":139.6510961,"time":1585550687.624,"speed":7.888064861297607,"bearing":253.9902801513672,"altitude":76.38507080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550687.624286,"delta_ms":0},{"type":"getStatus","timestamp":1585550689.636,"event_timestamp":1585550688.137368,"result":{"route_state":"tracking","location":{"lat":35.62107849121094,"lon":139.65093994140626,"time":1585550689.636,"speed":7.837791442871094,"bearing":256.2925720214844,"altitude":76.38507080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2516.12060546875,"remaining_leg_duration":619.355,"step_index":0,"remaining_step_distance":2170.427001953125,"remaining_step_duration":533.0,"state_message":"","in_tunnel":false,"predicted":2.012,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62107849121094,"lon":139.65093994140626,"time":1585550689.636,"bearing":256.2925720214844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6211174,"lon":139.6510103,"time":1585550688.618,"speed":8.610074043273926,"bearing":252.98434448242188,"altitude":76.65179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550688.61933,"delta_ms":0},{"type":"getStatus","timestamp":1585550690.681,"event_timestamp":1585550689.182135,"result":{"route_state":"tracking","location":{"lat":35.621055603027347,"lon":139.6508331298828,"time":1585550690.681,"speed":8.246682167053223,"bearing":256.2925720214844,"altitude":76.65179443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2506.1259765625,"remaining_leg_duration":616.355,"step_index":0,"remaining_step_distance":2160.432373046875,"remaining_step_duration":531.0,"state_message":"","in_tunnel":false,"predicted":2.063,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.621055603027347,"lon":139.6508331298828,"time":1585550690.681,"bearing":256.2925720214844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6210936,"lon":139.650916,"time":1585550689.628,"speed":9.51632308959961,"bearing":252.92889404296876,"altitude":76.85015869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550689.628928,"delta_ms":0},{"type":"getStatus","timestamp":1585550691.739,"event_timestamp":1585550690.239635,"result":{"route_state":"tracking","location":{"lat":35.62103271484375,"lon":139.6507110595703,"time":1585550691.739,"speed":9.15584659576416,"bearing":256.2925720214844,"altitude":76.85015869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2494.791259765625,"remaining_leg_duration":614.355,"step_index":0,"remaining_step_distance":2149.09765625,"remaining_step_duration":528.0,"state_message":"","in_tunnel":false,"predicted":2.111,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.62103271484375,"lon":139.6507110595703,"time":1585550691.739,"bearing":256.2925720214844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6210688,"lon":139.6508168,"time":1585550690.638,"speed":10.065335273742676,"bearing":253.9922637939453,"altitude":77.37969970703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550690.639231,"delta_ms":0},{"type":"getStatus","timestamp":1585550692.792,"event_timestamp":1585550691.29311,"result":{"route_state":"tracking","location":{"lat":35.621009826660159,"lon":139.6505889892578,"time":1585550692.792,"speed":9.65014934539795,"bearing":256.2925720214844,"altitude":77.37969970703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2483.4560546875,"remaining_leg_duration":611.355,"step_index":0,"remaining_step_distance":2137.762451171875,"remaining_step_duration":525.0,"state_message":"","in_tunnel":false,"predicted":2.154,"shape_index":0,"intersection_index":0,"road_name":"","key_points":[{"lat":35.621009826660159,"lon":139.6505889892578,"time":1585550692.792,"bearing":256.2925720214844}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6210439,"lon":139.6507072,"time":1585550691.636,"speed":10.209135055541993,"bearing":254.9980926513672,"altitude":77.9193115234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550691.636588,"delta_ms":0},{"type":"getStatus","timestamp":1585550693.83,"event_timestamp":1585550692.331619,"result":{"route_state":"tracking","location":{"lat":35.62098693847656,"lon":139.6504669189453,"time":1585550693.83,"speed":10.010982513427735,"bearing":257.3336486816406,"altitude":77.9193115234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2472.1201171875,"remaining_leg_duration":608.355,"step_index":0,"remaining_step_distance":2126.426513671875,"remaining_step_duration":523.0,"state_message":"","in_tunnel":false,"predicted":2.194,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.621009826660159,"lon":139.6505889892578,"time":1585550692.792,"bearing":256.2925720214844},{"lat":35.62098693847656,"lon":139.6504669189453,"time":1585550693.83,"bearing":257.3336486816406}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6210215,"lon":139.6505957,"time":1585550692.619,"speed":10.337345123291016,"bearing":255.99520874023438,"altitude":79.32745361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550692.619949,"delta_ms":0},{"type":"getStatus","timestamp":1585550694.87,"event_timestamp":1585550693.371403,"result":{"route_state":"tracking","location":{"lat":35.62096405029297,"lon":139.6503448486328,"time":1585550694.87,"speed":10.336321830749512,"bearing":257.3336486816406,"altitude":79.32745361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2460.783935546875,"remaining_leg_duration":605.355,"step_index":0,"remaining_step_distance":2115.09033203125,"remaining_step_duration":520.0,"state_message":"","in_tunnel":false,"predicted":2.251,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.62096405029297,"lon":139.6503448486328,"time":1585550694.87,"bearing":257.3336486816406}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620999,"lon":139.6504809,"time":1585550693.621,"speed":11.032757759094239,"bearing":255.97958374023438,"altitude":80.0810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550693.621909,"delta_ms":0},{"type":"getStatus","timestamp":1585550695.923,"event_timestamp":1585550694.423844,"result":{"route_state":"tracking","location":{"lat":35.620941162109378,"lon":139.65020751953126,"time":1585550695.923,"speed":10.834000587463379,"bearing":257.3336486816406,"altitude":80.0810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2448.100341796875,"remaining_leg_duration":602.355,"step_index":0,"remaining_step_distance":2102.406982421875,"remaining_step_duration":517.0,"state_message":"","in_tunnel":false,"predicted":2.302,"shape_index":1,"intersection_index":1,"road_name":"","key_points":[{"lat":35.620941162109378,"lon":139.65020751953126,"time":1585550695.923,"bearing":257.3336486816406}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6209742,"lon":139.6503585,"time":1585550694.625,"speed":11.686351776123047,"bearing":255.99618530273438,"altitude":80.46502685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550694.625769,"delta_ms":0},{"type":"getStatus","timestamp":1585550696.999,"event_timestamp":1585550695.499533,"result":{"route_state":"tracking","location":{"lat":35.620914459228519,"lon":139.6500701904297,"time":1585550696.999,"speed":11.376846313476563,"bearing":255.46815490722657,"altitude":80.46502685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2435.324462890625,"remaining_leg_duration":599.355,"step_index":0,"remaining_step_distance":2089.630859375,"remaining_step_duration":513.0,"state_message":"","in_tunnel":false,"predicted":2.374,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62093734741211,"lon":139.6501922607422,"time":1585550696.044,"bearing":257.3336486816406},{"lat":35.620914459228519,"lon":139.6500701904297,"time":1585550696.999,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6209492,"lon":139.6502294,"time":1585550695.615,"speed":11.630334854125977,"bearing":256.0003662109375,"altitude":80.2835693359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550695.616094,"delta_ms":0},{"type":"getStatus","timestamp":1585550698.052,"event_timestamp":1585550696.552625,"result":{"route_state":"tracking","location":{"lat":35.62088394165039,"lon":139.64991760253907,"time":1585550698.052,"speed":11.662779808044434,"bearing":255.46815490722657,"altitude":80.2835693359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2421.10546875,"remaining_leg_duration":595.355,"step_index":0,"remaining_step_distance":2075.411865234375,"remaining_step_duration":510.0,"state_message":"","in_tunnel":false,"predicted":2.437,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62088394165039,"lon":139.64991760253907,"time":1585550698.052,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6209242,"lon":139.6501058,"time":1585550696.62,"speed":11.004900932312012,"bearing":255.0070037841797,"altitude":80.5789794921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550696.621033,"delta_ms":0},{"type":"getStatus","timestamp":1585550699.091,"event_timestamp":1585550697.592977,"result":{"route_state":"tracking","location":{"lat":35.620853424072269,"lon":139.64979553222657,"time":1585550699.091,"speed":11.250040054321289,"bearing":255.46815490722657,"altitude":80.5789794921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2409.564697265625,"remaining_leg_duration":593.355,"step_index":0,"remaining_step_distance":2063.87109375,"remaining_step_duration":507.0,"state_message":"","in_tunnel":false,"predicted":2.471,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.620853424072269,"lon":139.64979553222657,"time":1585550699.091,"bearing":255.46815490722657}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6208984,"lon":139.6499897,"time":1585550697.669,"speed":10.43295669555664,"bearing":255.00372314453126,"altitude":81.76318359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550697.669299,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620875,"lon":139.6498807,"time":1585550698.63,"speed":9.921914100646973,"bearing":255.03094482421876,"altitude":82.1170654296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550698.630196,"delta_ms":0},{"type":"getStatus","timestamp":1585550700.159,"event_timestamp":1585550698.659901,"result":{"route_state":"tracking","location":{"lat":35.6208381652832,"lon":139.64971923828126,"time":1585550700.159,"speed":10.180715560913086,"bearing":255.46815490722657,"altitude":82.1170654296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2402.455322265625,"remaining_leg_duration":591.355,"step_index":0,"remaining_step_distance":2056.76171875,"remaining_step_duration":505.0,"state_message":"","in_tunnel":false,"predicted":1.529,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6208381652832,"lon":139.64971923828126,"time":1585550700.159,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6208535,"lon":139.6497781,"time":1585550699.627,"speed":9.380826950073243,"bearing":255.0009765625,"altitude":82.18463134765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550699.6273,"delta_ms":0},{"type":"getStatus","timestamp":1585550701.219,"event_timestamp":1585550699.719628,"result":{"route_state":"tracking","location":{"lat":35.620819091796878,"lon":139.6496124267578,"time":1585550701.219,"speed":9.697526931762696,"bearing":255.46815490722657,"altitude":82.18463134765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2392.564697265625,"remaining_leg_duration":588.355,"step_index":0,"remaining_step_distance":2046.8712158203126,"remaining_step_duration":503.0,"state_message":"","in_tunnel":false,"predicted":1.592,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.620819091796878,"lon":139.6496124267578,"time":1585550701.219,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620834,"lon":139.649679,"time":1585550700.637,"speed":8.990550994873047,"bearing":255.0006866455078,"altitude":81.18853759765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550700.637213,"delta_ms":0},{"type":"getStatus","timestamp":1585550702.261,"event_timestamp":1585550700.762333,"result":{"route_state":"tracking","location":{"lat":35.62080001831055,"lon":139.64952087402345,"time":1585550702.261,"speed":9.289632797241211,"bearing":255.46815490722657,"altitude":81.18853759765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2384.012451171875,"remaining_leg_duration":586.355,"step_index":0,"remaining_step_distance":2038.31884765625,"remaining_step_duration":501.0,"state_message":"","in_tunnel":false,"predicted":1.624,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62080001831055,"lon":139.64952087402345,"time":1585550702.261,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6208152,"lon":139.6495865,"time":1585550701.625,"speed":8.395469665527344,"bearing":255.0089569091797,"altitude":81.30047607421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550701.625426,"delta_ms":0},{"type":"getStatus","timestamp":1585550703.323,"event_timestamp":1585550701.824579,"result":{"route_state":"tracking","location":{"lat":35.62077331542969,"lon":139.6494140625,"time":1585550703.323,"speed":8.708832740783692,"bearing":255.46815490722657,"altitude":81.30047607421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2373.911865234375,"remaining_leg_duration":584.355,"step_index":0,"remaining_step_distance":2028.21826171875,"remaining_step_duration":498.0,"state_message":"","in_tunnel":false,"predicted":1.698,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62077331542969,"lon":139.6494140625,"time":1585550703.323,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6207975,"lon":139.6494974,"time":1585550702.633,"speed":8.64956283569336,"bearing":254.99940490722657,"altitude":81.70068359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550702.633995,"delta_ms":0},{"type":"getStatus","timestamp":1585550704.37,"event_timestamp":1585550702.870473,"result":{"route_state":"tracking","location":{"lat":35.62075424194336,"lon":139.64932250976563,"time":1585550704.37,"speed":8.653375625610352,"bearing":255.46815490722657,"altitude":81.70068359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2365.359375,"remaining_leg_duration":582.355,"step_index":0,"remaining_step_distance":2019.665771484375,"remaining_step_duration":496.0,"state_message":"","in_tunnel":false,"predicted":1.737,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62075424194336,"lon":139.64932250976563,"time":1585550704.37,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6207789,"lon":139.6494048,"time":1585550703.617,"speed":9.203397750854493,"bearing":255.98968505859376,"altitude":81.16644287109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550703.617364,"delta_ms":0},{"type":"getStatus","timestamp":1585550705.415,"event_timestamp":1585550703.915547,"result":{"route_state":"tracking","location":{"lat":35.62073516845703,"lon":139.64923095703126,"time":1585550705.415,"speed":8.978753089904786,"bearing":255.46815490722657,"altitude":81.16644287109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2356.806884765625,"remaining_leg_duration":580.355,"step_index":0,"remaining_step_distance":2011.1134033203126,"remaining_step_duration":494.0,"state_message":"","in_tunnel":false,"predicted":1.798,"shape_index":2,"intersection_index":2,"road_name":"","key_points":[{"lat":35.62073516845703,"lon":139.64923095703126,"time":1585550705.415,"bearing":255.46815490722657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6207599,"lon":139.6493022,"time":1585550704.629,"speed":10.221718788146973,"bearing":255.98965454101563,"altitude":81.6663818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550704.630223,"delta_ms":0},{"type":"getStatus","timestamp":1585550706.453,"event_timestamp":1585550704.95395,"result":{"route_state":"tracking","location":{"lat":35.62071228027344,"lon":139.64910888671876,"time":1585550706.453,"speed":9.662431716918946,"bearing":256.6320495605469,"altitude":81.6663818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2345.430908203125,"remaining_leg_duration":577.355,"step_index":0,"remaining_step_distance":1999.7373046875,"remaining_step_duration":491.0,"state_message":"","in_tunnel":false,"predicted":1.824,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62071228027344,"lon":139.6491241455078,"time":1585550706.327,"bearing":255.46815490722657},{"lat":35.62071228027344,"lon":139.64910888671876,"time":1585550706.453,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6207383,"lon":139.6491885,"time":1585550705.618,"speed":10.779661178588868,"bearing":255.99981689453126,"altitude":81.87127685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550705.618399,"delta_ms":0},{"type":"getStatus","timestamp":1585550707.492,"event_timestamp":1585550705.992593,"result":{"route_state":"tracking","location":{"lat":35.62068557739258,"lon":139.64898681640626,"time":1585550707.492,"speed":10.338272094726563,"bearing":256.6320495605469,"altitude":81.87127685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2334.033447265625,"remaining_leg_duration":574.355,"step_index":0,"remaining_step_distance":1988.33984375,"remaining_step_duration":489.0,"state_message":"","in_tunnel":false,"predicted":1.874,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62068557739258,"lon":139.64898681640626,"time":1585550707.492,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6207153,"lon":139.6490735,"time":1585550706.622,"speed":10.256056785583496,"bearing":255.0093536376953,"altitude":82.09814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550706.623039,"delta_ms":0},{"type":"getStatus","timestamp":1585550708.542,"event_timestamp":1585550707.043506,"result":{"route_state":"tracking","location":{"lat":35.62066650390625,"lon":139.6488800048828,"time":1585550708.542,"speed":10.254791259765625,"bearing":256.6320495605469,"altitude":82.09814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2324.138916015625,"remaining_leg_duration":572.355,"step_index":0,"remaining_step_distance":1978.4453125,"remaining_step_duration":486.0,"state_message":"","in_tunnel":false,"predicted":1.92,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62066650390625,"lon":139.6488800048828,"time":1585550708.542,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6206921,"lon":139.6489626,"time":1585550707.626,"speed":10.486612319946289,"bearing":255.97950744628907,"altitude":82.42431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550707.626993,"delta_ms":0},{"type":"getStatus","timestamp":1585550709.599,"event_timestamp":1585550708.099991,"result":{"route_state":"tracking","location":{"lat":35.62063980102539,"lon":139.64874267578126,"time":1585550709.599,"speed":10.485300064086914,"bearing":256.6320495605469,"altitude":82.42431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2311.36181640625,"remaining_leg_duration":568.355,"step_index":0,"remaining_step_distance":1965.6680908203126,"remaining_step_duration":483.0,"state_message":"","in_tunnel":false,"predicted":1.973,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62063980102539,"lon":139.64874267578126,"time":1585550709.599,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6206693,"lon":139.648849,"time":1585550708.612,"speed":11.077987670898438,"bearing":255.99781799316407,"altitude":82.6580810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550708.613097,"delta_ms":0},{"type":"getStatus","timestamp":1585550710.643,"event_timestamp":1585550709.143457,"result":{"route_state":"tracking","location":{"lat":35.6206169128418,"lon":139.64862060546876,"time":1585550710.643,"speed":10.922780990600586,"bearing":256.6320495605469,"altitude":82.6580810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2300.025390625,"remaining_leg_duration":566.355,"step_index":0,"remaining_step_distance":1954.331787109375,"remaining_step_duration":480.0,"state_message":"","in_tunnel":false,"predicted":2.031,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6206169128418,"lon":139.64862060546876,"time":1585550710.643,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6206457,"lon":139.6487295,"time":1585550709.626,"speed":10.788477897644043,"bearing":256.01031494140627,"altitude":83.1563720703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550709.626951,"delta_ms":0},{"type":"getStatus","timestamp":1585550711.683,"event_timestamp":1585550710.1838,"result":{"route_state":"tracking","location":{"lat":35.62059020996094,"lon":139.6484832763672,"time":1585550711.683,"speed":10.86721420288086,"bearing":256.6320495605469,"altitude":83.1563720703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2287.247802734375,"remaining_leg_duration":563.355,"step_index":0,"remaining_step_distance":1941.55419921875,"remaining_step_duration":477.0,"state_message":"","in_tunnel":false,"predicted":2.057,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62059020996094,"lon":139.6484832763672,"time":1585550711.683,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6206234,"lon":139.6486149,"time":1585550710.621,"speed":10.230939865112305,"bearing":256.0010070800781,"altitude":83.22998046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550710.621664,"delta_ms":0},{"type":"getStatus","timestamp":1585550712.727,"event_timestamp":1585550711.227813,"result":{"route_state":"tracking","location":{"lat":35.62057113647461,"lon":139.64837646484376,"time":1585550712.727,"speed":10.419349670410157,"bearing":256.6320495605469,"altitude":83.22998046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2277.352783203125,"remaining_leg_duration":560.355,"step_index":0,"remaining_step_distance":1931.6591796875,"remaining_step_duration":475.0,"state_message":"","in_tunnel":false,"predicted":2.106,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62057113647461,"lon":139.64837646484376,"time":1585550712.727,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6206026,"lon":139.6485066,"time":1585550711.614,"speed":10.13017749786377,"bearing":256.00018310546877,"altitude":82.59136962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550711.614304,"delta_ms":0},{"type":"getStatus","timestamp":1585550713.788,"event_timestamp":1585550712.289246,"result":{"route_state":"tracking","location":{"lat":35.620548248291019,"lon":139.6482696533203,"time":1585550713.788,"speed":10.217865943908692,"bearing":256.6320495605469,"altitude":82.59136962890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2267.36083984375,"remaining_leg_duration":558.355,"step_index":0,"remaining_step_distance":1921.667236328125,"remaining_step_duration":472.0,"state_message":"","in_tunnel":false,"predicted":2.174,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.620548248291019,"lon":139.6482696533203,"time":1585550713.788,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6205807,"lon":139.6483979,"time":1585550712.605,"speed":10.198657989501954,"bearing":255.00257873535157,"altitude":82.6558837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550712.606032,"delta_ms":0},{"type":"getStatus","timestamp":1585550714.842,"event_timestamp":1585550713.342662,"result":{"route_state":"tracking","location":{"lat":35.62052536010742,"lon":139.6481475830078,"time":1585550714.842,"speed":10.306727409362793,"bearing":256.6320495605469,"altitude":82.6558837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2256.024658203125,"remaining_leg_duration":555.355,"step_index":0,"remaining_step_distance":1910.3310546875,"remaining_step_duration":469.0,"state_message":"","in_tunnel":false,"predicted":2.237,"shape_index":3,"intersection_index":3,"road_name":"","key_points":[{"lat":35.62052536010742,"lon":139.6481475830078,"time":1585550714.842,"bearing":256.6320495605469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6205577,"lon":139.6482885,"time":1585550713.616,"speed":9.800433158874512,"bearing":255.00042724609376,"altitude":82.82867431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550713.616582,"delta_ms":0},{"type":"getStatus","timestamp":1585550715.884,"event_timestamp":1585550714.38553,"result":{"route_state":"tracking","location":{"lat":35.62049865722656,"lon":139.64804077148438,"time":1585550715.884,"speed":9.979164123535157,"bearing":253.5032958984375,"altitude":82.82867431640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2245.919189453125,"remaining_leg_duration":552.355,"step_index":0,"remaining_step_distance":1900.2257080078126,"remaining_step_duration":467.0,"state_message":"","in_tunnel":false,"predicted":2.268,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.62051773071289,"lon":139.6481170654297,"time":1585550715.139,"bearing":256.6320495605469},{"lat":35.62049865722656,"lon":139.64804077148438,"time":1585550715.884,"bearing":253.5032958984375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6205352,"lon":139.6481794,"time":1585550714.634,"speed":10.209752082824707,"bearing":254.99984741210938,"altitude":83.93902587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550714.634705,"delta_ms":0},{"type":"getStatus","timestamp":1585550716.935,"event_timestamp":1585550715.437046,"result":{"route_state":"tracking","location":{"lat":35.62047576904297,"lon":139.64793395996095,"time":1585550716.935,"speed":10.090492248535157,"bearing":253.5032958984375,"altitude":83.93902587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2235.92626953125,"remaining_leg_duration":550.355,"step_index":0,"remaining_step_distance":1890.2327880859376,"remaining_step_duration":464.0,"state_message":"","in_tunnel":false,"predicted":2.301,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.62047576904297,"lon":139.64793395996095,"time":1585550716.935,"bearing":253.5032958984375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6205112,"lon":139.6480677,"time":1585550715.618,"speed":10.2699613571167,"bearing":254.00042724609376,"altitude":83.98883056640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550715.618899,"delta_ms":0},{"type":"getStatus","timestamp":1585550718.001,"event_timestamp":1585550716.502312,"result":{"route_state":"tracking","location":{"lat":35.620445251464847,"lon":139.64781188964845,"time":1585550718.001,"speed":10.211309432983399,"bearing":253.5032958984375,"altitude":83.98883056640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2224.37158203125,"remaining_leg_duration":547.355,"step_index":0,"remaining_step_distance":1878.677978515625,"remaining_step_duration":462.0,"state_message":"","in_tunnel":false,"predicted":2.383,"shape_index":4,"intersection_index":4,"road_name":"","key_points":[{"lat":35.620445251464847,"lon":139.64781188964845,"time":1585550718.001,"bearing":253.5032958984375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6204866,"lon":139.6479576,"time":1585550716.615,"speed":10.289900779724121,"bearing":254.9994354248047,"altitude":84.45770263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550716.615646,"delta_ms":0},{"type":"getStatus","timestamp":1585550719.041,"event_timestamp":1585550717.543145,"result":{"route_state":"tracking","location":{"lat":35.620418548583987,"lon":139.647705078125,"time":1585550719.041,"speed":10.240537643432618,"bearing":256.0707702636719,"altitude":84.45770263671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2214.260009765625,"remaining_leg_duration":545.355,"step_index":0,"remaining_step_distance":1868.56640625,"remaining_step_duration":459.0,"state_message":"","in_tunnel":false,"predicted":2.426,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.620418548583987,"lon":139.647705078125,"time":1585550719.041,"bearing":253.5032958984375},{"lat":35.620418548583987,"lon":139.647705078125,"time":1585550719.041,"bearing":256.0707702636719}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6204633,"lon":139.6478469,"time":1585550717.637,"speed":10.388636589050293,"bearing":254.99818420410157,"altitude":84.3055419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550717.637911,"delta_ms":0},{"type":"getStatus","timestamp":1585550720.08,"event_timestamp":1585550718.581628,"result":{"route_state":"tracking","location":{"lat":35.620391845703128,"lon":139.64756774902345,"time":1585550720.08,"speed":10.40617561340332,"bearing":256.0707702636719,"altitude":84.3055419921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2201.48193359375,"remaining_leg_duration":541.355,"step_index":0,"remaining_step_distance":1855.788330078125,"remaining_step_duration":456.0,"state_message":"","in_tunnel":false,"predicted":2.443,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.620391845703128,"lon":139.64756774902345,"time":1585550720.08,"bearing":256.0707702636719}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6204391,"lon":139.6477347,"time":1585550718.64,"speed":10.759328842163086,"bearing":254.99929809570313,"altitude":84.224609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550718.640703,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6204145,"lon":139.6476188,"time":1585550719.621,"speed":10.75001049041748,"bearing":255.00001525878907,"altitude":84.2554931640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550719.62155,"delta_ms":0},{"type":"getStatus","timestamp":1585550721.134,"event_timestamp":1585550719.634961,"result":{"route_state":"tracking","location":{"lat":35.62036895751953,"lon":139.64744567871095,"time":1585550721.134,"speed":10.76663589477539,"bearing":256.0707702636719,"altitude":84.2554931640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2190.14599609375,"remaining_leg_duration":539.355,"step_index":0,"remaining_step_distance":1844.4525146484376,"remaining_step_duration":453.0,"state_message":"","in_tunnel":false,"predicted":1.513,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.62036895751953,"lon":139.64744567871095,"time":1585550721.134,"bearing":256.0707702636719}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6203901,"lon":139.6475019,"time":1585550720.627,"speed":11.108255386352539,"bearing":255.99745178222657,"altitude":84.41229248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550720.627388,"delta_ms":0},{"type":"getStatus","timestamp":1585550722.178,"event_timestamp":1585550720.678934,"result":{"route_state":"tracking","location":{"lat":35.62034225463867,"lon":139.64732360839845,"time":1585550722.178,"speed":10.89177131652832,"bearing":256.0707702636719,"altitude":84.41229248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2178.7109375,"remaining_leg_duration":536.355,"step_index":0,"remaining_step_distance":1833.0174560546876,"remaining_step_duration":450.0,"state_message":"","in_tunnel":false,"predicted":1.551,"shape_index":5,"intersection_index":5,"road_name":"","key_points":[{"lat":35.62034225463867,"lon":139.64732360839845,"time":1585550722.178,"bearing":256.0707702636719}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6203658,"lon":139.6473793,"time":1585550721.628,"speed":11.748050689697266,"bearing":255.99806213378907,"altitude":84.44488525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550721.628689,"delta_ms":0},{"type":"getStatus","timestamp":1585550723.232,"event_timestamp":1585550721.733347,"result":{"route_state":"tracking","location":{"lat":35.62031555175781,"lon":139.64718627929688,"time":1585550723.232,"speed":11.443723678588868,"bearing":256.0198669433594,"altitude":84.44488525390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2165.9296875,"remaining_leg_duration":533.355,"step_index":0,"remaining_step_distance":1820.236083984375,"remaining_step_duration":447.0,"state_message":"","in_tunnel":false,"predicted":1.604,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620323181152347,"lon":139.64723205566407,"time":1585550722.883,"bearing":256.0707702636719},{"lat":35.62031555175781,"lon":139.64718627929688,"time":1585550723.232,"bearing":256.0198669433594}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6203403,"lon":139.6472525,"time":1585550722.622,"speed":11.550948143005371,"bearing":256.0010070800781,"altitude":84.5177001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550722.622791,"delta_ms":0},{"type":"getStatus","timestamp":1585550724.284,"event_timestamp":1585550722.784984,"result":{"route_state":"tracking","location":{"lat":35.62028884887695,"lon":139.6470489501953,"time":1585550724.284,"speed":11.633719444274903,"bearing":256.0198669433594,"altitude":84.5177001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2153.154296875,"remaining_leg_duration":530.355,"step_index":0,"remaining_step_distance":1807.460693359375,"remaining_step_duration":444.0,"state_message":"","in_tunnel":false,"predicted":1.662,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62028884887695,"lon":139.6470489501953,"time":1585550724.284,"bearing":256.0198669433594}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6203162,"lon":139.6471273,"time":1585550723.628,"speed":11.181028366088868,"bearing":256.0010681152344,"altitude":85.05633544921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550723.628754,"delta_ms":0},{"type":"getStatus","timestamp":1585550725.336,"event_timestamp":1585550723.837018,"result":{"route_state":"tracking","location":{"lat":35.620262145996097,"lon":139.6469268798828,"time":1585550725.336,"speed":11.45547103881836,"bearing":256.0198669433594,"altitude":85.05633544921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2141.719482421875,"remaining_leg_duration":527.355,"step_index":0,"remaining_step_distance":1796.02587890625,"remaining_step_duration":441.0,"state_message":"","in_tunnel":false,"predicted":1.708,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620262145996097,"lon":139.6469268798828,"time":1585550725.336,"bearing":256.0198669433594}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6202934,"lon":139.6470109,"time":1585550724.618,"speed":10.248004913330079,"bearing":256.02301025390627,"altitude":85.31903076171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550724.618586,"delta_ms":0},{"type":"getStatus","timestamp":1585550726.386,"event_timestamp":1585550724.886609,"result":{"route_state":"tracking","location":{"lat":35.620235443115237,"lon":139.6468048095703,"time":1585550726.386,"speed":10.625306129455567,"bearing":256.0198669433594,"altitude":85.31903076171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2130.2822265625,"remaining_leg_duration":524.355,"step_index":0,"remaining_step_distance":1784.588623046875,"remaining_step_duration":439.0,"state_message":"","in_tunnel":false,"predicted":1.768,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620235443115237,"lon":139.6468048095703,"time":1585550726.386,"bearing":256.0198669433594}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620273,"lon":139.646902,"time":1585550725.623,"speed":9.82522964477539,"bearing":257.0053405761719,"altitude":85.4097900390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550725.62403,"delta_ms":0},{"type":"getStatus","timestamp":1585550727.435,"event_timestamp":1585550725.935877,"result":{"route_state":"tracking","location":{"lat":35.620216369628909,"lon":139.64671325683595,"time":1585550727.435,"speed":10.205095291137696,"bearing":256.0198669433594,"altitude":85.4097900390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2121.729736328125,"remaining_leg_duration":522.355,"step_index":0,"remaining_step_distance":1776.0361328125,"remaining_step_duration":436.0,"state_message":"","in_tunnel":false,"predicted":1.812,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620216369628909,"lon":139.64671325683595,"time":1585550727.435,"bearing":256.0198669433594}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6202549,"lon":139.6468008,"time":1585550726.62,"speed":8.944314956665039,"bearing":257.0057067871094,"altitude":86.055908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550726.621138,"delta_ms":0},{"type":"getStatus","timestamp":1585550728.488,"event_timestamp":1585550726.98879,"result":{"route_state":"tracking","location":{"lat":35.62019729614258,"lon":139.6466064453125,"time":1585550728.488,"speed":9.317427635192871,"bearing":256.0198669433594,"altitude":86.055908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2111.837890625,"remaining_leg_duration":519.355,"step_index":0,"remaining_step_distance":1766.144287109375,"remaining_step_duration":434.0,"state_message":"","in_tunnel":false,"predicted":1.868,"shape_index":6,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62019729614258,"lon":139.6466064453125,"time":1585550728.488,"bearing":256.0198669433594}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6202383,"lon":139.6467098,"time":1585550727.62,"speed":7.73194694519043,"bearing":256.1102600097656,"altitude":86.16436767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550727.62082,"delta_ms":0},{"type":"getStatus","timestamp":1585550729.525,"event_timestamp":1585550728.026226,"result":{"route_state":"tracking","location":{"lat":35.62018585205078,"lon":139.64654541015626,"time":1585550729.525,"speed":8.185619354248047,"bearing":257.1935729980469,"altitude":86.16436767578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2106.166259765625,"remaining_leg_duration":518.355,"step_index":0,"remaining_step_distance":1760.47265625,"remaining_step_duration":433.0,"state_message":"","in_tunnel":false,"predicted":1.905,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62019348144531,"lon":139.64659118652345,"time":1585550728.752,"bearing":256.0198669433594},{"lat":35.62018585205078,"lon":139.64654541015626,"time":1585550729.525,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6202222,"lon":139.6466318,"time":1585550728.64,"speed":6.711337566375732,"bearing":256.00225830078127,"altitude":86.6204833984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550728.640605,"delta_ms":0},{"type":"getStatus","timestamp":1585550730.565,"event_timestamp":1585550729.065501,"result":{"route_state":"tracking","location":{"lat":35.62017059326172,"lon":139.646484375,"time":1585550730.565,"speed":7.193851470947266,"bearing":257.1935729980469,"altitude":86.6204833984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2100.399169921875,"remaining_leg_duration":517.355,"step_index":0,"remaining_step_distance":1754.7056884765626,"remaining_step_duration":431.0,"state_message":"","in_tunnel":false,"predicted":1.925,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62017059326172,"lon":139.646484375,"time":1585550730.565,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6202086,"lon":139.6465642,"time":1585550729.626,"speed":5.9683990478515629,"bearing":256.0184631347656,"altitude":86.66925048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550729.626911,"delta_ms":0},{"type":"getStatus","timestamp":1585550731.604,"event_timestamp":1585550730.104518,"result":{"route_state":"tracking","location":{"lat":35.62016296386719,"lon":139.6464385986328,"time":1585550731.604,"speed":6.355467319488525,"bearing":257.1935729980469,"altitude":86.66925048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2096.175537109375,"remaining_leg_duration":516.355,"step_index":0,"remaining_step_distance":1750.48193359375,"remaining_step_duration":430.0,"state_message":"","in_tunnel":false,"predicted":1.978,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62016296386719,"lon":139.6464385986328,"time":1585550731.604,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201964,"lon":139.6465055,"time":1585550730.628,"speed":5.091501235961914,"bearing":256.0035705566406,"altitude":86.90380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550730.628389,"delta_ms":0},{"type":"getStatus","timestamp":1585550732.655,"event_timestamp":1585550731.155445,"result":{"route_state":"tracking","location":{"lat":35.62015151977539,"lon":139.64639282226563,"time":1585550732.655,"speed":5.54909610748291,"bearing":257.1935729980469,"altitude":86.90380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2091.846923828125,"remaining_leg_duration":515.355,"step_index":0,"remaining_step_distance":1746.1531982421876,"remaining_step_duration":429.0,"state_message":"","in_tunnel":false,"predicted":2.027,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62015151977539,"lon":139.64639282226563,"time":1585550732.655,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201863,"lon":139.6464595,"time":1585550731.667,"speed":3.561150074005127,"bearing":256.00360107421877,"altitude":86.74957275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550731.667543,"delta_ms":0},{"type":"getStatus","timestamp":1585550733.724,"event_timestamp":1585550732.225324,"result":{"route_state":"tracking","location":{"lat":35.620147705078128,"lon":139.6463623046875,"time":1585550733.724,"speed":4.239933490753174,"bearing":257.1935729980469,"altitude":86.74957275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2089.066162109375,"remaining_leg_duration":514.355,"step_index":0,"remaining_step_distance":1743.37255859375,"remaining_step_duration":428.0,"state_message":"","in_tunnel":false,"predicted":2.057,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620147705078128,"lon":139.6463623046875,"time":1585550733.724,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201815,"lon":139.6464383,"time":1585550732.648,"speed":2.6230218410491945,"bearing":256.0134582519531,"altitude":87.0323486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550732.649062,"delta_ms":0},{"type":"getStatus","timestamp":1585550734.772,"event_timestamp":1585550733.272757,"result":{"route_state":"tracking","location":{"lat":35.620147705078128,"lon":139.6463623046875,"time":1585550734.772,"speed":3.0465588569641115,"bearing":257.1935729980469,"altitude":87.0323486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2089.066162109375,"remaining_leg_duration":514.355,"step_index":0,"remaining_step_distance":1743.37255859375,"remaining_step_duration":428.0,"state_message":"","in_tunnel":false,"predicted":2.124,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620147705078128,"lon":139.6463623046875,"time":1585550733.724,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201759,"lon":139.6464097,"time":1585550733.634,"speed":1.9253745079040528,"bearing":256.03704833984377,"altitude":87.1734619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550733.63445,"delta_ms":0},{"type":"getStatus","timestamp":1585550735.821,"event_timestamp":1585550734.323854,"result":{"route_state":"tracking","location":{"lat":35.62014389038086,"lon":139.64634704589845,"time":1585550735.821,"speed":2.2491261959075929,"bearing":257.1935729980469,"altitude":87.1734619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2087.623291015625,"remaining_leg_duration":513.355,"step_index":0,"remaining_step_distance":1741.9298095703126,"remaining_step_duration":428.0,"state_message":"","in_tunnel":false,"predicted":2.187,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62014389038086,"lon":139.64634704589845,"time":1585550735.821,"bearing":257.1935729980469}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.620172,"lon":139.6463882,"time":1585550734.622,"speed":1.8309117555618287,"bearing":256.0066223144531,"altitude":87.38543701171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550734.62274,"delta_ms":0},{"type":"getStatus","timestamp":1585550736.89,"event_timestamp":1585550735.391038,"result":{"route_state":"tracking","location":{"lat":35.62014389038086,"lon":139.64633178710938,"time":1585550736.89,"speed":1.8124620914459229,"bearing":257.1935729980469,"altitude":87.38543701171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2086.28173828125,"remaining_leg_duration":513.355,"step_index":0,"remaining_step_distance":1740.588134765625,"remaining_step_duration":428.0,"state_message":"","in_tunnel":false,"predicted":2.268,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62014389038086,"lon":139.64633178710938,"time":1585550736.89,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201683,"lon":139.6463678,"time":1585550735.636,"speed":1.9285036325454713,"bearing":255.98973083496095,"altitude":87.35894775390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550735.636442,"delta_ms":0},{"type":"getStatus","timestamp":1585550737.942,"event_timestamp":1585550736.444184,"result":{"route_state":"tracking","location":{"lat":35.62014389038086,"lon":139.64633178710938,"time":1585550737.942,"speed":1.8345743417739869,"bearing":257.1935729980469,"altitude":87.35894775390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2086.28173828125,"remaining_leg_duration":513.355,"step_index":0,"remaining_step_distance":1740.588134765625,"remaining_step_duration":428.0,"state_message":"","in_tunnel":false,"predicted":2.306,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62014389038086,"lon":139.64633178710938,"time":1585550736.89,"bearing":257.1935729980469}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201637,"lon":139.6463431,"time":1585550736.627,"speed":2.46462345123291,"bearing":254.9702606201172,"altitude":87.632080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550736.627565,"delta_ms":0},{"type":"getStatus","timestamp":1585550739.001,"event_timestamp":1585550737.502631,"result":{"route_state":"tracking","location":{"lat":35.620140075683597,"lon":139.64630126953126,"time":1585550739.001,"speed":2.170135498046875,"bearing":257.1935729980469,"altitude":87.632080078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2083.495361328125,"remaining_leg_duration":512.355,"step_index":0,"remaining_step_distance":1737.8017578125,"remaining_step_duration":427.0,"state_message":"","in_tunnel":false,"predicted":2.374,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.620140075683597,"lon":139.64630126953126,"time":1585550739.001,"bearing":257.1935729980469}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201587,"lon":139.6463201,"time":1585550737.635,"speed":2.6890783309936525,"bearing":254.9470672607422,"altitude":87.34478759765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550737.63578,"delta_ms":0},{"type":"getStatus","timestamp":1585550740.084,"event_timestamp":1585550738.585142,"result":{"route_state":"tracking","location":{"lat":35.62013244628906,"lon":139.64625549316407,"time":1585550740.084,"speed":2.5291881561279299,"bearing":257.1935729980469,"altitude":87.34478759765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2079.267333984375,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1733.5738525390626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.449,"shape_index":7,"intersection_index":6,"road_name":"","key_points":[{"lat":35.62013244628906,"lon":139.64625549316407,"time":1585550740.084,"bearing":257.1935729980469}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201518,"lon":139.6462872,"time":1585550738.667,"speed":2.4019124507904054,"bearing":255.01107788085938,"altitude":87.54229736328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550738.667404,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201563,"lon":139.6462812,"time":1585550739.624,"speed":2.3235673904418947,"bearing":26.322162628173829,"altitude":87.28302001953125,"accuracyHorizontal":5.550000190734863,"provider":"fused"},"result":true,"event_timestamp":1585550739.624726,"delta_ms":0},{"type":"getStatus","timestamp":1585550741.161,"event_timestamp":1585550739.662522,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550741.161,"speed":2.2396020889282228,"bearing":256.5856628417969,"altitude":87.28302001953125,"accuracyHorizontal":5.550000190734863,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.537,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550741.161,"bearing":257.1935729980469},{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550741.161,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201614,"lon":139.6462862,"time":1585550740.621,"speed":1.4221904277801514,"bearing":21.867191314697267,"altitude":87.0914306640625,"accuracyHorizontal":6.1620001792907719,"provider":"fused"},"result":true,"event_timestamp":1585550740.622145,"delta_ms":0},{"type":"getStatus","timestamp":1585550742.204,"event_timestamp":1585550740.704487,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550742.204,"speed":2.2396020889282228,"bearing":256.5856628417969,"altitude":87.28302001953125,"accuracyHorizontal":5.550000190734863,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.583,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550741.161,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201634,"lon":139.6462881,"time":1585550741.623,"speed":0.6540434956550598,"bearing":23.446182250976564,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"result":true,"event_timestamp":1585550741.623778,"delta_ms":0},{"type":"getStatus","timestamp":1585550743.252,"event_timestamp":1585550741.753048,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550743.252,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.629,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550742.204,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620159,"lon":139.6462867,"time":1585550742.621,"speed":0.30553948879241946,"bearing":30.77684211730957,"altitude":87.10394287109375,"accuracyHorizontal":7.985000133514404,"provider":"fused"},"result":true,"event_timestamp":1585550742.621816,"delta_ms":0},{"type":"getStatus","timestamp":1585550744.315,"event_timestamp":1585550742.816304,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550744.315,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.694,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550743.252,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201526,"lon":139.6462864,"time":1585550743.618,"speed":0.2887420356273651,"bearing":36.330562591552737,"altitude":87.4930419921875,"accuracyHorizontal":8.001999855041504,"provider":"fused"},"result":true,"event_timestamp":1585550743.618616,"delta_ms":0},{"type":"getStatus","timestamp":1585550745.371,"event_timestamp":1585550743.872126,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550745.371,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.753,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550744.315,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201466,"lon":139.6462866,"time":1585550744.624,"speed":0.28844159841537478,"bearing":40.91090393066406,"altitude":86.9998779296875,"accuracyHorizontal":8.168999671936036,"provider":"fused"},"result":true,"event_timestamp":1585550744.624727,"delta_ms":0},{"type":"getStatus","timestamp":1585550746.432,"event_timestamp":1585550744.932935,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550746.432,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.808,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550745.371,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201419,"lon":139.6462876,"time":1585550745.631,"speed":0.2885812520980835,"bearing":39.19386291503906,"altitude":87.43316650390625,"accuracyHorizontal":8.062999725341797,"provider":"fused"},"result":true,"event_timestamp":1585550745.631437,"delta_ms":0},{"type":"getStatus","timestamp":1585550747.517,"event_timestamp":1585550746.018414,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550747.517,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.886,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550746.432,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201376,"lon":139.6462885,"time":1585550746.627,"speed":0.28889963030815127,"bearing":45.543251037597659,"altitude":87.93719482421875,"accuracyHorizontal":8.163999557495118,"provider":"fused"},"result":true,"event_timestamp":1585550746.628034,"delta_ms":0},{"type":"getStatus","timestamp":1585550748.572,"event_timestamp":1585550747.073289,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550748.572,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.945,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550747.517,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201343,"lon":139.64629,"time":1585550747.629,"speed":0.2891775965690613,"bearing":50.54689025878906,"altitude":88.2718505859375,"accuracyHorizontal":8.246000289916993,"provider":"fused"},"result":true,"event_timestamp":1585550747.629744,"delta_ms":0},{"type":"getStatus","timestamp":1585550749.659,"event_timestamp":1585550748.159736,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550749.659,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.03,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550748.572,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620131,"lon":139.6462916,"time":1585550748.638,"speed":0.28933092951774599,"bearing":53.87767028808594,"altitude":88.22015380859375,"accuracyHorizontal":8.477999687194825,"provider":"fused"},"result":true,"event_timestamp":1585550748.638302,"delta_ms":0},{"type":"getStatus","timestamp":1585550750.734,"event_timestamp":1585550749.235475,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550750.734,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.096,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550749.659,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620127599999999,"lon":139.6462938,"time":1585550749.636,"speed":0.2894637882709503,"bearing":56.864994049072269,"altitude":88.42779541015625,"accuracyHorizontal":8.574000358581543,"provider":"fused"},"result":true,"event_timestamp":1585550749.63734,"delta_ms":0},{"type":"getStatus","timestamp":1585550751.822,"event_timestamp":1585550750.32319,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550751.822,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.186,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550750.734,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201246,"lon":139.6462945,"time":1585550750.626,"speed":0.014800239354372025,"bearing":78.91622161865235,"altitude":88.55322265625,"accuracyHorizontal":8.652999877929688,"provider":"fused"},"result":true,"event_timestamp":1585550750.627178,"delta_ms":0},{"type":"getStatus","timestamp":1585550752.87,"event_timestamp":1585550751.37099,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550752.87,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.244,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550751.822,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201207,"lon":139.6462945,"time":1585550751.639,"speed":0.000897067307960242,"bearing":93.68106079101563,"altitude":88.66925048828125,"accuracyHorizontal":8.727999687194825,"provider":"fused"},"result":true,"event_timestamp":1585550751.639392,"delta_ms":0},{"type":"getStatus","timestamp":1585550753.932,"event_timestamp":1585550752.433711,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550753.932,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.293,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550752.87,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201169,"lon":139.6462958,"time":1585550752.626,"speed":0.000506249547470361,"bearing":95.7667236328125,"altitude":88.8067626953125,"accuracyHorizontal":8.807000160217286,"provider":"fused"},"result":true,"event_timestamp":1585550752.627019,"delta_ms":0},{"type":"getStatus","timestamp":1585550755.021,"event_timestamp":1585550753.521679,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550755.021,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.395,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550753.932,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201137,"lon":139.6462974,"time":1585550753.617,"speed":0.0005467409500852227,"bearing":94.03569793701172,"altitude":88.74542236328125,"accuracyHorizontal":8.86299991607666,"provider":"fused"},"result":true,"event_timestamp":1585550753.617372,"delta_ms":0},{"type":"getStatus","timestamp":1585550756.074,"event_timestamp":1585550754.574638,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550756.074,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":2.457,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550755.021,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201112,"lon":139.6462993,"time":1585550754.664,"speed":0.0006731168832629919,"bearing":92.43496704101563,"altitude":88.71142578125,"accuracyHorizontal":8.918000221252442,"provider":"fused"},"result":true,"event_timestamp":1585550754.664937,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201311,"lon":139.6462618,"time":1585550755.628,"speed":0.18384990096092225,"bearing":275.4888916015625,"altitude":88.80572509765625,"accuracyHorizontal":7.823999881744385,"provider":"fused"},"result":true,"event_timestamp":1585550755.628571,"delta_ms":0},{"type":"getStatus","timestamp":1585550757.151,"event_timestamp":1585550755.651663,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550757.151,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.523,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550756.074,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620141,"lon":139.6462429,"time":1585550756.634,"speed":1.147087574005127,"bearing":300.51751708984377,"altitude":88.78216552734375,"accuracyHorizontal":6.841000080108643,"provider":"fused"},"result":true,"event_timestamp":1585550756.635048,"delta_ms":0},{"type":"getStatus","timestamp":1585550758.196,"event_timestamp":1585550756.697208,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550758.196,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.562,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550757.151,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201454,"lon":139.6462335,"time":1585550757.621,"speed":1.0517807006835938,"bearing":300.31219482421877,"altitude":88.89605712890625,"accuracyHorizontal":5.8460001945495609,"provider":"fused"},"result":true,"event_timestamp":1585550757.621821,"delta_ms":0},{"type":"getStatus","timestamp":1585550759.252,"event_timestamp":1585550757.753471,"result":{"route_state":"tracking","location":{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550759.252,"speed":0.812778890132904,"bearing":256.5856628417969,"altitude":87.2701416015625,"accuracyHorizontal":6.525000095367432,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2077.826904296875,"remaining_leg_duration":511.355,"step_index":0,"remaining_step_distance":1732.1334228515626,"remaining_step_duration":426.0,"state_message":"","in_tunnel":false,"predicted":1.631,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201286315918,"lon":139.646240234375,"time":1585550758.196,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201455,"lon":139.646231,"time":1585550758.623,"speed":0.5589138269424439,"bearing":294.1886291503906,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"result":true,"event_timestamp":1585550758.624019,"delta_ms":0},{"type":"getStatus","timestamp":1585550760.324,"event_timestamp":1585550758.82491,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550760.324,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":1.701,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550760.324,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201443,"lon":139.6462308,"time":1585550759.621,"speed":0.2285701483488083,"bearing":274.1376647949219,"altitude":88.913818359375,"accuracyHorizontal":4.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585550759.621397,"delta_ms":0},{"type":"getStatus","timestamp":1585550761.375,"event_timestamp":1585550759.875666,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550761.375,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":1.754,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550760.324,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.620143,"lon":139.6462303,"time":1585550760.622,"speed":0.1444661170244217,"bearing":238.3053436279297,"altitude":88.96588134765625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550760.622328,"delta_ms":0},{"type":"getStatus","timestamp":1585550762.421,"event_timestamp":1585550760.922933,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550762.421,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":1.799,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550761.375,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201418,"lon":139.6462297,"time":1585550761.623,"speed":0.13403551280498506,"bearing":217.66213989257813,"altitude":89.0142822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550761.623538,"delta_ms":0},{"type":"getStatus","timestamp":1585550763.501,"event_timestamp":1585550762.002248,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550763.501,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":1.878,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550762.421,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201406,"lon":139.6462288,"time":1585550762.615,"speed":0.14903950691223145,"bearing":213.09005737304688,"altitude":89.3375244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550762.616139,"delta_ms":0},{"type":"getStatus","timestamp":1585550764.548,"event_timestamp":1585550763.049393,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550764.548,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":1.933,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550763.501,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201393,"lon":139.6462285,"time":1585550763.625,"speed":0.1428023725748062,"bearing":201.55003356933595,"altitude":89.475341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550763.626103,"delta_ms":0},{"type":"getStatus","timestamp":1585550765.622,"event_timestamp":1585550764.123781,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550765.622,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":1.997,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550764.548,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201384,"lon":139.6462282,"time":1585550764.647,"speed":0.11940532177686691,"bearing":196.9244842529297,"altitude":89.585693359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550764.647761,"delta_ms":0},{"type":"getStatus","timestamp":1585550766.718,"event_timestamp":1585550765.219333,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550766.718,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":2.071,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550765.622,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201378,"lon":139.6462276,"time":1585550765.63,"speed":0.10124742984771729,"bearing":208.49749755859376,"altitude":89.823486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550765.630358,"delta_ms":0},{"type":"getStatus","timestamp":1585550767.785,"event_timestamp":1585550766.287103,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550767.785,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":2.155,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550766.718,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201373,"lon":139.6462272,"time":1585550766.629,"speed":0.0778026133775711,"bearing":208.62014770507813,"altitude":89.86907958984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550766.629313,"delta_ms":0},{"type":"getStatus","timestamp":1585550768.869,"event_timestamp":1585550767.369763,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550768.869,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":2.24,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550767.785,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201373,"lon":139.6462267,"time":1585550767.63,"speed":0.05099208652973175,"bearing":236.93833923339845,"altitude":89.706298828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550767.631048,"delta_ms":0},{"type":"getStatus","timestamp":1585550769.937,"event_timestamp":1585550768.438219,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550769.937,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":2.307,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550768.869,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201369,"lon":139.6462258,"time":1585550768.62,"speed":0.07527830451726914,"bearing":240.51158142089845,"altitude":89.666015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550768.620717,"delta_ms":0},{"type":"getStatus","timestamp":1585550771.009,"event_timestamp":1585550769.510091,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550771.009,"speed":0.8478923439979553,"bearing":256.5856628417969,"altitude":88.8585205078125,"accuracyHorizontal":4.827000141143799,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2074.934814453125,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1729.2413330078126,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":2.389,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.64620971679688,"time":1585550769.937,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201354,"lon":139.6462206,"time":1585550769.637,"speed":0.6298035979270935,"bearing":254.9954833984375,"altitude":89.8404541015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550769.637749,"delta_ms":0},{"type":"getStatus","timestamp":1585550772.067,"event_timestamp":1585550770.567893,"result":{"route_state":"tracking","location":{"lat":35.620121002197269,"lon":139.6461944580078,"time":1585550772.067,"speed":0.39715567231178286,"bearing":256.5856628417969,"altitude":89.8404541015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2073.597900390625,"remaining_leg_duration":510.355,"step_index":0,"remaining_step_distance":1727.904296875,"remaining_step_duration":425.0,"state_message":"","in_tunnel":false,"predicted":2.43,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620121002197269,"lon":139.6461944580078,"time":1585550772.067,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201339,"lon":139.6462115,"time":1585550770.635,"speed":1.3692095279693604,"bearing":255.99310302734376,"altitude":89.8184814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550770.635824,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.62013,"lon":139.6461918,"time":1585550771.622,"speed":2.5764424800872804,"bearing":255.98326110839845,"altitude":89.7149658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550771.622551,"delta_ms":0},{"type":"getStatus","timestamp":1585550773.13,"event_timestamp":1585550771.631316,"result":{"route_state":"tracking","location":{"lat":35.620113372802737,"lon":139.6461639404297,"time":1585550773.13,"speed":1.948205828666687,"bearing":256.5856628417969,"altitude":89.7149658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2070.71728515625,"remaining_leg_duration":509.355,"step_index":0,"remaining_step_distance":1725.023681640625,"remaining_step_duration":424.0,"state_message":"","in_tunnel":false,"predicted":1.508,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620113372802737,"lon":139.6461639404297,"time":1585550773.13,"bearing":256.5856628417969}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6201237,"lon":139.6461593,"time":1585550772.62,"speed":3.5790727138519289,"bearing":255.99786376953126,"altitude":89.354248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550772.621067,"delta_ms":0},{"type":"getStatus","timestamp":1585550774.186,"event_timestamp":1585550772.687564,"result":{"route_state":"tracking","location":{"lat":35.6201057434082,"lon":139.64613342285157,"time":1585550774.186,"speed":2.9892587661743166,"bearing":256.5856628417969,"altitude":89.354248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2067.831787109375,"remaining_leg_duration":509.355,"step_index":0,"remaining_step_distance":1722.13818359375,"remaining_step_duration":423.0,"state_message":"","in_tunnel":false,"predicted":1.566,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.6201057434082,"lon":139.64613342285157,"time":1585550774.186,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201164,"lon":139.646119,"time":1585550773.636,"speed":4.512399196624756,"bearing":256.8391418457031,"altitude":89.047607421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550773.636475,"delta_ms":0},{"type":"getStatus","timestamp":1585550775.248,"event_timestamp":1585550773.748805,"result":{"route_state":"tracking","location":{"lat":35.62009048461914,"lon":139.64605712890626,"time":1585550775.248,"speed":4.004020690917969,"bearing":256.5856628417969,"altitude":89.047607421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2060.72216796875,"remaining_leg_duration":507.355,"step_index":0,"remaining_step_distance":1715.028564453125,"remaining_step_duration":421.0,"state_message":"","in_tunnel":false,"predicted":1.612,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.62009048461914,"lon":139.64605712890626,"time":1585550775.248,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6201089,"lon":139.6460769,"time":1585550774.642,"speed":5.286423206329346,"bearing":255.69947814941407,"altitude":88.671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550774.64234,"delta_ms":0},{"type":"getStatus","timestamp":1585550776.299,"event_timestamp":1585550774.799706,"result":{"route_state":"tracking","location":{"lat":35.620079040527347,"lon":139.64599609375,"time":1585550776.299,"speed":4.9076337814331059,"bearing":256.5856628417969,"altitude":88.671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2055.054931640625,"remaining_leg_duration":505.355,"step_index":0,"remaining_step_distance":1709.3614501953126,"remaining_step_duration":420.0,"state_message":"","in_tunnel":false,"predicted":1.657,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620079040527347,"lon":139.64599609375,"time":1585550776.299,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6200948,"lon":139.6460091,"time":1585550775.636,"speed":6.319541931152344,"bearing":255.99998474121095,"altitude":88.8162841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550775.636669,"delta_ms":0},{"type":"getStatus","timestamp":1585550777.344,"event_timestamp":1585550775.844861,"result":{"route_state":"tracking","location":{"lat":35.62006378173828,"lon":139.64590454101563,"time":1585550777.344,"speed":5.816983222961426,"bearing":256.5856628417969,"altitude":88.8162841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2046.6033935546876,"remaining_leg_duration":503.355,"step_index":0,"remaining_step_distance":1700.909912109375,"remaining_step_duration":418.0,"state_message":"","in_tunnel":false,"predicted":1.708,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.62006378173828,"lon":139.64590454101563,"time":1585550777.344,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6200797,"lon":139.6459336,"time":1585550776.626,"speed":6.969211101531982,"bearing":254.9994659423828,"altitude":88.51812744140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550776.627078,"delta_ms":0},{"type":"getStatus","timestamp":1585550778.404,"event_timestamp":1585550776.904945,"result":{"route_state":"tracking","location":{"lat":35.620052337646487,"lon":139.6458282470703,"time":1585550778.404,"speed":6.624236583709717,"bearing":256.5856628417969,"altitude":88.51812744140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2039.590576171875,"remaining_leg_duration":502.355,"step_index":0,"remaining_step_distance":1693.89697265625,"remaining_step_duration":416.0,"state_message":"","in_tunnel":false,"predicted":1.778,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.620052337646487,"lon":139.6458282470703,"time":1585550778.404,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6200624,"lon":139.6458536,"time":1585550777.626,"speed":7.059586524963379,"bearing":254.99925231933595,"altitude":88.060302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550777.626202,"delta_ms":0},{"type":"getStatus","timestamp":1585550779.458,"event_timestamp":1585550777.958943,"result":{"route_state":"tracking","location":{"lat":35.62002944946289,"lon":139.64572143554688,"time":1585550779.458,"speed":7.044794082641602,"bearing":256.5856628417969,"altitude":88.060302734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2029.5992431640626,"remaining_leg_duration":499.355,"step_index":0,"remaining_step_distance":1683.9056396484376,"remaining_step_duration":414.0,"state_message":"","in_tunnel":false,"predicted":1.832,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.62002944946289,"lon":139.64572143554688,"time":1585550779.458,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6200451,"lon":139.6457734,"time":1585550778.624,"speed":7.475069999694824,"bearing":254.9910125732422,"altitude":87.6890869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550778.62416,"delta_ms":0},{"type":"getStatus","timestamp":1585550780.51,"event_timestamp":1585550779.011024,"result":{"route_state":"tracking","location":{"lat":35.62001419067383,"lon":139.6456298828125,"time":1585550780.51,"speed":7.435524940490723,"bearing":256.5856628417969,"altitude":87.6890869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2021.14501953125,"remaining_leg_duration":497.355,"step_index":0,"remaining_step_distance":1675.4515380859376,"remaining_step_duration":412.0,"state_message":"","in_tunnel":false,"predicted":1.886,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.62001419067383,"lon":139.6456298828125,"time":1585550780.51,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6200275,"lon":139.6456904,"time":1585550779.621,"speed":8.050868034362793,"bearing":254.9844207763672,"altitude":87.3453369140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550779.622116,"delta_ms":0},{"type":"getStatus","timestamp":1585550781.556,"event_timestamp":1585550780.056494,"result":{"route_state":"tracking","location":{"lat":35.619991302490237,"lon":139.64552307128907,"time":1585550781.556,"speed":7.90990686416626,"bearing":256.5856628417969,"altitude":87.3453369140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2011.1534423828126,"remaining_leg_duration":495.355,"step_index":0,"remaining_step_distance":1665.4598388671876,"remaining_step_duration":409.0,"state_message":"","in_tunnel":false,"predicted":1.935,"shape_index":8,"intersection_index":7,"road_name":"","key_points":[{"lat":35.619991302490237,"lon":139.64552307128907,"time":1585550781.556,"bearing":256.5856628417969}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6200088,"lon":139.6455998,"time":1585550780.629,"speed":8.798202514648438,"bearing":255.949462890625,"altitude":86.81329345703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550780.629491,"delta_ms":0},{"type":"getStatus","timestamp":1585550782.599,"event_timestamp":1585550781.099928,"result":{"route_state":"tracking","location":{"lat":35.61996841430664,"lon":139.64541625976563,"time":1585550782.599,"speed":8.475126266479493,"bearing":255.17784118652345,"altitude":86.81329345703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":2001.16064453125,"remaining_leg_duration":492.355,"step_index":0,"remaining_step_distance":1655.4671630859376,"remaining_step_duration":407.0,"state_message":"","in_tunnel":false,"predicted":1.97,"shape_index":9,"intersection_index":8,"road_name":"","key_points":[{"lat":35.6199836730957,"lon":139.64549255371095,"time":1585550781.857,"bearing":256.5856628417969},{"lat":35.61996841430664,"lon":139.64541625976563,"time":1585550782.599,"bearing":255.17784118652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6199895,"lon":139.6454993,"time":1585550781.624,"speed":9.667495727539063,"bearing":255.9971160888672,"altitude":86.1575927734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550781.624689,"delta_ms":0},{"type":"getStatus","timestamp":1585550783.665,"event_timestamp":1585550782.16618,"result":{"route_state":"tracking","location":{"lat":35.61994552612305,"lon":139.6453094482422,"time":1585550783.665,"speed":9.307250022888184,"bearing":255.17784118652345,"altitude":86.1575927734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1991.16552734375,"remaining_leg_duration":490.355,"step_index":0,"remaining_step_distance":1645.471923828125,"remaining_step_duration":404.0,"state_message":"","in_tunnel":false,"predicted":2.041,"shape_index":9,"intersection_index":8,"road_name":"","key_points":[{"lat":35.61994552612305,"lon":139.6453094482422,"time":1585550783.665,"bearing":255.17784118652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6199684,"lon":139.6453906,"time":1585550782.62,"speed":10.42724895477295,"bearing":255.9969482421875,"altitude":85.27410888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550782.620762,"delta_ms":0},{"type":"getStatus","timestamp":1585550784.72,"event_timestamp":1585550783.22151,"result":{"route_state":"tracking","location":{"lat":35.619911193847659,"lon":139.64515686035157,"time":1585550784.72,"speed":10.151910781860352,"bearing":255.17784118652345,"altitude":85.27410888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1976.8397216796876,"remaining_leg_duration":486.355,"step_index":0,"remaining_step_distance":1631.1461181640626,"remaining_step_duration":401.0,"state_message":"","in_tunnel":false,"predicted":2.1,"shape_index":9,"intersection_index":8,"road_name":"","key_points":[{"lat":35.619911193847659,"lon":139.64515686035157,"time":1585550784.72,"bearing":255.17784118652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6199452,"lon":139.6452758,"time":1585550783.635,"speed":10.519949913024903,"bearing":255.00045776367188,"altitude":84.27880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550783.635589,"delta_ms":0},{"type":"getStatus","timestamp":1585550785.76,"event_timestamp":1585550784.261944,"result":{"route_state":"tracking","location":{"lat":35.61988830566406,"lon":139.64505004882813,"time":1585550785.76,"speed":10.349821090698243,"bearing":255.17784118652345,"altitude":84.27880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1966.8441162109376,"remaining_leg_duration":484.355,"step_index":0,"remaining_step_distance":1621.1505126953126,"remaining_step_duration":398.0,"state_message":"","in_tunnel":false,"predicted":2.125,"shape_index":9,"intersection_index":8,"road_name":"","key_points":[{"lat":35.61988830566406,"lon":139.64505004882813,"time":1585550785.76,"bearing":255.17784118652345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6199215,"lon":139.6451627,"time":1585550784.619,"speed":10.569310188293457,"bearing":255.99826049804688,"altitude":83.52374267578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550784.619469,"delta_ms":0},{"type":"getStatus","timestamp":1585550786.82,"event_timestamp":1585550785.321955,"result":{"route_state":"tracking","location":{"lat":35.61986541748047,"lon":139.64492797851563,"time":1585550786.82,"speed":10.582239151000977,"bearing":255.17784118652345,"altitude":83.52374267578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1955.51220703125,"remaining_leg_duration":481.355,"step_index":0,"remaining_step_distance":1609.8187255859376,"remaining_step_duration":396.0,"state_message":"","in_tunnel":false,"predicted":2.201,"shape_index":9,"intersection_index":8,"road_name":"","key_points":[{"lat":35.61986541748047,"lon":139.64492797851563,"time":1585550786.82,"bearing":255.17784118652345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6199,"lon":139.6450477,"time":1585550785.641,"speed":10.589886665344239,"bearing":255.99986267089845,"altitude":83.3956298828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550785.641969,"delta_ms":0},{"type":"getStatus","timestamp":1585550787.862,"event_timestamp":1585550786.363591,"result":{"route_state":"tracking","location":{"lat":35.61983871459961,"lon":139.64480590820313,"time":1585550787.862,"speed":10.633833885192871,"bearing":256.29278564453127,"altitude":83.3956298828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1944.0555419921876,"remaining_leg_duration":478.355,"step_index":0,"remaining_step_distance":1598.362060546875,"remaining_step_duration":393.0,"state_message":"","in_tunnel":false,"predicted":2.221,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.619842529296878,"lon":139.64483642578126,"time":1585550787.607,"bearing":255.17784118652345},{"lat":35.61983871459961,"lon":139.64480590820313,"time":1585550787.862,"bearing":256.29278564453127}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6198787,"lon":139.6449329,"time":1585550786.64,"speed":10.628780364990235,"bearing":256.997314453125,"altitude":82.74554443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550786.640992,"delta_ms":0},{"type":"getStatus","timestamp":1585550788.926,"event_timestamp":1585550787.427899,"result":{"route_state":"tracking","location":{"lat":35.61981201171875,"lon":139.64468383789063,"time":1585550788.926,"speed":10.695470809936524,"bearing":256.29278564453127,"altitude":82.74554443359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1932.63232421875,"remaining_leg_duration":475.355,"step_index":0,"remaining_step_distance":1586.938720703125,"remaining_step_duration":390.0,"state_message":"","in_tunnel":false,"predicted":2.286,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.61981201171875,"lon":139.64468383789063,"time":1585550788.926,"bearing":256.29278564453127}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6198576,"lon":139.644816,"time":1585550787.638,"speed":11.027691841125489,"bearing":255.9981689453125,"altitude":82.0484619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550787.638729,"delta_ms":0},{"type":"getStatus","timestamp":1585550789.974,"event_timestamp":1585550788.475303,"result":{"route_state":"tracking","location":{"lat":35.619789123535159,"lon":139.64454650878907,"time":1585550789.974,"speed":10.819988250732422,"bearing":256.29278564453127,"altitude":82.0484619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1919.9520263671876,"remaining_leg_duration":472.355,"step_index":0,"remaining_step_distance":1574.258544921875,"remaining_step_duration":387.0,"state_message":"","in_tunnel":false,"predicted":2.336,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.619789123535159,"lon":139.64454650878907,"time":1585550789.974,"bearing":256.29278564453127}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6198341,"lon":139.6446964,"time":1585550788.621,"speed":11.609623908996582,"bearing":255.99984741210938,"altitude":81.19927978515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550788.6212,"delta_ms":0},{"type":"getStatus","timestamp":1585550791.021,"event_timestamp":1585550789.522248,"result":{"route_state":"tracking","location":{"lat":35.61975860595703,"lon":139.64442443847657,"time":1585550791.021,"speed":11.34554386138916,"bearing":256.29278564453127,"altitude":81.19927978515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1908.418212890625,"remaining_leg_duration":469.355,"step_index":0,"remaining_step_distance":1562.7247314453126,"remaining_step_duration":384.0,"state_message":"","in_tunnel":false,"predicted":2.4,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.61975860595703,"lon":139.64442443847657,"time":1585550791.021,"bearing":256.29278564453127}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6198091,"lon":139.6445695,"time":1585550789.621,"speed":11.747443199157715,"bearing":255.99717712402345,"altitude":80.201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550789.621471,"delta_ms":0},{"type":"getStatus","timestamp":1585550792.063,"event_timestamp":1585550790.564424,"result":{"route_state":"tracking","location":{"lat":35.61973190307617,"lon":139.64427185058595,"time":1585550792.063,"speed":11.589780807495118,"bearing":256.29278564453127,"altitude":80.201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1894.2996826171876,"remaining_leg_duration":466.355,"step_index":0,"remaining_step_distance":1548.6060791015626,"remaining_step_duration":381.0,"state_message":"","in_tunnel":false,"predicted":2.442,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.61973190307617,"lon":139.64427185058595,"time":1585550792.063,"bearing":256.29278564453127}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6197836,"lon":139.644441,"time":1585550790.633,"speed":11.849507331848145,"bearing":255.0006561279297,"altitude":79.70166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550790.634085,"delta_ms":0},{"type":"getStatus","timestamp":1585550793.116,"event_timestamp":1585550791.617649,"result":{"route_state":"tracking","location":{"lat":35.61970520019531,"lon":139.64413452148438,"time":1585550793.116,"speed":11.82851791381836,"bearing":256.29278564453127,"altitude":79.70166015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1881.5220947265626,"remaining_leg_duration":463.355,"step_index":0,"remaining_step_distance":1535.8284912109376,"remaining_step_duration":377.0,"state_message":"","in_tunnel":false,"predicted":2.483,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.61970520019531,"lon":139.64413452148438,"time":1585550793.116,"bearing":256.29278564453127}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6197571,"lon":139.644312,"time":1585550791.666,"speed":11.92882251739502,"bearing":255.9976348876953,"altitude":78.9024658203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550791.66691,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6197317,"lon":139.6441821,"time":1585550792.624,"speed":11.969965934753418,"bearing":255.99998474121095,"altitude":79.48223876953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550792.62469,"delta_ms":0},{"type":"getStatus","timestamp":1585550794.161,"event_timestamp":1585550792.662596,"result":{"route_state":"tracking","location":{"lat":35.61967468261719,"lon":139.64398193359376,"time":1585550794.161,"speed":12.037869453430176,"bearing":256.29278564453127,"altitude":79.48223876953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1867.3023681640626,"remaining_leg_duration":459.355,"step_index":0,"remaining_step_distance":1521.6087646484376,"remaining_step_duration":374.0,"state_message":"","in_tunnel":false,"predicted":1.537,"shape_index":10,"intersection_index":9,"road_name":"","key_points":[{"lat":35.61967468261719,"lon":139.64398193359376,"time":1585550794.161,"bearing":256.29278564453127}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6197051,"lon":139.6440527,"time":1585550793.623,"speed":11.94052505493164,"bearing":255.0015411376953,"altitude":78.827880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550793.623387,"delta_ms":0},{"type":"getStatus","timestamp":1585550795.219,"event_timestamp":1585550793.720321,"result":{"route_state":"tracking","location":{"lat":35.6196403503418,"lon":139.6438751220703,"time":1585550795.219,"speed":11.92747974395752,"bearing":249.1045684814453,"altitude":78.827880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1856.9010009765626,"remaining_leg_duration":457.355,"step_index":0,"remaining_step_distance":1511.2073974609376,"remaining_step_duration":371.0,"state_message":"","in_tunnel":false,"predicted":1.596,"shape_index":11,"intersection_index":10,"road_name":"","key_points":[{"lat":35.619667053222659,"lon":139.64395141601563,"time":1585550794.454,"bearing":256.29278564453127},{"lat":35.6196403503418,"lon":139.6438751220703,"time":1585550795.219,"bearing":249.1045684814453}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6196752,"lon":139.6439249,"time":1585550794.621,"speed":12.000060081481934,"bearing":253.001220703125,"altitude":79.06787109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550794.6217,"delta_ms":0},{"type":"getStatus","timestamp":1585550796.262,"event_timestamp":1585550794.763954,"result":{"route_state":"tracking","location":{"lat":35.61960220336914,"lon":139.64373779296876,"time":1585550796.262,"speed":12.05894947052002,"bearing":249.1045684814453,"altitude":79.06787109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1843.7830810546876,"remaining_leg_duration":454.355,"step_index":0,"remaining_step_distance":1498.0894775390626,"remaining_step_duration":368.0,"state_message":"","in_tunnel":false,"predicted":1.641,"shape_index":11,"intersection_index":10,"road_name":"","key_points":[{"lat":35.61960220336914,"lon":139.64373779296876,"time":1585550796.262,"bearing":249.1045684814453}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6196409,"lon":139.6437987,"time":1585550795.625,"speed":11.93136978149414,"bearing":251.0048065185547,"altitude":78.5751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550795.625937,"delta_ms":0},{"type":"getStatus","timestamp":1585550797.323,"event_timestamp":1585550795.824225,"result":{"route_state":"tracking","location":{"lat":35.61955261230469,"lon":139.64358520507813,"time":1585550797.323,"speed":12.064865112304688,"bearing":249.1045684814453,"altitude":78.5751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1828.9146728515626,"remaining_leg_duration":450.355,"step_index":0,"remaining_step_distance":1483.22119140625,"remaining_step_duration":364.0,"state_message":"","in_tunnel":false,"predicted":1.698,"shape_index":11,"intersection_index":10,"road_name":"","key_points":[{"lat":35.61955261230469,"lon":139.64358520507813,"time":1585550797.323,"bearing":249.1045684814453}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6196032,"lon":139.6436743,"time":1585550796.614,"speed":11.89127254486084,"bearing":248.00656127929688,"altitude":78.34259033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550796.615108,"delta_ms":0},{"type":"getStatus","timestamp":1585550798.4,"event_timestamp":1585550796.901874,"result":{"route_state":"tracking","location":{"lat":35.6195182800293,"lon":139.6434783935547,"time":1585550798.4,"speed":11.964072227478028,"bearing":248.1424560546875,"altitude":78.34259033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1818.51318359375,"remaining_leg_duration":447.355,"step_index":0,"remaining_step_distance":1472.819580078125,"remaining_step_duration":362.0,"state_message":"","in_tunnel":false,"predicted":1.786,"shape_index":12,"intersection_index":10,"road_name":"","key_points":[{"lat":35.619529724121097,"lon":139.6435089111328,"time":1585550798.084,"bearing":249.1045684814453},{"lat":35.6195182800293,"lon":139.6434783935547,"time":1585550798.4,"bearing":248.1424560546875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.619561,"lon":139.6435529,"time":1585550797.629,"speed":11.900062561035157,"bearing":246.0010986328125,"altitude":77.87548828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550797.629311,"delta_ms":0},{"type":"getStatus","timestamp":1585550799.461,"event_timestamp":1585550797.962074,"result":{"route_state":"tracking","location":{"lat":35.619468688964847,"lon":139.64332580566407,"time":1585550799.461,"speed":11.912118911743164,"bearing":248.1424560546875,"altitude":77.87548828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1803.647216796875,"remaining_leg_duration":444.355,"step_index":0,"remaining_step_distance":1457.95361328125,"remaining_step_duration":358.0,"state_message":"","in_tunnel":false,"predicted":1.832,"shape_index":12,"intersection_index":10,"road_name":"","key_points":[{"lat":35.619468688964847,"lon":139.64332580566407,"time":1585550799.461,"bearing":248.1424560546875}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6195159,"lon":139.6434323,"time":1585550798.632,"speed":12.2197847366333,"bearing":244.00091552734376,"altitude":77.3150634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550798.632568,"delta_ms":0},{"type":"getStatus","timestamp":1585550800.504,"event_timestamp":1585550799.005914,"result":{"route_state":"tracking","location":{"lat":35.61943054199219,"lon":139.64320373535157,"time":1585550800.504,"speed":12.112244606018067,"bearing":248.1424560546875,"altitude":77.3150634765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1791.814697265625,"remaining_leg_duration":441.355,"step_index":0,"remaining_step_distance":1446.12109375,"remaining_step_duration":355.0,"state_message":"","in_tunnel":false,"predicted":1.872,"shape_index":12,"intersection_index":10,"road_name":"","key_points":[{"lat":35.61943054199219,"lon":139.64320373535157,"time":1585550800.504,"bearing":248.1424560546875}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6194676,"lon":139.6433098,"time":1585550799.628,"speed":12.85917854309082,"bearing":243.99908447265626,"altitude":76.8223876953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550799.628982,"delta_ms":0},{"type":"getStatus","timestamp":1585550801.564,"event_timestamp":1585550800.067375,"result":{"route_state":"tracking","location":{"lat":35.619380950927737,"lon":139.64306640625,"time":1585550801.564,"speed":12.560041427612305,"bearing":246.7055206298828,"altitude":76.8223876953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1778.2130126953126,"remaining_leg_duration":437.355,"step_index":0,"remaining_step_distance":1432.51953125,"remaining_step_duration":352.0,"state_message":"","in_tunnel":false,"predicted":1.936,"shape_index":13,"intersection_index":11,"road_name":"","key_points":[{"lat":35.619415283203128,"lon":139.64315795898438,"time":1585550800.852,"bearing":248.1424560546875},{"lat":35.619380950927737,"lon":139.64306640625,"time":1585550801.564,"bearing":246.7055206298828}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6194172,"lon":139.64318,"time":1585550800.61,"speed":13.037314414978028,"bearing":244.99269104003907,"altitude":76.7642822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550800.610602,"delta_ms":0},{"type":"getStatus","timestamp":1585550802.612,"event_timestamp":1585550801.114261,"result":{"route_state":"tracking","location":{"lat":35.61933135986328,"lon":139.64291381835938,"time":1585550802.612,"speed":12.953415870666504,"bearing":242.86195373535157,"altitude":76.7642822265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1763.3458251953126,"remaining_leg_duration":434.355,"step_index":0,"remaining_step_distance":1417.6522216796876,"remaining_step_duration":348.0,"state_message":"","in_tunnel":false,"predicted":2.002,"shape_index":14,"intersection_index":11,"road_name":"","key_points":[{"lat":35.61933517456055,"lon":139.64292907714845,"time":1585550802.51,"bearing":246.7055206298828},{"lat":35.61933135986328,"lon":139.64291381835938,"time":1585550802.612,"bearing":242.86195373535157}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6193675,"lon":139.6430486,"time":1585550801.622,"speed":12.950188636779786,"bearing":244.00094604492188,"altitude":76.5792236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550801.622212,"delta_ms":0},{"type":"getStatus","timestamp":1585550803.66,"event_timestamp":1585550802.16274,"result":{"route_state":"tracking","location":{"lat":35.6192741394043,"lon":139.6427764892578,"time":1585550803.66,"speed":12.914569854736329,"bearing":242.86195373535157,"altitude":76.5792236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1749.39794921875,"remaining_leg_duration":430.355,"step_index":0,"remaining_step_distance":1403.7044677734376,"remaining_step_duration":345.0,"state_message":"","in_tunnel":false,"predicted":2.038,"shape_index":14,"intersection_index":11,"road_name":"","key_points":[{"lat":35.6192741394043,"lon":139.6427764892578,"time":1585550803.66,"bearing":242.86195373535157}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6193166,"lon":139.642919,"time":1585550802.653,"speed":12.930024147033692,"bearing":244.00003051757813,"altitude":75.8983154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550802.654234,"delta_ms":0},{"type":"getStatus","timestamp":1585550804.707,"event_timestamp":1585550803.211402,"result":{"route_state":"tracking","location":{"lat":35.61921310424805,"lon":139.64263916015626,"time":1585550804.707,"speed":12.94823169708252,"bearing":244.8546600341797,"altitude":75.8983154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1735.2413330078126,"remaining_leg_duration":427.355,"step_index":0,"remaining_step_distance":1389.5477294921876,"remaining_step_duration":341.0,"state_message":"","in_tunnel":false,"predicted":2.054,"shape_index":15,"intersection_index":12,"road_name":"","key_points":[{"lat":35.619258880615237,"lon":139.6427459716797,"time":1585550803.899,"bearing":242.86195373535157},{"lat":35.61921310424805,"lon":139.64263916015626,"time":1585550804.707,"bearing":244.8546600341797}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6192661,"lon":139.6427908,"time":1585550803.634,"speed":12.732034683227539,"bearing":244.0030975341797,"altitude":75.98724365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550803.6351,"delta_ms":0},{"type":"getStatus","timestamp":1585550805.769,"event_timestamp":1585550804.271588,"result":{"route_state":"tracking","location":{"lat":35.61916732788086,"lon":139.6425018310547,"time":1585550805.769,"speed":12.789531707763672,"bearing":244.8546600341797,"altitude":75.98724365234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1721.8370361328126,"remaining_leg_duration":424.355,"step_index":0,"remaining_step_distance":1376.1435546875,"remaining_step_duration":338.0,"state_message":"","in_tunnel":false,"predicted":2.135,"shape_index":15,"intersection_index":12,"road_name":"","key_points":[{"lat":35.61916732788086,"lon":139.6425018310547,"time":1585550805.769,"bearing":244.8546600341797}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6192167,"lon":139.6426652,"time":1585550804.631,"speed":12.2166166305542,"bearing":244.01052856445313,"altitude":75.8291015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550804.631485,"delta_ms":0},{"type":"getStatus","timestamp":1585550806.82,"event_timestamp":1585550805.322031,"result":{"route_state":"tracking","location":{"lat":35.619117736816409,"lon":139.6423797607422,"time":1585550806.82,"speed":12.416775703430176,"bearing":242.20147705078126,"altitude":75.8291015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1709.490478515625,"remaining_leg_duration":421.355,"step_index":0,"remaining_step_distance":1363.7969970703126,"remaining_step_duration":335.0,"state_message":"","in_tunnel":false,"predicted":2.189,"shape_index":16,"intersection_index":12,"road_name":"","key_points":[{"lat":35.61914825439453,"lon":139.6424560546875,"time":1585550806.165,"bearing":244.8546600341797},{"lat":35.619117736816409,"lon":139.6423797607422,"time":1585550806.82,"bearing":242.20147705078126}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6191705,"lon":139.6425461,"time":1585550805.616,"speed":11.286264419555664,"bearing":244.0631866455078,"altitude":75.74041748046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550805.616289,"delta_ms":0},{"type":"getStatus","timestamp":1585550807.866,"event_timestamp":1585550806.37008,"result":{"route_state":"tracking","location":{"lat":35.619075775146487,"lon":139.64227294921876,"time":1585550807.866,"speed":11.748739242553711,"bearing":242.20147705078126,"altitude":75.74041748046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1698.755615234375,"remaining_leg_duration":418.355,"step_index":0,"remaining_step_distance":1353.06201171875,"remaining_step_duration":332.0,"state_message":"","in_tunnel":false,"predicted":2.25,"shape_index":16,"intersection_index":12,"road_name":"","key_points":[{"lat":35.619075775146487,"lon":139.64227294921876,"time":1585550807.866,"bearing":242.20147705078126}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6191275,"lon":139.6424365,"time":1585550806.657,"speed":10.645296096801758,"bearing":243.01287841796876,"altitude":75.677001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550806.657335,"delta_ms":0},{"type":"getStatus","timestamp":1585550808.922,"event_timestamp":1585550807.42992,"result":{"route_state":"tracking","location":{"lat":35.61902618408203,"lon":139.6422119140625,"time":1585550808.922,"speed":10.942130088806153,"bearing":226.5218505859375,"altitude":75.677001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1690.9539794921876,"remaining_leg_duration":416.355,"step_index":0,"remaining_step_distance":1345.260498046875,"remaining_step_duration":331.0,"state_message":"","in_tunnel":false,"predicted":2.265,"shape_index":17,"intersection_index":13,"road_name":"","key_points":[{"lat":35.619056701660159,"lon":139.64224243164063,"time":1585550808.334,"bearing":242.20147705078126},{"lat":35.61902618408203,"lon":139.6422119140625,"time":1585550808.922,"bearing":226.5218505859375}]},"delta_ms":7},{"type":"updateLocation","location":{"lat":35.6190835,"lon":139.6423362,"time":1585550807.626,"speed":9.827141761779786,"bearing":237.03970336914063,"altitude":75.87445068359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550807.626937,"delta_ms":0},{"type":"getStatus","timestamp":1585550809.999,"event_timestamp":1585550808.503442,"result":{"route_state":"tracking","location":{"lat":35.618953704833987,"lon":139.64212036132813,"time":1585550809.999,"speed":10.321660995483399,"bearing":226.5218505859375,"altitude":75.87445068359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1679.4110107421876,"remaining_leg_duration":413.355,"step_index":0,"remaining_step_distance":1333.7174072265626,"remaining_step_duration":328.0,"state_message":"","in_tunnel":false,"predicted":2.373,"shape_index":17,"intersection_index":13,"road_name":"","key_points":[{"lat":35.618953704833987,"lon":139.64212036132813,"time":1585550809.999,"bearing":226.5218505859375}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6190335,"lon":139.6422508,"time":1585550808.618,"speed":9.470388412475586,"bearing":230.00674438476563,"altitude":75.69415283203125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550808.619173,"delta_ms":0},{"type":"getStatus","timestamp":1585550811.045,"event_timestamp":1585550809.54864,"result":{"route_state":"tracking","location":{"lat":35.618896484375,"lon":139.6420440673828,"time":1585550811.045,"speed":9.681222915649414,"bearing":222.08941650390626,"altitude":75.69415283203125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1669.964599609375,"remaining_leg_duration":411.355,"step_index":0,"remaining_step_distance":1324.2711181640626,"remaining_step_duration":325.0,"state_message":"","in_tunnel":false,"predicted":2.427,"shape_index":18,"intersection_index":13,"road_name":"","key_points":[{"lat":35.61891555786133,"lon":139.64205932617188,"time":1585550810.766,"bearing":226.5218505859375},{"lat":35.618896484375,"lon":139.6420440673828,"time":1585550811.045,"bearing":222.08941650390626}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6189764,"lon":139.6421731,"time":1585550809.632,"speed":10.071091651916504,"bearing":226.11074829101563,"altitude":75.8355712890625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550809.633096,"delta_ms":0},{"type":"getStatus","timestamp":1585550812.103,"event_timestamp":1585550810.608045,"result":{"route_state":"tracking","location":{"lat":35.61882781982422,"lon":139.6419677734375,"time":1585550812.103,"speed":9.864709854125977,"bearing":222.08941650390626,"altitude":75.8355712890625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1659.6893310546876,"remaining_leg_duration":408.355,"step_index":0,"remaining_step_distance":1313.995849609375,"remaining_step_duration":323.0,"state_message":"","in_tunnel":false,"predicted":2.471,"shape_index":18,"intersection_index":13,"road_name":"","key_points":[{"lat":35.61882781982422,"lon":139.6419677734375,"time":1585550812.103,"bearing":222.08941650390626}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6189116,"lon":139.6420932,"time":1585550810.678,"speed":10.05251693725586,"bearing":225.12814331054688,"altitude":76.033447265625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550810.678541,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6188463,"lon":139.6420149,"time":1585550811.612,"speed":9.98095989227295,"bearing":225.0001983642578,"altitude":76.8719482421875,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585550811.61243,"delta_ms":0},{"type":"getStatus","timestamp":1585550813.169,"event_timestamp":1585550811.672025,"result":{"route_state":"tracking","location":{"lat":35.618751525878909,"lon":139.64187622070313,"time":1585550813.169,"speed":10.022754669189454,"bearing":220.553466796875,"altitude":76.8719482421875,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1647.8389892578126,"remaining_leg_duration":405.355,"step_index":0,"remaining_step_distance":1302.1453857421876,"remaining_step_duration":320.0,"state_message":"","in_tunnel":false,"predicted":1.557,"shape_index":19,"intersection_index":14,"road_name":"","key_points":[{"lat":35.618778228759769,"lon":139.64190673828126,"time":1585550812.804,"bearing":222.08941650390626},{"lat":35.618751525878909,"lon":139.64187622070313,"time":1585550813.169,"bearing":220.553466796875}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6187819,"lon":139.641935,"time":1585550812.626,"speed":9.950196266174317,"bearing":225.00001525878907,"altitude":75.68206787109375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"result":true,"event_timestamp":1585550812.626933,"delta_ms":0},{"type":"getStatus","timestamp":1585550814.22,"event_timestamp":1585550812.722695,"result":{"route_state":"tracking","location":{"lat":35.61868667602539,"lon":139.64181518554688,"time":1585550814.22,"speed":9.992155075073243,"bearing":222.89341735839845,"altitude":75.68206787109375,"accuracyHorizontal":3.671999931335449,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1638.7452392578126,"remaining_leg_duration":403.355,"step_index":0,"remaining_step_distance":1293.0516357421876,"remaining_step_duration":318.0,"state_message":"","in_tunnel":false,"predicted":1.594,"shape_index":20,"intersection_index":15,"road_name":"","key_points":[{"lat":35.61870574951172,"lon":139.64183044433595,"time":1585550813.927,"bearing":220.553466796875},{"lat":35.61868667602539,"lon":139.64181518554688,"time":1585550814.22,"bearing":222.89341735839845}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6187171,"lon":139.6418569,"time":1585550813.617,"speed":10.088973999023438,"bearing":224.00706481933595,"altitude":75.20440673828125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550813.617325,"delta_ms":0},{"type":"getStatus","timestamp":1585550815.268,"event_timestamp":1585550813.772199,"result":{"route_state":"tracking","location":{"lat":35.61861038208008,"lon":139.6417236328125,"time":1585550815.268,"speed":10.056978225708008,"bearing":222.89341735839845,"altitude":75.20440673828125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1626.920654296875,"remaining_leg_duration":400.355,"step_index":0,"remaining_step_distance":1281.2271728515626,"remaining_step_duration":315.0,"state_message":"","in_tunnel":false,"predicted":1.651,"shape_index":20,"intersection_index":15,"road_name":"","key_points":[{"lat":35.61861038208008,"lon":139.6417236328125,"time":1585550815.268,"bearing":222.89341735839845}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.61865,"lon":139.6417785,"time":1585550814.64,"speed":10.534915924072266,"bearing":223.01220703125,"altitude":74.888916015625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550814.640574,"delta_ms":0},{"type":"getStatus","timestamp":1585550816.313,"event_timestamp":1585550814.817298,"result":{"route_state":"tracking","location":{"lat":35.6185417175293,"lon":139.6416473388672,"time":1585550816.313,"speed":10.339105606079102,"bearing":222.31675720214845,"altitude":74.888916015625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1616.5081787109376,"remaining_leg_duration":398.355,"step_index":0,"remaining_step_distance":1270.8145751953126,"remaining_step_duration":312.0,"state_message":"","in_tunnel":false,"predicted":1.673,"shape_index":21,"intersection_index":16,"road_name":"","key_points":[{"lat":35.61854553222656,"lon":139.6416473388672,"time":1585550816.27,"bearing":222.89341735839845},{"lat":35.6185417175293,"lon":139.6416473388672,"time":1585550816.313,"bearing":222.31675720214845}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6185793,"lon":139.6416998,"time":1585550815.624,"speed":10.809703826904297,"bearing":222.0010986328125,"altitude":74.860107421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550815.624843,"delta_ms":0},{"type":"getStatus","timestamp":1585550817.399,"event_timestamp":1585550815.901315,"result":{"route_state":"tracking","location":{"lat":35.618465423583987,"lon":139.6415557861328,"time":1585550817.399,"speed":10.715243339538575,"bearing":222.31675720214845,"altitude":74.860107421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1604.7607421875,"remaining_leg_duration":395.355,"step_index":0,"remaining_step_distance":1259.0672607421876,"remaining_step_duration":309.0,"state_message":"","in_tunnel":false,"predicted":1.775,"shape_index":21,"intersection_index":16,"road_name":"","key_points":[{"lat":35.618465423583987,"lon":139.6415557861328,"time":1585550817.399,"bearing":222.31675720214845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6185065,"lon":139.6416194,"time":1585550816.621,"speed":10.740076065063477,"bearing":221.99996948242188,"altitude":74.41656494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550816.621834,"delta_ms":0},{"type":"getStatus","timestamp":1585550818.453,"event_timestamp":1585550816.957271,"result":{"route_state":"tracking","location":{"lat":35.618377685546878,"lon":139.64146423339845,"time":1585550818.453,"speed":10.750802040100098,"bearing":222.31675720214845,"altitude":74.41656494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1591.9595947265626,"remaining_leg_duration":392.355,"step_index":0,"remaining_step_distance":1246.2659912109376,"remaining_step_duration":306.0,"state_message":"","in_tunnel":false,"predicted":1.832,"shape_index":21,"intersection_index":16,"road_name":"","key_points":[{"lat":35.618377685546878,"lon":139.64146423339845,"time":1585550818.453,"bearing":222.31675720214845}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6184347,"lon":139.6415396,"time":1585550817.629,"speed":10.520211219787598,"bearing":221.9999237060547,"altitude":74.56622314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550817.62961,"delta_ms":0},{"type":"getStatus","timestamp":1585550819.498,"event_timestamp":1585550817.999338,"result":{"route_state":"tracking","location":{"lat":35.61831283569336,"lon":139.64138793945313,"time":1585550819.498,"speed":10.595006942749024,"bearing":222.0896453857422,"altitude":74.56622314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1581.976318359375,"remaining_leg_duration":389.355,"step_index":0,"remaining_step_distance":1236.28271484375,"remaining_step_duration":304.0,"state_message":"","in_tunnel":false,"predicted":1.869,"shape_index":22,"intersection_index":17,"road_name":"","key_points":[{"lat":35.61835479736328,"lon":139.6414337158203,"time":1585550818.845,"bearing":222.31675720214845},{"lat":35.61831283569336,"lon":139.64138793945313,"time":1585550819.498,"bearing":222.0896453857422}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6183651,"lon":139.6414617,"time":1585550818.636,"speed":10.17087173461914,"bearing":221.9995574951172,"altitude":74.87158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550818.636759,"delta_ms":0},{"type":"getStatus","timestamp":1585550820.562,"event_timestamp":1585550819.063943,"result":{"route_state":"tracking","location":{"lat":35.61823654174805,"lon":139.6413116455078,"time":1585550820.562,"speed":10.311857223510743,"bearing":222.0896453857422,"altitude":74.87158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1571.03369140625,"remaining_leg_duration":387.355,"step_index":0,"remaining_step_distance":1225.3402099609376,"remaining_step_duration":301.0,"state_message":"","in_tunnel":false,"predicted":1.926,"shape_index":22,"intersection_index":17,"road_name":"","key_points":[{"lat":35.61823654174805,"lon":139.6413116455078,"time":1585550820.562,"bearing":222.0896453857422}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6182986,"lon":139.6413869,"time":1585550819.619,"speed":9.750554084777832,"bearing":221.999755859375,"altitude":75.2535400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550819.619276,"delta_ms":0},{"type":"getStatus","timestamp":1585550821.607,"event_timestamp":1585550820.108626,"result":{"route_state":"tracking","location":{"lat":35.618167877197269,"lon":139.64122009277345,"time":1585550821.607,"speed":9.998170852661133,"bearing":222.0896453857422,"altitude":75.2535400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1559.81689453125,"remaining_leg_duration":384.355,"step_index":0,"remaining_step_distance":1214.123291015625,"remaining_step_duration":298.0,"state_message":"","in_tunnel":false,"predicted":1.988,"shape_index":22,"intersection_index":17,"road_name":"","key_points":[{"lat":35.618167877197269,"lon":139.64122009277345,"time":1585550821.607,"bearing":222.0896453857422}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6182351,"lon":139.6413149,"time":1585550820.632,"speed":9.32111930847168,"bearing":223.99441528320313,"altitude":75.65673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550820.632391,"delta_ms":0},{"type":"getStatus","timestamp":1585550822.65,"event_timestamp":1585550821.151284,"result":{"route_state":"tracking","location":{"lat":35.61811065673828,"lon":139.6411590576172,"time":1585550822.65,"speed":9.557602882385254,"bearing":221.80348205566407,"altitude":75.65673828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1551.3858642578126,"remaining_leg_duration":382.355,"step_index":0,"remaining_step_distance":1205.6923828125,"remaining_step_duration":296.0,"state_message":"","in_tunnel":false,"predicted":2.018,"shape_index":23,"intersection_index":18,"road_name":"","key_points":[{"lat":35.61814880371094,"lon":139.64120483398438,"time":1585550821.919,"bearing":222.0896453857422},{"lat":35.61811065673828,"lon":139.6411590576172,"time":1585550822.65,"bearing":221.80348205566407}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.618176,"lon":139.6412448,"time":1585550821.637,"speed":9.080349922180176,"bearing":223.9999237060547,"altitude":75.62945556640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550821.637274,"delta_ms":0},{"type":"getStatus","timestamp":1585550823.694,"event_timestamp":1585550822.195584,"result":{"route_state":"tracking","location":{"lat":35.6180534362793,"lon":139.64109802246095,"time":1585550823.694,"speed":9.197489738464356,"bearing":221.80348205566407,"altitude":75.62945556640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1542.9609375,"remaining_leg_duration":380.355,"step_index":0,"remaining_step_distance":1197.267333984375,"remaining_step_duration":294.0,"state_message":"","in_tunnel":false,"predicted":2.057,"shape_index":23,"intersection_index":18,"road_name":"","key_points":[{"lat":35.6180534362793,"lon":139.64109802246095,"time":1585550823.694,"bearing":221.80348205566407}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.618118,"lon":139.6411763,"time":1585550822.632,"speed":9.070046424865723,"bearing":223.99998474121095,"altitude":75.912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550822.632751,"delta_ms":0},{"type":"getStatus","timestamp":1585550824.747,"event_timestamp":1585550823.248466,"result":{"route_state":"tracking","location":{"lat":35.61798858642578,"lon":139.64102172851563,"time":1585550824.747,"speed":9.114276885986329,"bearing":221.80348205566407,"altitude":75.912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1532.9735107421876,"remaining_leg_duration":377.355,"step_index":0,"remaining_step_distance":1187.280029296875,"remaining_step_duration":292.0,"state_message":"","in_tunnel":false,"predicted":2.115,"shape_index":23,"intersection_index":18,"road_name":"","key_points":[{"lat":35.61798858642578,"lon":139.64102172851563,"time":1585550824.747,"bearing":221.80348205566407}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6180582,"lon":139.6411062,"time":1585550823.618,"speed":9.23969841003418,"bearing":221.00389099121095,"altitude":75.807861328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550823.618761,"delta_ms":0},{"type":"getStatus","timestamp":1585550825.793,"event_timestamp":1585550824.294071,"result":{"route_state":"tracking","location":{"lat":35.617923736572269,"lon":139.64096069335938,"time":1585550825.793,"speed":9.163399696350098,"bearing":221.80348205566407,"altitude":75.807861328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1523.914306640625,"remaining_leg_duration":375.355,"step_index":0,"remaining_step_distance":1178.220703125,"remaining_step_duration":290.0,"state_message":"","in_tunnel":false,"predicted":2.175,"shape_index":23,"intersection_index":18,"road_name":"","key_points":[{"lat":35.617923736572269,"lon":139.64096069335938,"time":1585550825.793,"bearing":221.80348205566407}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6179961,"lon":139.6410395,"time":1585550824.62,"speed":9.289738655090332,"bearing":221.9932098388672,"altitude":76.895751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550824.620312,"delta_ms":0},{"type":"getStatus","timestamp":1585550826.832,"event_timestamp":1585550825.333416,"result":{"route_state":"tracking","location":{"lat":35.617862701416019,"lon":139.64088439941407,"time":1585550826.832,"speed":9.282072067260743,"bearing":221.80348205566407,"altitude":76.895751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1514.2462158203126,"remaining_leg_duration":373.355,"step_index":0,"remaining_step_distance":1168.5526123046876,"remaining_step_duration":287.0,"state_message":"","in_tunnel":false,"predicted":2.212,"shape_index":23,"intersection_index":18,"road_name":"","key_points":[{"lat":35.617862701416019,"lon":139.64088439941407,"time":1585550826.832,"bearing":221.80348205566407}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6179348,"lon":139.6409699,"time":1585550825.621,"speed":9.56713581085205,"bearing":222.99099731445313,"altitude":77.5838623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550825.62118,"delta_ms":0},{"type":"getStatus","timestamp":1585550827.872,"event_timestamp":1585550826.372922,"result":{"route_state":"tracking","location":{"lat":35.61779022216797,"lon":139.64080810546876,"time":1585550827.872,"speed":9.399699211120606,"bearing":221.15013122558595,"altitude":77.5838623046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1503.6300048828126,"remaining_leg_duration":370.355,"step_index":0,"remaining_step_distance":1157.9364013671876,"remaining_step_duration":285.0,"state_message":"","in_tunnel":false,"predicted":2.251,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.61784362792969,"lon":139.640869140625,"time":1585550827.079,"bearing":221.80348205566407},{"lat":35.61779022216797,"lon":139.64080810546876,"time":1585550827.872,"bearing":221.15013122558595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6178709,"lon":139.6408964,"time":1585550826.629,"speed":10.029417991638184,"bearing":223.00015258789063,"altitude":77.20867919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550826.629941,"delta_ms":0},{"type":"getStatus","timestamp":1585550828.914,"event_timestamp":1585550827.414785,"result":{"route_state":"tracking","location":{"lat":35.61771774291992,"lon":139.64073181152345,"time":1585550828.914,"speed":9.816718101501465,"bearing":221.15013122558595,"altitude":77.20867919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1493.0145263671876,"remaining_leg_duration":367.355,"step_index":0,"remaining_step_distance":1147.321044921875,"remaining_step_duration":282.0,"state_message":"","in_tunnel":false,"predicted":2.285,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.61771774291992,"lon":139.64073181152345,"time":1585550828.914,"bearing":221.15013122558595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6178032,"lon":139.6408206,"time":1585550827.628,"speed":10.445921897888184,"bearing":222.01083374023438,"altitude":77.28912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550827.629039,"delta_ms":0},{"type":"getStatus","timestamp":1585550829.987,"event_timestamp":1585550828.487941,"result":{"route_state":"tracking","location":{"lat":35.617645263671878,"lon":139.64065551757813,"time":1585550829.987,"speed":10.23103141784668,"bearing":221.15013122558595,"altitude":77.28912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1482.396728515625,"remaining_leg_duration":365.355,"step_index":0,"remaining_step_distance":1136.703125,"remaining_step_duration":279.0,"state_message":"","in_tunnel":false,"predicted":2.359,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.617645263671878,"lon":139.64065551757813,"time":1585550829.987,"bearing":221.15013122558595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.617731,"lon":139.6407425,"time":1585550828.627,"speed":11.159173965454102,"bearing":222.00030517578126,"altitude":76.8165283203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550828.627323,"delta_ms":0},{"type":"getStatus","timestamp":1585550831.028,"event_timestamp":1585550829.530643,"result":{"route_state":"tracking","location":{"lat":35.6175537109375,"lon":139.6405487060547,"time":1585550831.028,"speed":10.811903953552246,"bearing":221.15013122558595,"altitude":76.8165283203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1468.3577880859376,"remaining_leg_duration":361.355,"step_index":0,"remaining_step_distance":1122.6641845703126,"remaining_step_duration":276.0,"state_message":"","in_tunnel":false,"predicted":2.401,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.6175537109375,"lon":139.6405487060547,"time":1585550831.028,"bearing":221.15013122558595}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6176545,"lon":139.6406593,"time":1585550829.621,"speed":11.389735221862793,"bearing":221.00112915039063,"altitude":76.9620361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550829.621867,"delta_ms":0},{"type":"getStatus","timestamp":1585550832.072,"event_timestamp":1585550830.573775,"result":{"route_state":"tracking","location":{"lat":35.61746597290039,"lon":139.6404571533203,"time":1585550832.072,"speed":11.251303672790528,"bearing":221.15013122558595,"altitude":76.9620361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1455.55419921875,"remaining_leg_duration":358.355,"step_index":0,"remaining_step_distance":1109.860595703125,"remaining_step_duration":273.0,"state_message":"","in_tunnel":false,"predicted":2.451,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.61746597290039,"lon":139.6404571533203,"time":1585550832.072,"bearing":221.15013122558595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6175767,"lon":139.6405748,"time":1585550830.626,"speed":10.993590354919434,"bearing":220.9976043701172,"altitude":77.32733154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550830.626331,"delta_ms":0},{"type":"getStatus","timestamp":1585550833.118,"event_timestamp":1585550831.619171,"result":{"route_state":"tracking","location":{"lat":35.61738967895508,"lon":139.640380859375,"time":1585550833.118,"speed":11.094313621520996,"bearing":221.15013122558595,"altitude":77.32733154296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1444.6173095703126,"remaining_leg_duration":355.355,"step_index":0,"remaining_step_distance":1098.923828125,"remaining_step_duration":270.0,"state_message":"","in_tunnel":false,"predicted":2.492,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.61738967895508,"lon":139.640380859375,"time":1585550833.118,"bearing":221.15013122558595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6175033,"lon":139.6404921,"time":1585550831.681,"speed":10.841846466064454,"bearing":221.9885711669922,"altitude":77.90576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550831.682016,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6174307,"lon":139.6404066,"time":1585550832.617,"speed":11.226618766784668,"bearing":222.99261474609376,"altitude":78.464111328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550832.618039,"delta_ms":0},{"type":"getStatus","timestamp":1585550834.176,"event_timestamp":1585550832.677232,"result":{"route_state":"tracking","location":{"lat":35.6173095703125,"lon":139.64028930664063,"time":1585550834.176,"speed":11.135784149169922,"bearing":221.15013122558595,"altitude":78.464111328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1432.4495849609376,"remaining_leg_duration":352.355,"step_index":0,"remaining_step_distance":1086.756103515625,"remaining_step_duration":267.0,"state_message":"","in_tunnel":false,"predicted":1.559,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.6173095703125,"lon":139.64028930664063,"time":1585550834.176,"bearing":221.15013122558595}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6173565,"lon":139.6403196,"time":1585550833.629,"speed":11.599518775939942,"bearing":223.99879455566407,"altitude":78.471435546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550833.629672,"delta_ms":0},{"type":"getStatus","timestamp":1585550835.221,"event_timestamp":1585550833.722405,"result":{"route_state":"tracking","location":{"lat":35.61723327636719,"lon":139.6402130126953,"time":1585550835.221,"speed":11.461917877197266,"bearing":221.15013122558595,"altitude":78.471435546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1421.51220703125,"remaining_leg_duration":350.355,"step_index":0,"remaining_step_distance":1075.8187255859376,"remaining_step_duration":264.0,"state_message":"","in_tunnel":false,"predicted":1.592,"shape_index":24,"intersection_index":19,"road_name":"","key_points":[{"lat":35.61723327636719,"lon":139.6402130126953,"time":1585550835.221,"bearing":221.15013122558595}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6172812,"lon":139.640231,"time":1585550834.627,"speed":11.362239837646485,"bearing":223.99960327148438,"altitude":78.02197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550834.627577,"delta_ms":0},{"type":"getStatus","timestamp":1585550836.265,"event_timestamp":1585550834.766354,"result":{"route_state":"tracking","location":{"lat":35.617164611816409,"lon":139.6400909423828,"time":1585550836.265,"speed":11.441933631896973,"bearing":227.1234130859375,"altitude":78.02197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1407.8856201171876,"remaining_leg_duration":346.355,"step_index":0,"remaining_step_distance":1062.1920166015626,"remaining_step_duration":261.0,"state_message":"","in_tunnel":false,"predicted":1.638,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61723327636719,"lon":139.6402130126953,"time":1585550835.221,"bearing":221.15013122558595},{"lat":35.61720275878906,"lon":139.64013671875,"time":1585550835.81,"bearing":243.800537109375},{"lat":35.617164611816409,"lon":139.6400909423828,"time":1585550836.265,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6172079,"lon":139.6401451,"time":1585550835.614,"speed":11.140084266662598,"bearing":224.99960327148438,"altitude":77.515869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550835.614489,"delta_ms":0},{"type":"getStatus","timestamp":1585550837.32,"event_timestamp":1585550835.821237,"result":{"route_state":"tracking","location":{"lat":35.617095947265628,"lon":139.63999938964845,"time":1585550837.32,"speed":11.230047225952149,"bearing":227.1234130859375,"altitude":77.515869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1396.6187744140626,"remaining_leg_duration":344.355,"step_index":0,"remaining_step_distance":1050.9251708984376,"remaining_step_duration":258.0,"state_message":"","in_tunnel":false,"predicted":1.706,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.617095947265628,"lon":139.63999938964845,"time":1585550837.32,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.617138,"lon":139.6400603,"time":1585550836.621,"speed":10.50678539276123,"bearing":224.99998474121095,"altitude":77.7850341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550836.621943,"delta_ms":0},{"type":"getStatus","timestamp":1585550838.367,"event_timestamp":1585550836.869023,"result":{"route_state":"tracking","location":{"lat":35.617027282714847,"lon":139.63990783691407,"time":1585550838.367,"speed":10.799015045166016,"bearing":227.1234130859375,"altitude":77.7850341796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1385.34716796875,"remaining_leg_duration":341.355,"step_index":0,"remaining_step_distance":1039.6536865234376,"remaining_step_duration":255.0,"state_message":"","in_tunnel":false,"predicted":1.746,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.617027282714847,"lon":139.63990783691407,"time":1585550838.367,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6170733,"lon":139.6399811,"time":1585550837.619,"speed":9.755085945129395,"bearing":224.99996948242188,"altitude":78.05853271484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550837.620118,"delta_ms":0},{"type":"getStatus","timestamp":1585550839.413,"event_timestamp":1585550837.913987,"result":{"route_state":"tracking","location":{"lat":35.616966247558597,"lon":139.63983154296876,"time":1585550839.413,"speed":10.114232063293457,"bearing":227.1234130859375,"altitude":78.05853271484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1375.6619873046876,"remaining_leg_duration":339.355,"step_index":0,"remaining_step_distance":1029.968505859375,"remaining_step_duration":253.0,"state_message":"","in_tunnel":false,"predicted":1.794,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.616966247558597,"lon":139.63983154296876,"time":1585550839.413,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6170144,"lon":139.6399074,"time":1585550838.612,"speed":9.04537582397461,"bearing":225.99298095703126,"altitude":78.2740478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550838.612946,"delta_ms":0},{"type":"getStatus","timestamp":1585550840.47,"event_timestamp":1585550838.971166,"result":{"route_state":"tracking","location":{"lat":35.61690902709961,"lon":139.63973999023438,"time":1585550840.47,"speed":9.400248527526856,"bearing":227.1234130859375,"altitude":78.2740478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1365.25732421875,"remaining_leg_duration":336.355,"step_index":0,"remaining_step_distance":1019.5637817382813,"remaining_step_duration":251.0,"state_message":"","in_tunnel":false,"predicted":1.858,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61690902709961,"lon":139.63973999023438,"time":1585550840.47,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6169603,"lon":139.6398377,"time":1585550839.636,"speed":8.363487243652344,"bearing":226.00076293945313,"altitude":78.7236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550839.636598,"delta_ms":0},{"type":"getStatus","timestamp":1585550841.521,"event_timestamp":1585550840.021547,"result":{"route_state":"tracking","location":{"lat":35.61686706542969,"lon":139.6396942138672,"time":1585550841.521,"speed":8.766572952270508,"bearing":227.1234130859375,"altitude":78.7236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1359.0455322265626,"remaining_leg_duration":334.355,"step_index":0,"remaining_step_distance":1013.3519897460938,"remaining_step_duration":249.0,"state_message":"","in_tunnel":false,"predicted":1.885,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61686706542969,"lon":139.6396942138672,"time":1585550841.521,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6169102,"lon":139.639774,"time":1585550840.621,"speed":7.595663070678711,"bearing":226.0014190673828,"altitude":78.55535888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550840.621666,"delta_ms":0},{"type":"getStatus","timestamp":1585550842.567,"event_timestamp":1585550841.068063,"result":{"route_state":"tracking","location":{"lat":35.6168212890625,"lon":139.63963317871095,"time":1585550842.567,"speed":8.005538940429688,"bearing":227.1234130859375,"altitude":78.55535888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1351.530517578125,"remaining_leg_duration":333.355,"step_index":0,"remaining_step_distance":1005.8369750976563,"remaining_step_duration":247.0,"state_message":"","in_tunnel":false,"predicted":1.946,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.6168212890625,"lon":139.63963317871095,"time":1585550842.567,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6168668,"lon":139.6397175,"time":1585550841.615,"speed":6.260924816131592,"bearing":226.99691772460938,"altitude":78.69903564453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550841.616044,"delta_ms":0},{"type":"getStatus","timestamp":1585550843.617,"event_timestamp":1585550842.117908,"result":{"route_state":"tracking","location":{"lat":35.61678695678711,"lon":139.63958740234376,"time":1585550843.617,"speed":6.798480033874512,"bearing":227.1234130859375,"altitude":78.69903564453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1345.8944091796876,"remaining_leg_duration":331.355,"step_index":0,"remaining_step_distance":1000.2008666992188,"remaining_step_duration":246.0,"state_message":"","in_tunnel":false,"predicted":2.002,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61678695678711,"lon":139.63958740234376,"time":1585550843.617,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6168324,"lon":139.6396718,"time":1585550842.642,"speed":5.032759189605713,"bearing":227.0019989013672,"altitude":78.658935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550842.642756,"delta_ms":0},{"type":"getStatus","timestamp":1585550844.661,"event_timestamp":1585550843.161989,"result":{"route_state":"tracking","location":{"lat":35.61677169799805,"lon":139.63955688476563,"time":1585550844.661,"speed":5.515503406524658,"bearing":227.1234130859375,"altitude":78.658935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1342.7127685546876,"remaining_leg_duration":330.355,"step_index":0,"remaining_step_distance":997.0192260742188,"remaining_step_duration":245.0,"state_message":"","in_tunnel":false,"predicted":2.019,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61677169799805,"lon":139.63955688476563,"time":1585550844.661,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6168052,"lon":139.6396368,"time":1585550843.64,"speed":3.8504958152770998,"bearing":227.01055908203126,"altitude":78.2740478515625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550843.640387,"delta_ms":0},{"type":"getStatus","timestamp":1585550845.705,"event_timestamp":1585550844.206333,"result":{"route_state":"tracking","location":{"lat":35.616756439208987,"lon":139.63954162597657,"time":1585550845.705,"speed":4.439968585968018,"bearing":227.1234130859375,"altitude":78.2740478515625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1340.5467529296876,"remaining_leg_duration":330.355,"step_index":0,"remaining_step_distance":994.8532104492188,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.065,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.616756439208987,"lon":139.63954162597657,"time":1585550845.705,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167922,"lon":139.6396189,"time":1585550844.65,"speed":3.1070189476013185,"bearing":227.0428466796875,"altitude":78.3477783203125,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"result":true,"event_timestamp":1585550844.650695,"delta_ms":0},{"type":"getStatus","timestamp":1585550846.759,"event_timestamp":1585550845.259784,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550846.759,"speed":3.4031968116760256,"bearing":227.1234130859375,"altitude":78.3477783203125,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.109,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550846.759,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167745,"lon":139.6395941,"time":1585550845.633,"speed":1.861314296722412,"bearing":227.02442932128907,"altitude":78.531494140625,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"result":true,"event_timestamp":1585550845.633736,"delta_ms":0},{"type":"getStatus","timestamp":1585550847.82,"event_timestamp":1585550846.321028,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550847.82,"speed":3.4031968116760256,"bearing":227.1234130859375,"altitude":78.3477783203125,"accuracyHorizontal":3.6429998874664308,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.187,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550846.759,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167647,"lon":139.6395805,"time":1585550846.63,"speed":1.126449465751648,"bearing":227.02267456054688,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"result":true,"event_timestamp":1585550846.630312,"delta_ms":0},{"type":"getStatus","timestamp":1585550848.88,"event_timestamp":1585550847.381516,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550848.88,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.25,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550847.82,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167602,"lon":139.6395733,"time":1585550847.634,"speed":0.4954301714897156,"bearing":228.0457763671875,"altitude":78.0272216796875,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"result":true,"event_timestamp":1585550847.635175,"delta_ms":0},{"type":"getStatus","timestamp":1585550849.96,"event_timestamp":1585550848.461725,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550849.96,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.326,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550848.88,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167589,"lon":139.639571,"time":1585550848.628,"speed":0.16053426265716554,"bearing":228.01966857910157,"altitude":77.494873046875,"accuracyHorizontal":3.7039999961853029,"provider":"fused"},"result":true,"event_timestamp":1585550848.628918,"delta_ms":0},{"type":"getStatus","timestamp":1585550851.03,"event_timestamp":1585550849.530801,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550851.03,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.402,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550849.96,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167593,"lon":139.6395706,"time":1585550849.609,"speed":0.16022491455078126,"bearing":228.04873657226563,"altitude":77.453857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550849.609869,"delta_ms":0},{"type":"getStatus","timestamp":1585550852.076,"event_timestamp":1585550850.577284,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550852.076,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.467,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550851.03,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.61676,"lon":139.6395702,"time":1585550850.662,"speed":0.07309944927692414,"bearing":265.6357727050781,"altitude":77.356201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550850.662306,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167621,"lon":139.6395729,"time":1585550851.631,"speed":0.17636056244373322,"bearing":40.239654541015628,"altitude":77.457275390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550851.631869,"delta_ms":0},{"type":"getStatus","timestamp":1585550853.155,"event_timestamp":1585550851.656538,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550853.155,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.524,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550852.076,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167627,"lon":139.6395721,"time":1585550852.624,"speed":0.10052222013473511,"bearing":3.197094202041626,"altitude":77.50457763671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550852.625041,"delta_ms":0},{"type":"getStatus","timestamp":1585550854.218,"event_timestamp":1585550852.7184,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550854.218,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.594,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550853.155,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167638,"lon":139.6395704,"time":1585550853.618,"speed":0.1381189525127411,"bearing":321.6490173339844,"altitude":77.872314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550853.618761,"delta_ms":0},{"type":"getStatus","timestamp":1585550855.264,"event_timestamp":1585550853.765823,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550855.264,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.646,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550854.218,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167638,"lon":139.6395697,"time":1585550854.624,"speed":0.0832238495349884,"bearing":303.001220703125,"altitude":77.92498779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550854.624634,"delta_ms":0},{"type":"getStatus","timestamp":1585550856.334,"event_timestamp":1585550854.835491,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550856.334,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.71,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550855.264,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167636,"lon":139.6395691,"time":1585550855.617,"speed":0.06454302370548248,"bearing":280.27728271484377,"altitude":77.96484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550855.617556,"delta_ms":0},{"type":"getStatus","timestamp":1585550857.411,"event_timestamp":1585550855.911867,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550857.411,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.794,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550856.334,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167639,"lon":139.6395701,"time":1585550856.617,"speed":0.037777580320835116,"bearing":49.456172943115237,"altitude":78.0914306640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550856.61721,"delta_ms":0},{"type":"getStatus","timestamp":1585550858.464,"event_timestamp":1585550856.964968,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550858.464,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.847,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550857.411,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167642,"lon":139.6395719,"time":1585550857.63,"speed":0.10795461386442185,"bearing":75.98112487792969,"altitude":78.13262939453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550857.6304,"delta_ms":0},{"type":"getStatus","timestamp":1585550859.538,"event_timestamp":1585550858.040592,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550859.538,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":1.908,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550858.464,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167642,"lon":139.6395731,"time":1585550858.616,"speed":0.10675659030675888,"bearing":82.15790557861328,"altitude":78.0792236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550858.617102,"delta_ms":0},{"type":"getStatus","timestamp":1585550860.626,"event_timestamp":1585550859.127239,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550860.626,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.01,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550859.538,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167645,"lon":139.6395739,"time":1585550859.613,"speed":0.08906292170286179,"bearing":76.54374694824219,"altitude":78.19189453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550859.613531,"delta_ms":0},{"type":"getStatus","timestamp":1585550861.683,"event_timestamp":1585550860.183921,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550861.683,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.07,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550860.626,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167633,"lon":139.6395743,"time":1585550860.635,"speed":0.0871577039361,"bearing":136.8349151611328,"altitude":78.1331787109375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550860.635286,"delta_ms":0},{"type":"getStatus","timestamp":1585550862.755,"event_timestamp":1585550861.256376,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550862.755,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.12,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550861.683,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6167637,"lon":139.6395745,"time":1585550861.621,"speed":0.03518666699528694,"bearing":92.44734191894531,"altitude":78.27056884765625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550861.621446,"delta_ms":0},{"type":"getStatus","timestamp":1585550863.831,"event_timestamp":1585550862.331334,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550863.831,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.21,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550862.755,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167636,"lon":139.6395759,"time":1585550862.648,"speed":0.0842805728316307,"bearing":95.52427673339844,"altitude":78.32080078125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550862.648992,"delta_ms":0},{"type":"getStatus","timestamp":1585550864.879,"event_timestamp":1585550863.380063,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550864.879,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.231,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550863.831,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167618,"lon":139.639574,"time":1585550863.636,"speed":0.4199465215206146,"bearing":227.9981231689453,"altitude":78.40966796875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550863.636622,"delta_ms":0},{"type":"getStatus","timestamp":1585550865.927,"event_timestamp":1585550864.428439,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550865.927,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.291,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550864.879,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.616758,"lon":139.6395686,"time":1585550864.628,"speed":1.3449084758758546,"bearing":227.9781951904297,"altitude":78.5897216796875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550864.628273,"delta_ms":0},{"type":"getStatus","timestamp":1585550866.997,"event_timestamp":1585550865.4986132,"result":{"route_state":"tracking","location":{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550866.997,"speed":1.4507712125778199,"bearing":227.1234130859375,"altitude":78.17626953125,"accuracyHorizontal":3.6059999465942385,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1338.955322265625,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":993.2618408203125,"remaining_step_duration":244.0,"state_message":"","in_tunnel":false,"predicted":2.369,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61674880981445,"lon":139.6395263671875,"time":1585550865.927,"bearing":227.1234130859375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.616747,"lon":139.6395533,"time":1585550865.63,"speed":2.7371459007263185,"bearing":227.99440002441407,"altitude":78.53448486328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550865.630466,"delta_ms":0},{"type":"getStatus","timestamp":1585550868.072,"event_timestamp":1585550866.572881,"result":{"route_state":"tracking","location":{"lat":35.61672592163086,"lon":139.63949584960938,"time":1585550868.072,"speed":2.069632053375244,"bearing":227.1234130859375,"altitude":78.53448486328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1335.1978759765626,"remaining_leg_duration":329.355,"step_index":0,"remaining_step_distance":989.5043334960938,"remaining_step_duration":243.0,"state_message":"","in_tunnel":false,"predicted":2.442,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61672592163086,"lon":139.63949584960938,"time":1585550868.072,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167269,"lon":139.639526,"time":1585550866.631,"speed":3.8846487998962404,"bearing":226.9981689453125,"altitude":78.57281494140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550866.631696,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6167009,"lon":139.6394918,"time":1585550867.618,"speed":4.6690897941589359,"bearing":226.99948120117188,"altitude":78.44903564453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550867.618206,"delta_ms":0},{"type":"getStatus","timestamp":1585550869.123,"event_timestamp":1585550867.623471,"result":{"route_state":"tracking","location":{"lat":35.61667251586914,"lon":139.63943481445313,"time":1585550869.123,"speed":4.196811676025391,"bearing":227.1234130859375,"altitude":78.44903564453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1327.1070556640626,"remaining_leg_duration":327.355,"step_index":0,"remaining_step_distance":981.4134521484375,"remaining_step_duration":241.0,"state_message":"","in_tunnel":false,"predicted":1.505,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.61667251586914,"lon":139.63943481445313,"time":1585550869.123,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.61667,"lon":139.6394506,"time":1585550868.632,"speed":5.578934192657471,"bearing":226.99949645996095,"altitude":78.399169921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550868.63291,"delta_ms":0},{"type":"getStatus","timestamp":1585550870.169,"event_timestamp":1585550868.670169,"result":{"route_state":"tracking","location":{"lat":35.616634368896487,"lon":139.63937377929688,"time":1585550870.169,"speed":5.136489391326904,"bearing":227.1234130859375,"altitude":78.399169921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1320.16796875,"remaining_leg_duration":325.355,"step_index":0,"remaining_step_distance":974.4744262695313,"remaining_step_duration":239.0,"state_message":"","in_tunnel":false,"predicted":1.537,"shape_index":26,"intersection_index":21,"road_name":"","key_points":[{"lat":35.616634368896487,"lon":139.63937377929688,"time":1585550870.169,"bearing":227.1234130859375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.616633,"lon":139.639401,"time":1585550869.614,"speed":6.424132823944092,"bearing":226.00430297851563,"altitude":78.4788818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550869.614945,"delta_ms":0},{"type":"getStatus","timestamp":1585550871.226,"event_timestamp":1585550869.727143,"result":{"route_state":"tracking","location":{"lat":35.61659240722656,"lon":139.6393280029297,"time":1585550871.226,"speed":5.97018575668335,"bearing":228.3244171142578,"altitude":78.4788818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1313.9552001953126,"remaining_leg_duration":323.355,"step_index":0,"remaining_step_distance":968.2615966796875,"remaining_step_duration":238.0,"state_message":"","in_tunnel":false,"predicted":1.612,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61660385131836,"lon":139.63934326171876,"time":1585550870.908,"bearing":227.1234130859375},{"lat":35.61659240722656,"lon":139.6393280029297,"time":1585550871.226,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6165912,"lon":139.6393471,"time":1585550870.634,"speed":6.429983615875244,"bearing":226.00003051757813,"altitude":78.421142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550870.634874,"delta_ms":0},{"type":"getStatus","timestamp":1585550872.287,"event_timestamp":1585550870.787812,"result":{"route_state":"tracking","location":{"lat":35.616539001464847,"lon":139.63925170898438,"time":1585550872.287,"speed":6.460870742797852,"bearing":228.3244171142578,"altitude":78.421142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1304.845703125,"remaining_leg_duration":321.355,"step_index":0,"remaining_step_distance":959.1521606445313,"remaining_step_duration":236.0,"state_message":"","in_tunnel":false,"predicted":1.653,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.616539001464847,"lon":139.63925170898438,"time":1585550872.287,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6165519,"lon":139.6392959,"time":1585550871.628,"speed":5.996049880981445,"bearing":226.00196838378907,"altitude":78.4796142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550871.629996,"delta_ms":1},{"type":"getStatus","timestamp":1585550873.337,"event_timestamp":1585550871.83779,"result":{"route_state":"tracking","location":{"lat":35.61650466918945,"lon":139.6392059326172,"time":1585550873.337,"speed":6.195256233215332,"bearing":228.3244171142578,"altitude":78.4796142578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1299.2105712890626,"remaining_leg_duration":320.355,"step_index":0,"remaining_step_distance":953.5170288085938,"remaining_step_duration":234.0,"state_message":"","in_tunnel":false,"predicted":1.709,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61650466918945,"lon":139.6392059326172,"time":1585550873.337,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6165144,"lon":139.6392474,"time":1585550872.621,"speed":6.14896821975708,"bearing":225.999755859375,"altitude":78.59210205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550872.621977,"delta_ms":0},{"type":"getStatus","timestamp":1585550874.378,"event_timestamp":1585550872.878628,"result":{"route_state":"tracking","location":{"lat":35.61646270751953,"lon":139.63914489746095,"time":1585550874.378,"speed":6.148035049438477,"bearing":228.3244171142578,"altitude":78.59210205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1291.9781494140626,"remaining_leg_duration":318.355,"step_index":0,"remaining_step_distance":946.2846069335938,"remaining_step_duration":233.0,"state_message":"","in_tunnel":false,"predicted":1.757,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61646270751953,"lon":139.63914489746095,"time":1585550874.378,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6164762,"lon":139.6391976,"time":1585550873.617,"speed":6.5668463706970219,"bearing":225.9991455078125,"altitude":78.44921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550873.617295,"delta_ms":0},{"type":"getStatus","timestamp":1585550875.439,"event_timestamp":1585550873.939393,"result":{"route_state":"tracking","location":{"lat":35.616416931152347,"lon":139.6390838623047,"time":1585550875.439,"speed":6.465878009796143,"bearing":228.3244171142578,"altitude":78.44921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1284.4652099609376,"remaining_leg_duration":316.355,"step_index":0,"remaining_step_distance":938.7716064453125,"remaining_step_duration":231.0,"state_message":"","in_tunnel":false,"predicted":1.822,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.616416931152347,"lon":139.6390838623047,"time":1585550875.439,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6164345,"lon":139.6391432,"time":1585550874.617,"speed":7.295925617218018,"bearing":226.99310302734376,"altitude":78.433837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550874.617875,"delta_ms":0},{"type":"getStatus","timestamp":1585550876.48,"event_timestamp":1585550874.98107,"result":{"route_state":"tracking","location":{"lat":35.61637496948242,"lon":139.63902282714845,"time":1585550876.48,"speed":7.022176265716553,"bearing":228.3244171142578,"altitude":78.433837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1277.233154296875,"remaining_leg_duration":314.355,"step_index":0,"remaining_step_distance":931.5396118164063,"remaining_step_duration":229.0,"state_message":"","in_tunnel":false,"predicted":1.863,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61637496948242,"lon":139.63902282714845,"time":1585550876.48,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6163883,"lon":139.6390817,"time":1585550875.628,"speed":8.043693542480469,"bearing":226.99708557128907,"altitude":78.252197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550875.628938,"delta_ms":0},{"type":"getStatus","timestamp":1585550877.523,"event_timestamp":1585550876.024208,"result":{"route_state":"tracking","location":{"lat":35.61631774902344,"lon":139.63894653320313,"time":1585550877.523,"speed":7.687808990478516,"bearing":228.3244171142578,"altitude":78.252197265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1267.8414306640626,"remaining_leg_duration":312.355,"step_index":0,"remaining_step_distance":922.14794921875,"remaining_step_duration":227.0,"state_message":"","in_tunnel":false,"predicted":1.895,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61631774902344,"lon":139.63894653320313,"time":1585550877.523,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6163366,"lon":139.6390114,"time":1585550876.624,"speed":8.555692672729493,"bearing":226.9982147216797,"altitude":78.84417724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550876.62466,"delta_ms":0},{"type":"getStatus","timestamp":1585550878.603,"event_timestamp":1585550877.103947,"result":{"route_state":"tracking","location":{"lat":35.61625289916992,"lon":139.63885498046876,"time":1585550878.603,"speed":8.302192687988282,"bearing":228.3244171142578,"altitude":78.84417724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1256.852783203125,"remaining_leg_duration":309.355,"step_index":0,"remaining_step_distance":911.1593017578125,"remaining_step_duration":224.0,"state_message":"","in_tunnel":false,"predicted":1.979,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61625289916992,"lon":139.63885498046876,"time":1585550878.603,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6162839,"lon":139.6389409,"time":1585550877.623,"speed":8.253199577331543,"bearing":227.00148010253907,"altitude":78.8592529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550877.623957,"delta_ms":0},{"type":"getStatus","timestamp":1585550879.656,"event_timestamp":1585550878.157327,"result":{"route_state":"tracking","location":{"lat":35.616207122802737,"lon":139.6387939453125,"time":1585550879.656,"speed":8.280673027038575,"bearing":228.3244171142578,"altitude":78.8592529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1249.33935546875,"remaining_leg_duration":307.355,"step_index":0,"remaining_step_distance":903.645751953125,"remaining_step_duration":222.0,"state_message":"","in_tunnel":false,"predicted":2.033,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.616207122802737,"lon":139.6387939453125,"time":1585550879.656,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6162321,"lon":139.6388698,"time":1585550878.618,"speed":8.668880462646485,"bearing":227.99696350097657,"altitude":79.1417236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550878.618681,"delta_ms":0},{"type":"getStatus","timestamp":1585550880.712,"event_timestamp":1585550879.214136,"result":{"route_state":"tracking","location":{"lat":35.61614227294922,"lon":139.63870239257813,"time":1585550880.712,"speed":8.559989929199219,"bearing":228.3244171142578,"altitude":79.1417236328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1238.3507080078126,"remaining_leg_duration":305.355,"step_index":0,"remaining_step_distance":892.6571655273438,"remaining_step_duration":219.0,"state_message":"","in_tunnel":false,"predicted":2.094,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61614227294922,"lon":139.63870239257813,"time":1585550880.712,"bearing":228.3244171142578}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.616179,"lon":139.6387938,"time":1585550879.635,"speed":9.05494213104248,"bearing":227.9969024658203,"altitude":79.94378662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550879.635944,"delta_ms":0},{"type":"getStatus","timestamp":1585550881.762,"event_timestamp":1585550880.263015,"result":{"route_state":"tracking","location":{"lat":35.61608123779297,"lon":139.6386260986328,"time":1585550881.762,"speed":8.888463973999024,"bearing":228.3244171142578,"altitude":79.94378662109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1228.67578125,"remaining_leg_duration":302.355,"step_index":0,"remaining_step_distance":882.982177734375,"remaining_step_duration":217.0,"state_message":"","in_tunnel":false,"predicted":2.127,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61608123779297,"lon":139.6386260986328,"time":1585550881.762,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.616125,"lon":139.6387173,"time":1585550880.615,"speed":8.821901321411133,"bearing":228.0012969970703,"altitude":79.62127685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550880.615492,"delta_ms":0},{"type":"getStatus","timestamp":1585550882.813,"event_timestamp":1585550881.313934,"result":{"route_state":"tracking","location":{"lat":35.61603546142578,"lon":139.6385498046875,"time":1585550882.813,"speed":8.911283493041993,"bearing":228.3244171142578,"altitude":79.62127685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1220.1297607421876,"remaining_leg_duration":300.355,"step_index":0,"remaining_step_distance":874.4362182617188,"remaining_step_duration":215.0,"state_message":"","in_tunnel":false,"predicted":2.198,"shape_index":27,"intersection_index":22,"road_name":"","key_points":[{"lat":35.61603546142578,"lon":139.6385498046875,"time":1585550882.813,"bearing":228.3244171142578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6160729,"lon":139.6386415,"time":1585550881.63,"speed":8.711177825927735,"bearing":228.00096130371095,"altitude":80.04840087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550881.630496,"delta_ms":0},{"type":"getStatus","timestamp":1585550883.857,"event_timestamp":1585550882.358599,"result":{"route_state":"tracking","location":{"lat":35.615966796875,"lon":139.63845825195313,"time":1585550883.857,"speed":8.892166137695313,"bearing":229.2692413330078,"altitude":80.04840087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1208.837890625,"remaining_leg_duration":298.355,"step_index":0,"remaining_step_distance":863.144287109375,"remaining_step_duration":212.0,"state_message":"","in_tunnel":false,"predicted":2.227,"shape_index":28,"intersection_index":23,"road_name":"","key_points":[{"lat":35.61597442626953,"lon":139.6384735107422,"time":1585550883.707,"bearing":228.3244171142578},{"lat":35.615966796875,"lon":139.63845825195313,"time":1585550883.857,"bearing":229.2692413330078}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6160216,"lon":139.6385703,"time":1585550882.635,"speed":8.293676376342774,"bearing":228.0025177001953,"altitude":79.731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550882.636163,"delta_ms":0},{"type":"getStatus","timestamp":1585550884.906,"event_timestamp":1585550883.407275,"result":{"route_state":"tracking","location":{"lat":35.61592483520508,"lon":139.63839721679688,"time":1585550884.906,"speed":8.555792808532715,"bearing":229.2692413330078,"altitude":79.731201171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1201.616455078125,"remaining_leg_duration":296.355,"step_index":0,"remaining_step_distance":855.9228515625,"remaining_step_duration":210.0,"state_message":"","in_tunnel":false,"predicted":2.271,"shape_index":28,"intersection_index":23,"road_name":"","key_points":[{"lat":35.61592483520508,"lon":139.63839721679688,"time":1585550884.906,"bearing":229.2692413330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6159733,"lon":139.638504,"time":1585550883.625,"speed":7.79367208480835,"bearing":228.0026397705078,"altitude":79.330322265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550883.625349,"delta_ms":0},{"type":"getStatus","timestamp":1585550885.959,"event_timestamp":1585550884.460401,"result":{"route_state":"tracking","location":{"lat":35.615875244140628,"lon":139.63833618164063,"time":1585550885.959,"speed":8.047588348388672,"bearing":229.2692413330078,"altitude":79.330322265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1193.8323974609376,"remaining_leg_duration":294.355,"step_index":0,"remaining_step_distance":848.1388549804688,"remaining_step_duration":208.0,"state_message":"","in_tunnel":false,"predicted":2.334,"shape_index":28,"intersection_index":23,"road_name":"","key_points":[{"lat":35.615875244140628,"lon":139.63833618164063,"time":1585550885.959,"bearing":229.2692413330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6159279,"lon":139.6384404,"time":1585550884.626,"speed":7.432536602020264,"bearing":228.99522399902345,"altitude":79.5704345703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550884.626821,"delta_ms":0},{"type":"getStatus","timestamp":1585550887.014,"event_timestamp":1585550885.51498,"result":{"route_state":"tracking","location":{"lat":35.6158332824707,"lon":139.63827514648438,"time":1585550887.014,"speed":7.611344814300537,"bearing":229.2692413330078,"altitude":79.5704345703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1186.6002197265626,"remaining_leg_duration":292.355,"step_index":0,"remaining_step_distance":840.9066772460938,"remaining_step_duration":207.0,"state_message":"","in_tunnel":false,"predicted":2.388,"shape_index":28,"intersection_index":23,"road_name":"","key_points":[{"lat":35.6158332824707,"lon":139.63827514648438,"time":1585550887.014,"bearing":229.2692413330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6158856,"lon":139.6383794,"time":1585550885.635,"speed":7.043031692504883,"bearing":229.00315856933595,"altitude":79.6256103515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550885.635593,"delta_ms":0},{"type":"getStatus","timestamp":1585550888.061,"event_timestamp":1585550886.562665,"result":{"route_state":"tracking","location":{"lat":35.61579513549805,"lon":139.63821411132813,"time":1585550888.061,"speed":7.236166954040527,"bearing":229.2692413330078,"altitude":79.6256103515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1179.64404296875,"remaining_leg_duration":290.355,"step_index":0,"remaining_step_distance":833.950439453125,"remaining_step_duration":205.0,"state_message":"","in_tunnel":false,"predicted":2.426,"shape_index":28,"intersection_index":23,"road_name":"","key_points":[{"lat":35.61579513549805,"lon":139.63821411132813,"time":1585550888.061,"bearing":229.2692413330078}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.615845,"lon":139.6383213,"time":1585550886.62,"speed":6.713373184204102,"bearing":229.0037841796875,"altitude":79.88629150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550886.621097,"delta_ms":0},{"type":"getStatus","timestamp":1585550889.107,"event_timestamp":1585550887.608723,"result":{"route_state":"tracking","location":{"lat":35.61575698852539,"lon":139.63816833496095,"time":1585550889.107,"speed":6.914340972900391,"bearing":229.77911376953126,"altitude":79.88629150390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1173.58642578125,"remaining_leg_duration":289.355,"step_index":0,"remaining_step_distance":827.8928833007813,"remaining_step_duration":203.0,"state_message":"","in_tunnel":false,"predicted":2.487,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.615760803222659,"lon":139.63816833496095,"time":1585550889.033,"bearing":229.2692413330078},{"lat":35.61575698852539,"lon":139.63816833496095,"time":1585550889.107,"bearing":229.77911376953126}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6158068,"lon":139.6382662,"time":1585550887.688,"speed":6.244878768920898,"bearing":229.00588989257813,"altitude":80.092041015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550887.688853,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6157709,"lon":139.6382132,"time":1585550888.619,"speed":6.220246315002441,"bearing":229.00048828125,"altitude":80.6495361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550888.619576,"delta_ms":0},{"type":"getStatus","timestamp":1585550890.18,"event_timestamp":1585550888.681386,"result":{"route_state":"tracking","location":{"lat":35.615726470947269,"lon":139.63812255859376,"time":1585550890.18,"speed":6.292014122009277,"bearing":229.77911376953126,"altitude":80.6495361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1168.3758544921876,"remaining_leg_duration":288.355,"step_index":0,"remaining_step_distance":822.682373046875,"remaining_step_duration":202.0,"state_message":"","in_tunnel":false,"predicted":1.561,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.615726470947269,"lon":139.63812255859376,"time":1585550890.18,"bearing":229.77911376953126}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6157348,"lon":139.6381602,"time":1585550889.626,"speed":6.397853851318359,"bearing":229.9873504638672,"altitude":80.52484130859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550889.626163,"delta_ms":0},{"type":"getStatus","timestamp":1585550891.225,"event_timestamp":1585550889.728913,"result":{"route_state":"tracking","location":{"lat":35.615684509277347,"lon":139.63804626464845,"time":1585550891.225,"speed":6.410273551940918,"bearing":229.77911376953126,"altitude":80.52484130859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1160.076904296875,"remaining_leg_duration":286.355,"step_index":0,"remaining_step_distance":814.3833618164063,"remaining_step_duration":200.0,"state_message":"","in_tunnel":false,"predicted":1.599,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.615684509277347,"lon":139.63804626464845,"time":1585550891.225,"bearing":229.77911376953126}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6156978,"lon":139.6381054,"time":1585550890.633,"speed":6.519028663635254,"bearing":229.99859619140626,"altitude":80.62811279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550890.633961,"delta_ms":0},{"type":"getStatus","timestamp":1585550892.292,"event_timestamp":1585550890.793264,"result":{"route_state":"tracking","location":{"lat":35.61564636230469,"lon":139.63800048828126,"time":1585550892.292,"speed":6.424263000488281,"bearing":229.77911376953126,"altitude":80.62811279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1154.1866455078126,"remaining_leg_duration":284.355,"step_index":0,"remaining_step_distance":808.4931030273438,"remaining_step_duration":199.0,"state_message":"","in_tunnel":false,"predicted":1.659,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.61564636230469,"lon":139.63800048828126,"time":1585550892.292,"bearing":229.77911376953126}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6156603,"lon":139.6380519,"time":1585550891.623,"speed":6.230405807495117,"bearing":229.0017547607422,"altitude":80.60467529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550891.623331,"delta_ms":0},{"type":"getStatus","timestamp":1585550893.369,"event_timestamp":1585550891.870761,"result":{"route_state":"tracking","location":{"lat":35.615604400634769,"lon":139.637939453125,"time":1585550893.369,"speed":6.339691638946533,"bearing":229.77911376953126,"altitude":80.60467529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1146.953125,"remaining_leg_duration":282.355,"step_index":0,"remaining_step_distance":801.259521484375,"remaining_step_duration":197.0,"state_message":"","in_tunnel":false,"predicted":1.746,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.615604400634769,"lon":139.637939453125,"time":1585550893.369,"bearing":229.77911376953126}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6156239,"lon":139.6380005,"time":1585550892.61,"speed":5.802830696105957,"bearing":229.00363159179688,"altitude":81.11676025390625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550892.610241,"delta_ms":0},{"type":"getStatus","timestamp":1585550894.416,"event_timestamp":1585550892.918328,"result":{"route_state":"tracking","location":{"lat":35.61557388305664,"lon":139.6378936767578,"time":1585550894.416,"speed":5.967051982879639,"bearing":229.77911376953126,"altitude":81.11676025390625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1141.595947265625,"remaining_leg_duration":281.355,"step_index":0,"remaining_step_distance":795.90234375,"remaining_step_duration":196.0,"state_message":"","in_tunnel":false,"predicted":1.806,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.61557388305664,"lon":139.6378936767578,"time":1585550894.416,"bearing":229.77911376953126}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6155902,"lon":139.6379519,"time":1585550893.613,"speed":5.5506157875061039,"bearing":229.00079345703126,"altitude":80.79632568359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550893.61376,"delta_ms":0},{"type":"getStatus","timestamp":1585550895.461,"event_timestamp":1585550893.962518,"result":{"route_state":"tracking","location":{"lat":35.61553955078125,"lon":139.63784790039063,"time":1585550895.461,"speed":5.6897077560424809,"bearing":229.77911376953126,"altitude":80.79632568359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1135.9652099609376,"remaining_leg_duration":280.355,"step_index":0,"remaining_step_distance":790.2716674804688,"remaining_step_duration":194.0,"state_message":"","in_tunnel":false,"predicted":1.848,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.61553955078125,"lon":139.63784790039063,"time":1585550895.461,"bearing":229.77911376953126}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6155579,"lon":139.6379047,"time":1585550894.642,"speed":5.084429740905762,"bearing":229.00656127929688,"altitude":81.32598876953125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550894.643565,"delta_ms":1},{"type":"getStatus","timestamp":1585550896.514,"event_timestamp":1585550895.01549,"result":{"route_state":"tracking","location":{"lat":35.61551284790039,"lon":139.6378173828125,"time":1585550896.514,"speed":5.2850341796875,"bearing":229.77911376953126,"altitude":81.32598876953125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1131.9332275390626,"remaining_leg_duration":279.355,"step_index":0,"remaining_step_distance":786.2396850585938,"remaining_step_duration":193.0,"state_message":"","in_tunnel":false,"predicted":1.872,"shape_index":29,"intersection_index":24,"road_name":"","key_points":[{"lat":35.61551284790039,"lon":139.6378173828125,"time":1585550896.514,"bearing":229.77911376953126}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6155297,"lon":139.6378633,"time":1585550895.637,"speed":4.6629815101623539,"bearing":229.99867248535157,"altitude":81.5926513671875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550895.63763,"delta_ms":0},{"type":"getStatus","timestamp":1585550897.559,"event_timestamp":1585550896.059608,"result":{"route_state":"tracking","location":{"lat":35.61548614501953,"lon":139.6377716064453,"time":1585550897.559,"speed":4.929524898529053,"bearing":228.93380737304688,"altitude":81.5926513671875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1126.8497314453126,"remaining_leg_duration":277.355,"step_index":0,"remaining_step_distance":781.1561889648438,"remaining_step_duration":192.0,"state_message":"","in_tunnel":false,"predicted":1.922,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615509033203128,"lon":139.63780212402345,"time":1585550896.803,"bearing":229.77911376953126},{"lat":35.61548614501953,"lon":139.6377716064453,"time":1585550897.559,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6155041,"lon":139.6378244,"time":1585550896.623,"speed":4.361987113952637,"bearing":230.0041961669922,"altitude":81.774658203125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550896.62407,"delta_ms":0},{"type":"getStatus","timestamp":1585550898.604,"event_timestamp":1585550897.104923,"result":{"route_state":"tracking","location":{"lat":35.61545944213867,"lon":139.63772583007813,"time":1585550898.604,"speed":4.592801570892334,"bearing":228.93380737304688,"altitude":81.774658203125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1121.7684326171876,"remaining_leg_duration":276.355,"step_index":0,"remaining_step_distance":776.074951171875,"remaining_step_duration":191.0,"state_message":"","in_tunnel":false,"predicted":1.981,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.61545944213867,"lon":139.63772583007813,"time":1585550898.604,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154816,"lon":139.6377911,"time":1585550897.638,"speed":3.082650899887085,"bearing":230.0379180908203,"altitude":81.716064453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550897.639044,"delta_ms":0},{"type":"getStatus","timestamp":1585550899.648,"event_timestamp":1585550898.148839,"result":{"route_state":"tracking","location":{"lat":35.615447998046878,"lon":139.63772583007813,"time":1585550899.648,"speed":3.5953147411346437,"bearing":228.93380737304688,"altitude":81.716064453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1120.921630859375,"remaining_leg_duration":276.355,"step_index":0,"remaining_step_distance":775.22802734375,"remaining_step_duration":191.0,"state_message":"","in_tunnel":false,"predicted":2.01,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615447998046878,"lon":139.63772583007813,"time":1585550899.648,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154678,"lon":139.6377702,"time":1585550898.632,"speed":1.5266286134719849,"bearing":230.04037475585938,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550898.632306,"delta_ms":0},{"type":"getStatus","timestamp":1585550900.695,"event_timestamp":1585550899.196072,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550900.695,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.063,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550900.695,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154616,"lon":139.6377623,"time":1585550899.634,"speed":0.3709140717983246,"bearing":229.02203369140626,"altitude":81.06005859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550899.634358,"delta_ms":0},{"type":"getStatus","timestamp":1585550901.74,"event_timestamp":1585550900.240958,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550901.74,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.106,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550900.695,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154612,"lon":139.6377625,"time":1585550900.622,"speed":0.37055203318595889,"bearing":229.0072479248047,"altitude":80.77215576171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550900.622708,"delta_ms":0},{"type":"getStatus","timestamp":1585550902.797,"event_timestamp":1585550901.298472,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550902.797,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.175,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550901.74,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154617,"lon":139.6377639,"time":1585550901.611,"speed":0.09560000151395798,"bearing":215.84019470214845,"altitude":80.84747314453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550901.611632,"delta_ms":0},{"type":"getStatus","timestamp":1585550903.867,"event_timestamp":1585550902.368268,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550903.867,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.256,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550902.797,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154626,"lon":139.6377664,"time":1585550902.629,"speed":0.11391059309244156,"bearing":75.06906127929688,"altitude":80.7957763671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550902.629446,"delta_ms":0},{"type":"getStatus","timestamp":1585550904.932,"event_timestamp":1585550903.432763,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550904.932,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.303,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550903.867,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154627,"lon":139.6377679,"time":1585550903.625,"speed":0.12819887697696687,"bearing":81.04411315917969,"altitude":80.82000732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550903.625356,"delta_ms":0},{"type":"getStatus","timestamp":1585550906.018,"event_timestamp":1585550904.51871,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550906.018,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.393,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550904.932,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154623,"lon":139.6377671,"time":1585550904.625,"speed":0.02393929287791252,"bearing":154.08773803710938,"altitude":81.01348876953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550904.625368,"delta_ms":0},{"type":"getStatus","timestamp":1585550907.065,"event_timestamp":1585550905.565952,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550907.065,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.44,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550906.018,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154613,"lon":139.6377663,"time":1585550905.633,"speed":0.08107960969209671,"bearing":208.83065795898438,"altitude":81.07989501953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550905.633265,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154607,"lon":139.6377648,"time":1585550906.625,"speed":0.11602558940649033,"bearing":233.5045928955078,"altitude":81.33349609375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550906.625447,"delta_ms":0},{"type":"getStatus","timestamp":1585550908.127,"event_timestamp":1585550906.628059,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550908.127,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.502,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550907.065,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154601,"lon":139.6377636,"time":1585550907.619,"speed":0.12029893696308136,"bearing":235.70603942871095,"altitude":81.466796875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550907.619882,"delta_ms":0},{"type":"getStatus","timestamp":1585550909.187,"event_timestamp":1585550907.68833,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550909.187,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.568,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550908.127,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154596,"lon":139.6377629,"time":1585550908.623,"speed":0.10117358714342118,"bearing":232.25738525390626,"altitude":81.5565185546875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550908.623491,"delta_ms":0},{"type":"getStatus","timestamp":1585550910.241,"event_timestamp":1585550908.743336,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550910.241,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.618,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550909.187,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154587,"lon":139.6377613,"time":1585550909.625,"speed":0.14389492571353913,"bearing":234.78131103515626,"altitude":81.74884033203125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550909.625177,"delta_ms":0},{"type":"getStatus","timestamp":1585550911.313,"event_timestamp":1585550909.814572,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550911.313,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.688,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550910.241,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154581,"lon":139.6377603,"time":1585550910.625,"speed":0.12276310473680496,"bearing":235.24444580078126,"altitude":81.86328125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550910.62568,"delta_ms":0},{"type":"getStatus","timestamp":1585550912.391,"event_timestamp":1585550910.892242,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550912.391,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.766,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550911.313,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.615458,"lon":139.6377608,"time":1585550911.619,"speed":0.04424509406089783,"bearing":204.30104064941407,"altitude":81.8184814453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550911.619284,"delta_ms":0},{"type":"getStatus","timestamp":1585550913.442,"event_timestamp":1585550911.942637,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550913.442,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.823,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550912.391,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154576,"lon":139.6377614,"time":1585550912.614,"speed":0.04745953157544136,"bearing":149.9080810546875,"altitude":81.89569091796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550912.614776,"delta_ms":0},{"type":"getStatus","timestamp":1585550914.521,"event_timestamp":1585550913.021403,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550914.521,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.907,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550913.442,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154578,"lon":139.6377629,"time":1585550913.63,"speed":0.08797582238912583,"bearing":94.77536010742188,"altitude":81.9610595703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550913.630919,"delta_ms":0},{"type":"getStatus","timestamp":1585550915.584,"event_timestamp":1585550914.085855,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550915.584,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.954,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550914.521,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154573,"lon":139.6377629,"time":1585550914.634,"speed":0.04844919964671135,"bearing":131.98184204101563,"altitude":82.1090087890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550914.634163,"delta_ms":0},{"type":"getStatus","timestamp":1585550916.654,"event_timestamp":1585550915.155974,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550916.654,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.02,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550915.584,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154571,"lon":139.6377638,"time":1585550915.626,"speed":0.06862206757068634,"bearing":114.10469055175781,"altitude":82.048583984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550915.635753,"delta_ms":9},{"type":"getStatus","timestamp":1585550917.733,"event_timestamp":1585550916.23365,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550917.733,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.107,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550916.654,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.615457,"lon":139.6377635,"time":1585550916.615,"speed":0.01777840591967106,"bearing":143.30230712890626,"altitude":82.1422119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550916.615619,"delta_ms":0},{"type":"getStatus","timestamp":1585550918.781,"event_timestamp":1585550917.28284,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550918.781,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.166,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550917.733,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154567,"lon":139.6377634,"time":1585550917.639,"speed":0.03026892989873886,"bearing":181.6757354736328,"altitude":82.17083740234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550917.639716,"delta_ms":0},{"type":"getStatus","timestamp":1585550919.855,"event_timestamp":1585550918.356191,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550919.855,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.216,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550918.781,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154558,"lon":139.6377618,"time":1585550918.623,"speed":0.10747981816530228,"bearing":229.05848693847657,"altitude":82.4959716796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550918.623463,"delta_ms":0},{"type":"getStatus","timestamp":1585550920.93,"event_timestamp":1585550919.431977,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550920.93,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.307,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550919.855,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154552,"lon":139.6377607,"time":1585550919.627,"speed":0.11145176738500595,"bearing":233.27706909179688,"altitude":82.6995849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550919.627815,"delta_ms":0},{"type":"getStatus","timestamp":1585550922.004,"event_timestamp":1585550920.505726,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550922.004,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.377,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550920.93,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154546,"lon":139.6377588,"time":1585550920.628,"speed":0.156035915017128,"bearing":244.9099578857422,"altitude":82.9425048828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550920.628429,"delta_ms":0},{"type":"getStatus","timestamp":1585550923.086,"event_timestamp":1585550921.586994,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550923.086,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.458,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550922.004,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.615454,"lon":139.6377577,"time":1585550921.646,"speed":0.13375473022460938,"bearing":240.36378479003907,"altitude":83.0660400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550921.646375,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154535,"lon":139.6377571,"time":1585550922.623,"speed":0.10013110935688019,"bearing":232.08775329589845,"altitude":83.2115478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550922.624056,"delta_ms":0},{"type":"getStatus","timestamp":1585550924.139,"event_timestamp":1585550922.64008,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550924.139,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.516,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550923.086,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154538,"lon":139.6377571,"time":1585550923.623,"speed":0.03567392751574516,"bearing":258.7160949707031,"altitude":83.270751953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550923.623599,"delta_ms":0},{"type":"getStatus","timestamp":1585550925.208,"event_timestamp":1585550923.70902,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550925.208,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.585,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550924.139,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154539,"lon":139.6377586,"time":1585550924.624,"speed":0.06475485861301422,"bearing":83.3284912109375,"altitude":83.14410400390625,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550924.624352,"delta_ms":0},{"type":"getStatus","timestamp":1585550926.263,"event_timestamp":1585550924.76389,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550926.263,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.639,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550925.208,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.615454,"lon":139.6377599,"time":1585550925.625,"speed":0.09708663821220398,"bearing":85.80292510986328,"altitude":83.051513671875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550925.626278,"delta_ms":0},{"type":"getStatus","timestamp":1585550927.33,"event_timestamp":1585550925.831153,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550927.33,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.705,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550926.263,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154533,"lon":139.6377595,"time":1585550926.626,"speed":0.04572303593158722,"bearing":156.318359375,"altitude":83.19024658203125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550926.626951,"delta_ms":0},{"type":"getStatus","timestamp":1585550928.422,"event_timestamp":1585550926.923207,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550928.422,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.796,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550927.33,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154531,"lon":139.6377597,"time":1585550927.633,"speed":0.0376758836209774,"bearing":150.99331665039063,"altitude":83.14276123046875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550927.633215,"delta_ms":0},{"type":"getStatus","timestamp":1585550929.476,"event_timestamp":1585550927.976943,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550929.476,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.843,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550928.422,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154531,"lon":139.6377607,"time":1585550928.627,"speed":0.06034707650542259,"bearing":100.4675521850586,"altitude":82.97845458984375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550928.627453,"delta_ms":0},{"type":"getStatus","timestamp":1585550930.534,"event_timestamp":1585550929.035457,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550930.534,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.907,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550929.476,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154533,"lon":139.6377607,"time":1585550929.63,"speed":0.025937795639038087,"bearing":70.31024932861328,"altitude":83.002685546875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550929.631143,"delta_ms":0},{"type":"getStatus","timestamp":1585550931.61,"event_timestamp":1585550930.110776,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550931.61,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.98,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550930.534,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.615453,"lon":139.6377601,"time":1585550930.617,"speed":0.02502271719276905,"bearing":228.7177276611328,"altitude":83.03411865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550930.617204,"delta_ms":0},{"type":"getStatus","timestamp":1585550932.669,"event_timestamp":1585550931.171333,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550932.669,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.052,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550931.61,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154528,"lon":139.6377586,"time":1585550931.617,"speed":0.08731630444526673,"bearing":257.24755859375,"altitude":83.19091796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550931.617874,"delta_ms":0},{"type":"getStatus","timestamp":1585550933.732,"event_timestamp":1585550932.232838,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550933.732,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.115,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550932.669,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154529,"lon":139.637759,"time":1585550932.625,"speed":0.01876140385866165,"bearing":267.2787780761719,"altitude":83.08538818359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550932.625581,"delta_ms":0},{"type":"getStatus","timestamp":1585550934.789,"event_timestamp":1585550933.290459,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550934.789,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.164,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550933.732,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154523,"lon":139.6377592,"time":1585550933.628,"speed":0.04244488477706909,"bearing":175.16236877441407,"altitude":82.81591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550933.628721,"delta_ms":0},{"type":"getStatus","timestamp":1585550935.853,"event_timestamp":1585550934.354698,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550935.853,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.225,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550934.789,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154521,"lon":139.6377592,"time":1585550934.63,"speed":0.026796896010637285,"bearing":174.63734436035157,"altitude":82.85919189453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550934.630825,"delta_ms":0},{"type":"getStatus","timestamp":1585550936.933,"event_timestamp":1585550935.433394,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550936.933,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.303,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550935.853,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.615452,"lon":139.6377591,"time":1585550935.62,"speed":0.021582579240202905,"bearing":187.97683715820313,"altitude":82.726318359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550935.620635,"delta_ms":0},{"type":"getStatus","timestamp":1585550938.008,"event_timestamp":1585550936.508905,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550938.008,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.388,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550936.933,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154516,"lon":139.6377571,"time":1585550936.643,"speed":0.1116112619638443,"bearing":251.31646728515626,"altitude":82.9530029296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550936.643595,"delta_ms":0},{"type":"getStatus","timestamp":1585550939.072,"event_timestamp":1585550937.574551,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550939.072,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.429,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550938.008,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154509,"lon":139.6377555,"time":1585550937.654,"speed":0.14083562791347505,"bearing":245.7008819580078,"altitude":83.11724853515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550937.655037,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154504,"lon":139.6377547,"time":1585550938.626,"speed":0.11085748672485352,"bearing":239.3216552734375,"altitude":83.140869140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550938.627036,"delta_ms":0},{"type":"getStatus","timestamp":1585550940.145,"event_timestamp":1585550938.645781,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550940.145,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.519,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550939.072,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154496,"lon":139.6377535,"time":1585550939.623,"speed":0.13109345734119416,"bearing":234.51402282714845,"altitude":83.2391357421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550939.623873,"delta_ms":0},{"type":"getStatus","timestamp":1585550941.198,"event_timestamp":1585550939.699099,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550941.198,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.575,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550940.145,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154487,"lon":139.6377537,"time":1585550940.621,"speed":0.0914417952299118,"bearing":200.0786590576172,"altitude":83.015380859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550940.6218,"delta_ms":0},{"type":"getStatus","timestamp":1585550942.267,"event_timestamp":1585550940.768784,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550942.267,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.646,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550941.198,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154485,"lon":139.6377532,"time":1585550941.625,"speed":0.06479533016681671,"bearing":221.1651153564453,"altitude":83.07757568359375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550941.62571,"delta_ms":0},{"type":"getStatus","timestamp":1585550943.352,"event_timestamp":1585550941.852618,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550943.352,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.727,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550942.267,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154484,"lon":139.6377525,"time":1585550942.622,"speed":0.06165749952197075,"bearing":242.0006103515625,"altitude":83.1336669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550942.623141,"delta_ms":0},{"type":"getStatus","timestamp":1585550944.408,"event_timestamp":1585550942.908512,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550944.408,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.786,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550943.352,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154481,"lon":139.6377521,"time":1585550943.619,"speed":0.05140547454357147,"bearing":231.64608764648438,"altitude":83.162841796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550943.619258,"delta_ms":0},{"type":"getStatus","timestamp":1585550945.473,"event_timestamp":1585550943.974992,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550945.473,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.854,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550944.408,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154479,"lon":139.6377522,"time":1585550944.625,"speed":0.031589075922966,"bearing":207.71701049804688,"altitude":83.1173095703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550944.625457,"delta_ms":0},{"type":"getStatus","timestamp":1585550946.548,"event_timestamp":1585550945.049284,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550946.548,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.923,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550945.473,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154476,"lon":139.6377529,"time":1585550945.62,"speed":0.04235510900616646,"bearing":134.5106964111328,"altitude":83.15435791015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550945.620822,"delta_ms":0},{"type":"getStatus","timestamp":1585550947.61,"event_timestamp":1585550946.11092,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550947.61,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.99,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550946.548,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154478,"lon":139.6377514,"time":1585550946.633,"speed":0.06498695909976959,"bearing":268.8760681152344,"altitude":83.15460205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550946.633637,"delta_ms":0},{"type":"getStatus","timestamp":1585550948.676,"event_timestamp":1585550947.178268,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550948.676,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.043,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550947.61,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6154479,"lon":139.637751,"time":1585550947.626,"speed":0.0471394807100296,"bearing":276.3790588378906,"altitude":83.1881103515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550947.62664,"delta_ms":0},{"type":"getStatus","timestamp":1585550949.753,"event_timestamp":1585550948.254386,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550949.753,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.127,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550948.676,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154485,"lon":139.6377508,"time":1585550948.625,"speed":0.049753185361623767,"bearing":322.94940185546877,"altitude":83.26788330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550948.625618,"delta_ms":0},{"type":"getStatus","timestamp":1585550950.802,"event_timestamp":1585550949.302811,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550950.802,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.177,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550949.753,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154487,"lon":139.6377492,"time":1585550949.628,"speed":0.10108601301908493,"bearing":289.55877685546877,"altitude":83.19439697265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550949.628764,"delta_ms":0},{"type":"getStatus","timestamp":1585550951.871,"event_timestamp":1585550950.372227,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550951.871,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.243,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550950.802,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154491,"lon":139.6377484,"time":1585550950.619,"speed":0.0935746356844902,"bearing":293.5488586425781,"altitude":83.3441162109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550950.619999,"delta_ms":0},{"type":"getStatus","timestamp":1585550952.933,"event_timestamp":1585550951.43418,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550952.933,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.314,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550951.871,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154492,"lon":139.6377476,"time":1585550951.627,"speed":0.08220098167657852,"bearing":288.6162414550781,"altitude":83.348388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550951.627719,"delta_ms":0},{"type":"getStatus","timestamp":1585550953.995,"event_timestamp":1585550952.496168,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550953.995,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.368,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550952.933,"bearing":228.93380737304688}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.615448,"lon":139.6377461,"time":1585550952.657,"speed":0.1499970704317093,"bearing":229.00074768066407,"altitude":83.252685546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550952.657975,"delta_ms":0},{"type":"getStatus","timestamp":1585550955.096,"event_timestamp":1585550953.599539,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550955.096,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":2.439,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550953.995,"bearing":228.93380737304688}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6154463,"lon":139.637744,"time":1585550953.681,"speed":0.5597357749938965,"bearing":228.99642944335938,"altitude":83.11846923828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550953.681537,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154421,"lon":139.637738,"time":1585550954.627,"speed":1.1096386909484864,"bearing":228.99790954589845,"altitude":82.953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550954.62786,"delta_ms":0},{"type":"getStatus","timestamp":1585550956.175,"event_timestamp":1585550954.675963,"result":{"route_state":"tracking","location":{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550956.175,"speed":2.2510483264923097,"bearing":228.93380737304688,"altitude":81.69073486328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1118.28515625,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":772.5916137695313,"remaining_step_duration":190.0,"state_message":"","in_tunnel":false,"predicted":1.548,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.615440368652347,"lon":139.6376953125,"time":1585550955.096,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6154332,"lon":139.6377256,"time":1585550955.624,"speed":2.1990604400634767,"bearing":229.99652099609376,"altitude":82.8087158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550955.624621,"delta_ms":0},{"type":"getStatus","timestamp":1585550957.236,"event_timestamp":1585550955.739361,"result":{"route_state":"tracking","location":{"lat":35.61542510986328,"lon":139.63768005371095,"time":1585550957.236,"speed":1.6848821640014649,"bearing":228.93380737304688,"altitude":82.8087158203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1116.1405029296876,"remaining_leg_duration":275.355,"step_index":0,"remaining_step_distance":770.4468994140625,"remaining_step_duration":189.0,"state_message":"","in_tunnel":false,"predicted":1.612,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.61542510986328,"lon":139.63768005371095,"time":1585550957.236,"bearing":228.93380737304688}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6154174,"lon":139.6377029,"time":1585550956.617,"speed":3.260866641998291,"bearing":228.98489379882813,"altitude":82.92120361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550956.617498,"delta_ms":0},{"type":"getStatus","timestamp":1585550958.316,"event_timestamp":1585550956.816988,"result":{"route_state":"tracking","location":{"lat":35.61540222167969,"lon":139.6376495361328,"time":1585550958.316,"speed":2.744191884994507,"bearing":228.93380737304688,"altitude":82.92120361328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1112.3861083984376,"remaining_leg_duration":274.355,"step_index":0,"remaining_step_distance":766.6925659179688,"remaining_step_duration":188.0,"state_message":"","in_tunnel":false,"predicted":1.699,"shape_index":30,"intersection_index":25,"road_name":"","key_points":[{"lat":35.61540222167969,"lon":139.6376495361328,"time":1585550958.316,"bearing":228.93380737304688}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6153967,"lon":139.6376731,"time":1585550957.617,"speed":4.126552581787109,"bearing":229.99037170410157,"altitude":82.9617919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550957.617901,"delta_ms":0},{"type":"getStatus","timestamp":1585550959.37,"event_timestamp":1585550957.870813,"result":{"route_state":"tracking","location":{"lat":35.61537551879883,"lon":139.6376190185547,"time":1585550959.37,"speed":3.6227309703826906,"bearing":230.0537109375,"altitude":82.9617919921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1108.194580078125,"remaining_leg_duration":273.355,"step_index":0,"remaining_step_distance":762.5009765625,"remaining_step_duration":187.0,"state_message":"","in_tunnel":false,"predicted":1.753,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.615379333496097,"lon":139.6376190185547,"time":1585550959.26,"bearing":228.93380737304688},{"lat":35.61537551879883,"lon":139.6376190185547,"time":1585550959.37,"bearing":230.0537109375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6153695,"lon":139.6376318,"time":1585550958.626,"speed":5.199728012084961,"bearing":229.98252868652345,"altitude":83.00799560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550958.626408,"delta_ms":0},{"type":"getStatus","timestamp":1585550960.418,"event_timestamp":1585550958.919413,"result":{"route_state":"tracking","location":{"lat":35.615333557128909,"lon":139.63754272460938,"time":1585550960.418,"speed":4.705568313598633,"bearing":230.0537109375,"altitude":83.00799560546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1100.048828125,"remaining_leg_duration":271.355,"step_index":0,"remaining_step_distance":754.3553466796875,"remaining_step_duration":185.0,"state_message":"","in_tunnel":false,"predicted":1.792,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.615333557128909,"lon":139.63754272460938,"time":1585550960.418,"bearing":230.0537109375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6153374,"lon":139.6375815,"time":1585550959.636,"speed":6.127455711364746,"bearing":230.9943084716797,"altitude":83.24615478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550959.636569,"delta_ms":0},{"type":"getStatus","timestamp":1585550961.479,"event_timestamp":1585550959.9805,"result":{"route_state":"tracking","location":{"lat":35.61530303955078,"lon":139.63751220703126,"time":1585550961.479,"speed":5.6228485107421879,"bearing":230.0537109375,"altitude":83.24615478515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1095.7628173828126,"remaining_leg_duration":270.355,"step_index":0,"remaining_step_distance":750.0692749023438,"remaining_step_duration":184.0,"state_message":"","in_tunnel":false,"predicted":1.843,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.61530303955078,"lon":139.63751220703126,"time":1585550961.479,"bearing":230.0537109375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6153,"lon":139.6375252,"time":1585550960.638,"speed":6.970728874206543,"bearing":230.98605346679688,"altitude":83.16552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550960.64194,"delta_ms":3},{"type":"getStatus","timestamp":1585550962.526,"event_timestamp":1585550961.026942,"result":{"route_state":"tracking","location":{"lat":35.615234375,"lon":139.6374053955078,"time":1585550962.526,"speed":6.656698703765869,"bearing":230.0537109375,"altitude":83.16552734375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1083.4481201171876,"remaining_leg_duration":267.355,"step_index":0,"remaining_step_distance":737.7545166015625,"remaining_step_duration":181.0,"state_message":"","in_tunnel":false,"predicted":1.888,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.615234375,"lon":139.6374053955078,"time":1585550962.526,"bearing":230.0537109375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6152572,"lon":139.6374632,"time":1585550961.633,"speed":7.218123435974121,"bearing":229.01353454589845,"altitude":83.66058349609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550961.634262,"delta_ms":0},{"type":"getStatus","timestamp":1585550963.583,"event_timestamp":1585550962.084474,"result":{"route_state":"tracking","location":{"lat":35.61520004272461,"lon":139.63735961914063,"time":1585550963.583,"speed":7.065244197845459,"bearing":230.0537109375,"altitude":83.66058349609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1077.8173828125,"remaining_leg_duration":265.355,"step_index":0,"remaining_step_distance":732.1238403320313,"remaining_step_duration":180.0,"state_message":"","in_tunnel":false,"predicted":1.95,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.61520004272461,"lon":139.63735961914063,"time":1585550963.583,"bearing":230.0537109375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6152144,"lon":139.6374039,"time":1585550962.613,"speed":6.783570289611816,"bearing":229.00389099121095,"altitude":83.79718017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550962.613975,"delta_ms":0},{"type":"getStatus","timestamp":1585550964.635,"event_timestamp":1585550963.136245,"result":{"route_state":"tracking","location":{"lat":35.615142822265628,"lon":139.63726806640626,"time":1585550964.635,"speed":7.049101829528809,"bearing":230.0537109375,"altitude":83.79718017578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1067.3760986328126,"remaining_leg_duration":263.355,"step_index":0,"remaining_step_distance":721.6824951171875,"remaining_step_duration":177.0,"state_message":"","in_tunnel":false,"predicted":2.022,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.615142822265628,"lon":139.63726806640626,"time":1585550964.635,"bearing":230.0537109375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6151736,"lon":139.6373471,"time":1585550963.615,"speed":6.700104713439941,"bearing":229.0000762939453,"altitude":83.8912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550963.615986,"delta_ms":0},{"type":"getStatus","timestamp":1585550965.684,"event_timestamp":1585550964.185772,"result":{"route_state":"tracking","location":{"lat":35.6151008605957,"lon":139.63720703125,"time":1585550965.684,"speed":6.884344100952148,"bearing":230.0537109375,"altitude":83.8912353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1060.142578125,"remaining_leg_duration":261.355,"step_index":0,"remaining_step_distance":714.448974609375,"remaining_step_duration":176.0,"state_message":"","in_tunnel":false,"predicted":2.069,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.6151008605957,"lon":139.63720703125,"time":1585550965.684,"bearing":230.0537109375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6151344,"lon":139.6372907,"time":1585550964.621,"speed":6.620585918426514,"bearing":229.0006561279297,"altitude":84.14825439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550964.622041,"delta_ms":0},{"type":"getStatus","timestamp":1585550966.731,"event_timestamp":1585550965.23271,"result":{"route_state":"tracking","location":{"lat":35.61506271362305,"lon":139.6371612548828,"time":1585550966.731,"speed":6.731978893280029,"bearing":230.0537109375,"altitude":84.14825439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1054.2386474609376,"remaining_leg_duration":260.355,"step_index":0,"remaining_step_distance":708.5451049804688,"remaining_step_duration":174.0,"state_message":"","in_tunnel":false,"predicted":2.11,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.61506271362305,"lon":139.6371612548828,"time":1585550966.731,"bearing":230.0537109375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6150951,"lon":139.6372331,"time":1585550965.628,"speed":6.659633159637451,"bearing":228.99969482421876,"altitude":83.85028076171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550965.628868,"delta_ms":0},{"type":"getStatus","timestamp":1585550967.792,"event_timestamp":1585550966.293913,"result":{"route_state":"tracking","location":{"lat":35.61502456665039,"lon":139.63710021972657,"time":1585550967.792,"speed":6.635488033294678,"bearing":230.0537109375,"altitude":83.85028076171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1047.279052734375,"remaining_leg_duration":258.355,"step_index":0,"remaining_step_distance":701.58544921875,"remaining_step_duration":172.0,"state_message":"","in_tunnel":false,"predicted":2.164,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.61502456665039,"lon":139.63710021972657,"time":1585550967.792,"bearing":230.0537109375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6150559,"lon":139.6371761,"time":1585550966.622,"speed":6.333621501922607,"bearing":229.00430297851563,"altitude":83.68109130859375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550966.623143,"delta_ms":0},{"type":"getStatus","timestamp":1585550968.837,"event_timestamp":1585550967.338018,"result":{"route_state":"tracking","location":{"lat":35.614986419677737,"lon":139.6370391845703,"time":1585550968.837,"speed":6.491790771484375,"bearing":230.0537109375,"altitude":83.68109130859375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1040.31787109375,"remaining_leg_duration":256.355,"step_index":0,"remaining_step_distance":694.624267578125,"remaining_step_duration":171.0,"state_message":"","in_tunnel":false,"predicted":2.215,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.614986419677737,"lon":139.6370391845703,"time":1585550968.837,"bearing":230.0537109375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6150193,"lon":139.637123,"time":1585550967.62,"speed":6.122178554534912,"bearing":229.0027618408203,"altitude":83.6549072265625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550967.62114,"delta_ms":0},{"type":"getStatus","timestamp":1585550969.917,"event_timestamp":1585550968.419141,"result":{"route_state":"tracking","location":{"lat":35.61494827270508,"lon":139.63697814941407,"time":1585550969.917,"speed":6.2939019203186039,"bearing":230.0537109375,"altitude":83.6549072265625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1033.3555908203126,"remaining_leg_duration":254.355,"step_index":0,"remaining_step_distance":687.6620483398438,"remaining_step_duration":169.0,"state_message":"","in_tunnel":false,"predicted":2.297,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.61494827270508,"lon":139.63697814941407,"time":1585550969.917,"bearing":230.0537109375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.614983,"lon":139.6370729,"time":1585550968.625,"speed":6.129932403564453,"bearing":228.9998779296875,"altitude":83.0194091796875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550968.626074,"delta_ms":0},{"type":"getStatus","timestamp":1585550970.972,"event_timestamp":1585550969.476288,"result":{"route_state":"tracking","location":{"lat":35.61491394042969,"lon":139.63693237304688,"time":1585550970.972,"speed":6.157803058624268,"bearing":230.0537109375,"altitude":83.0194091796875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1027.726806640625,"remaining_leg_duration":253.355,"step_index":0,"remaining_step_distance":682.0332641601563,"remaining_step_duration":168.0,"state_message":"","in_tunnel":false,"predicted":2.347,"shape_index":31,"intersection_index":26,"road_name":"","key_points":[{"lat":35.61491394042969,"lon":139.63693237304688,"time":1585550970.972,"bearing":230.0537109375}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6149458,"lon":139.6370215,"time":1585550969.63,"speed":6.686703205108643,"bearing":228.99639892578126,"altitude":82.7073974609375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550969.630219,"delta_ms":0},{"type":"getStatus","timestamp":1585550972.021,"event_timestamp":1585550970.522639,"result":{"route_state":"tracking","location":{"lat":35.614864349365237,"lon":139.63687133789063,"time":1585550972.021,"speed":6.442263603210449,"bearing":224.2906494140625,"altitude":82.7073974609375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1019.9146728515625,"remaining_leg_duration":251.355,"step_index":0,"remaining_step_distance":674.2211303710938,"remaining_step_duration":166.0,"state_message":"","in_tunnel":false,"predicted":2.391,"shape_index":32,"intersection_index":27,"road_name":"","key_points":[{"lat":35.614891052246097,"lon":139.63690185546876,"time":1585550971.476,"bearing":230.0537109375},{"lat":35.614864349365237,"lon":139.63687133789063,"time":1585550972.021,"bearing":224.2906494140625}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6149065,"lon":139.6369665,"time":1585550970.621,"speed":6.550810813903809,"bearing":229.00086975097657,"altitude":82.128662109375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585550970.62122,"delta_ms":0},{"type":"getStatus","timestamp":1585550973.068,"event_timestamp":1585550971.569784,"result":{"route_state":"tracking","location":{"lat":35.61481857299805,"lon":139.63681030273438,"time":1585550973.068,"speed":6.55952787399292,"bearing":224.2906494140625,"altitude":82.128662109375,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1012.4086303710938,"remaining_leg_duration":249.355,"step_index":0,"remaining_step_distance":666.715087890625,"remaining_step_duration":164.0,"state_message":"","in_tunnel":false,"predicted":2.447,"shape_index":32,"intersection_index":27,"road_name":"","key_points":[{"lat":35.61481857299805,"lon":139.63681030273438,"time":1585550973.068,"bearing":224.2906494140625}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6148685,"lon":139.6369087,"time":1585550971.639,"speed":7.119457244873047,"bearing":230.99789428710938,"altitude":81.99188232421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585550971.63958,"delta_ms":0},{"type":"getStatus","timestamp":1585550974.133,"event_timestamp":1585550972.634086,"result":{"route_state":"tracking","location":{"lat":35.61479187011719,"lon":139.63673400878907,"time":1585550974.133,"speed":6.915497779846191,"bearing":250.11061096191407,"altitude":81.99188232421875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":1004.7488403320313,"remaining_leg_duration":247.355,"step_index":0,"remaining_step_distance":659.0552978515625,"remaining_step_duration":162.0,"state_message":"","in_tunnel":false,"predicted":2.494,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.61481475830078,"lon":139.63681030273438,"time":1585550973.126,"bearing":224.2906494140625},{"lat":35.61479187011719,"lon":139.63673400878907,"time":1585550974.133,"bearing":250.11061096191407}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6148316,"lon":139.6368434,"time":1585550972.739,"speed":7.7392578125,"bearing":239.99411010742188,"altitude":81.72186279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550972.739811,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6148013,"lon":139.6367617,"time":1585550973.625,"speed":8.74800968170166,"bearing":249.9326934814453,"altitude":81.84686279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550973.626167,"delta_ms":0},{"type":"getStatus","timestamp":1585550975.239,"event_timestamp":1585550973.740054,"result":{"route_state":"tracking","location":{"lat":35.6147575378418,"lon":139.63661193847657,"time":1585550975.239,"speed":8.228797912597657,"bearing":250.11061096191407,"altitude":81.84686279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":993.060302734375,"remaining_leg_duration":244.355,"step_index":0,"remaining_step_distance":647.3667602539063,"remaining_step_duration":159.0,"state_message":"","in_tunnel":false,"predicted":1.614,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.6147575378418,"lon":139.63661193847657,"time":1585550975.239,"bearing":250.11061096191407}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6147766,"lon":139.6366639,"time":1585550974.629,"speed":9.902740478515625,"bearing":250.96888732910157,"altitude":81.63104248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550974.629686,"delta_ms":0},{"type":"getStatus","timestamp":1585550976.288,"event_timestamp":1585550974.789424,"result":{"route_state":"tracking","location":{"lat":35.61472702026367,"lon":139.63650512695313,"time":1585550976.288,"speed":9.348873138427735,"bearing":250.11061096191407,"altitude":81.63104248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":982.814453125,"remaining_leg_duration":242.355,"step_index":0,"remaining_step_distance":637.120849609375,"remaining_step_duration":157.0,"state_message":"","in_tunnel":false,"predicted":1.659,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.61472702026367,"lon":139.63650512695313,"time":1585550976.288,"bearing":250.11061096191407}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6147488,"lon":139.6365563,"time":1585550975.63,"speed":9.890653610229493,"bearing":250.003173828125,"altitude":81.73028564453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550975.631035,"delta_ms":0},{"type":"getStatus","timestamp":1585550977.347,"event_timestamp":1585550975.848177,"result":{"route_state":"tracking","location":{"lat":35.614688873291019,"lon":139.63638305664063,"time":1585550977.347,"speed":9.851408958435059,"bearing":250.11061096191407,"altitude":81.73028564453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":970.9824829101563,"remaining_leg_duration":239.355,"step_index":0,"remaining_step_distance":625.2889404296875,"remaining_step_duration":154.0,"state_message":"","in_tunnel":false,"predicted":1.717,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.614688873291019,"lon":139.63638305664063,"time":1585550977.347,"bearing":250.11061096191407}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6147188,"lon":139.6364512,"time":1585550976.613,"speed":10.009305000305176,"bearing":249.00125122070313,"altitude":81.60205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550976.613957,"delta_ms":0},{"type":"getStatus","timestamp":1585550978.392,"event_timestamp":1585550976.894272,"result":{"route_state":"tracking","location":{"lat":35.614654541015628,"lon":139.63626098632813,"time":1585550978.392,"speed":10.113239288330079,"bearing":250.11061096191407,"altitude":81.60205078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":959.2938842773438,"remaining_leg_duration":236.355,"step_index":0,"remaining_step_distance":613.600341796875,"remaining_step_duration":151.0,"state_message":"","in_tunnel":false,"predicted":1.779,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.614654541015628,"lon":139.63626098632813,"time":1585550978.392,"bearing":250.11061096191407}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6146882,"lon":139.636348,"time":1585550977.616,"speed":9.72026252746582,"bearing":249.0002899169922,"altitude":81.4783935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550977.61666,"delta_ms":0},{"type":"getStatus","timestamp":1585550979.439,"event_timestamp":1585550977.941119,"result":{"route_state":"tracking","location":{"lat":35.614627838134769,"lon":139.63616943359376,"time":1585550979.439,"speed":9.773414611816407,"bearing":250.11061096191407,"altitude":81.4783935546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":950.4915161132813,"remaining_leg_duration":234.355,"step_index":0,"remaining_step_distance":604.7979736328125,"remaining_step_duration":149.0,"state_message":"","in_tunnel":false,"predicted":1.823,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.614627838134769,"lon":139.63616943359376,"time":1585550979.439,"bearing":250.11061096191407}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6146574,"lon":139.6362456,"time":1585550978.623,"speed":9.889678001403809,"bearing":248.99952697753907,"altitude":81.10162353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550978.623856,"delta_ms":0},{"type":"getStatus","timestamp":1585550980.491,"event_timestamp":1585550978.992015,"result":{"route_state":"tracking","location":{"lat":35.61459732055664,"lon":139.6360626220703,"time":1585550980.491,"speed":9.878325462341309,"bearing":250.11061096191407,"altitude":81.10162353515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":940.2457885742188,"remaining_leg_duration":232.355,"step_index":0,"remaining_step_distance":594.55224609375,"remaining_step_duration":146.0,"state_message":"","in_tunnel":false,"predicted":1.868,"shape_index":33,"intersection_index":28,"road_name":"","key_points":[{"lat":35.61459732055664,"lon":139.6360626220703,"time":1585550980.491,"bearing":250.11061096191407}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6146262,"lon":139.636143,"time":1585550979.635,"speed":10.169659614562989,"bearing":248.9995574951172,"altitude":81.03961181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550979.63608,"delta_ms":0},{"type":"getStatus","timestamp":1585550981.542,"event_timestamp":1585550980.043161,"result":{"route_state":"tracking","location":{"lat":35.61456298828125,"lon":139.6359405517578,"time":1585550981.542,"speed":10.072402000427246,"bearing":250.9645538330078,"altitude":81.03961181640625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":928.5471801757813,"remaining_leg_duration":229.355,"step_index":0,"remaining_step_distance":582.8536376953125,"remaining_step_duration":143.0,"state_message":"","in_tunnel":false,"predicted":1.907,"shape_index":34,"intersection_index":29,"road_name":"","key_points":[{"lat":35.614585876464847,"lon":139.6360321044922,"time":1585550980.764,"bearing":250.11061096191407},{"lat":35.61456298828125,"lon":139.6359405517578,"time":1585550981.542,"bearing":250.9645538330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6145932,"lon":139.636037,"time":1585550980.621,"speed":10.447196006774903,"bearing":247.99794006347657,"altitude":80.69354248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550980.621694,"delta_ms":0},{"type":"getStatus","timestamp":1585550982.594,"event_timestamp":1585550981.095409,"result":{"route_state":"tracking","location":{"lat":35.614532470703128,"lon":139.63583374023438,"time":1585550982.594,"speed":10.333832740783692,"bearing":250.9645538330078,"altitude":80.69354248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":918.3053588867188,"remaining_leg_duration":226.355,"step_index":0,"remaining_step_distance":572.61181640625,"remaining_step_duration":141.0,"state_message":"","in_tunnel":false,"predicted":1.973,"shape_index":34,"intersection_index":29,"road_name":"","key_points":[{"lat":35.614532470703128,"lon":139.63583374023438,"time":1585550982.594,"bearing":250.9645538330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6145588,"lon":139.6359284,"time":1585550981.614,"speed":10.628377914428711,"bearing":248.9957733154297,"altitude":80.40472412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550981.615009,"delta_ms":0},{"type":"getStatus","timestamp":1585550983.641,"event_timestamp":1585550982.143163,"result":{"route_state":"tracking","location":{"lat":35.61449432373047,"lon":139.63571166992188,"time":1585550983.641,"speed":10.518556594848633,"bearing":250.9645538330078,"altitude":80.40472412109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":906.4783325195313,"remaining_leg_duration":223.355,"step_index":0,"remaining_step_distance":560.7847900390625,"remaining_step_duration":138.0,"state_message":"","in_tunnel":false,"predicted":2.027,"shape_index":34,"intersection_index":29,"road_name":"","key_points":[{"lat":35.61449432373047,"lon":139.63571166992188,"time":1585550983.641,"bearing":250.9645538330078}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6145247,"lon":139.6358195,"time":1585550982.647,"speed":10.531118392944336,"bearing":249.0018768310547,"altitude":79.7373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550982.648088,"delta_ms":0},{"type":"getStatus","timestamp":1585550984.684,"event_timestamp":1585550983.18484,"result":{"route_state":"tracking","location":{"lat":35.614463806152347,"lon":139.63558959960938,"time":1585550984.684,"speed":10.483234405517579,"bearing":250.9645538330078,"altitude":79.7373046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":894.9273681640625,"remaining_leg_duration":220.355,"step_index":0,"remaining_step_distance":549.2338256835938,"remaining_step_duration":135.0,"state_message":"","in_tunnel":false,"predicted":2.037,"shape_index":34,"intersection_index":29,"road_name":"","key_points":[{"lat":35.614463806152347,"lon":139.63558959960938,"time":1585550984.684,"bearing":250.9645538330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6144914,"lon":139.6357115,"time":1585550983.629,"speed":10.335213661193848,"bearing":249.00909423828126,"altitude":79.3375244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550983.629394,"delta_ms":0},{"type":"getStatus","timestamp":1585550985.737,"event_timestamp":1585550984.238029,"result":{"route_state":"tracking","location":{"lat":35.61442947387695,"lon":139.63546752929688,"time":1585550985.737,"speed":10.405545234680176,"bearing":250.9645538330078,"altitude":79.3375244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":883.2379150390625,"remaining_leg_duration":218.355,"step_index":0,"remaining_step_distance":537.5443725585938,"remaining_step_duration":132.0,"state_message":"","in_tunnel":false,"predicted":2.108,"shape_index":34,"intersection_index":29,"road_name":"","key_points":[{"lat":35.61442947387695,"lon":139.63546752929688,"time":1585550985.737,"bearing":250.9645538330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6144594,"lon":139.6356081,"time":1585550984.608,"speed":9.63286304473877,"bearing":249.02389526367188,"altitude":79.4010009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550984.60829,"delta_ms":0},{"type":"getStatus","timestamp":1585550986.786,"event_timestamp":1585550985.286903,"result":{"route_state":"tracking","location":{"lat":35.614402770996097,"lon":139.6353759765625,"time":1585550986.786,"speed":9.958850860595704,"bearing":250.40049743652345,"altitude":79.4010009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":874.4321899414063,"remaining_leg_duration":215.355,"step_index":0,"remaining_step_distance":528.7385864257813,"remaining_step_duration":130.0,"state_message":"","in_tunnel":false,"predicted":2.178,"shape_index":35,"intersection_index":30,"road_name":"","key_points":[{"lat":35.614410400390628,"lon":139.63540649414063,"time":1585550986.441,"bearing":250.9645538330078},{"lat":35.614402770996097,"lon":139.6353759765625,"time":1585550986.786,"bearing":250.40049743652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.61443,"lon":139.6355104,"time":1585550985.625,"speed":9.350434303283692,"bearing":250.0001678466797,"altitude":78.86328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550985.625412,"delta_ms":0},{"type":"getStatus","timestamp":1585550987.839,"event_timestamp":1585550986.339621,"result":{"route_state":"tracking","location":{"lat":35.6143798828125,"lon":139.6352996826172,"time":1585550987.839,"speed":9.493498802185059,"bearing":250.40049743652345,"altitude":78.86328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":867.0782470703125,"remaining_leg_duration":214.355,"step_index":0,"remaining_step_distance":521.3847045898438,"remaining_step_duration":128.0,"state_message":"","in_tunnel":false,"predicted":2.214,"shape_index":35,"intersection_index":30,"road_name":"","key_points":[{"lat":35.6143798828125,"lon":139.6352996826172,"time":1585550987.839,"bearing":250.40049743652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6144033,"lon":139.6354123,"time":1585550986.644,"speed":9.27029037475586,"bearing":250.00051879882813,"altitude":79.030517578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550986.644668,"delta_ms":0},{"type":"getStatus","timestamp":1585550988.89,"event_timestamp":1585550987.390845,"result":{"route_state":"tracking","location":{"lat":35.614349365234378,"lon":139.63519287109376,"time":1585550988.89,"speed":9.399803161621094,"bearing":250.40049743652345,"altitude":79.030517578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":856.8327026367188,"remaining_leg_duration":211.355,"step_index":0,"remaining_step_distance":511.1391296386719,"remaining_step_duration":126.0,"state_message":"","in_tunnel":false,"predicted":2.246,"shape_index":35,"intersection_index":30,"road_name":"","key_points":[{"lat":35.614349365234378,"lon":139.63519287109376,"time":1585550988.89,"bearing":250.40049743652345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6143768,"lon":139.6353148,"time":1585550987.624,"speed":9.418928146362305,"bearing":249.00021362304688,"altitude":78.29510498046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550987.624315,"delta_ms":0},{"type":"getStatus","timestamp":1585550989.955,"event_timestamp":1585550988.4560919,"result":{"route_state":"tracking","location":{"lat":35.61431884765625,"lon":139.63507080078126,"time":1585550989.955,"speed":9.373906135559082,"bearing":246.70693969726563,"altitude":78.29510498046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":845.2445068359375,"remaining_leg_duration":208.355,"step_index":0,"remaining_step_distance":499.5509338378906,"remaining_step_duration":123.0,"state_message":"","in_tunnel":false,"predicted":2.331,"shape_index":36,"intersection_index":31,"road_name":"","key_points":[{"lat":35.61432647705078,"lon":139.63511657714845,"time":1585550989.566,"bearing":250.40049743652345},{"lat":35.61431884765625,"lon":139.63507080078126,"time":1585550989.955,"bearing":246.70693969726563}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6143473,"lon":139.6352144,"time":1585550988.614,"speed":9.879343032836914,"bearing":247.985595703125,"altitude":77.74072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550988.614553,"delta_ms":0},{"type":"getStatus","timestamp":1585550991.026,"event_timestamp":1585550989.527156,"result":{"route_state":"tracking","location":{"lat":35.61427307128906,"lon":139.6349639892578,"time":1585550991.026,"speed":9.744138717651368,"bearing":246.70693969726563,"altitude":77.74072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":834.439208984375,"remaining_leg_duration":206.355,"step_index":0,"remaining_step_distance":488.74566650390627,"remaining_step_duration":120.0,"state_message":"","in_tunnel":false,"predicted":2.412,"shape_index":36,"intersection_index":31,"road_name":"","key_points":[{"lat":35.61427307128906,"lon":139.6349639892578,"time":1585550991.026,"bearing":246.70693969726563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6143156,"lon":139.6351105,"time":1585550989.615,"speed":10.159727096557618,"bearing":248.999267578125,"altitude":76.69500732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550989.615927,"delta_ms":0},{"type":"getStatus","timestamp":1585550992.082,"event_timestamp":1585550990.582536,"result":{"route_state":"tracking","location":{"lat":35.61423873901367,"lon":139.63487243652345,"time":1585550992.082,"speed":9.915449142456055,"bearing":246.70693969726563,"altitude":76.69500732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":825.316650390625,"remaining_leg_duration":203.355,"step_index":0,"remaining_step_distance":479.62310791015627,"remaining_step_duration":118.0,"state_message":"","in_tunnel":false,"predicted":2.467,"shape_index":36,"intersection_index":31,"road_name":"","key_points":[{"lat":35.61423873901367,"lon":139.63487243652345,"time":1585550992.082,"bearing":246.70693969726563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.614285,"lon":139.6350032,"time":1585550990.649,"speed":10.48709774017334,"bearing":249.99380493164063,"altitude":75.63861083984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550990.649407,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6142541,"lon":139.6348935,"time":1585550991.621,"speed":10.500323295593262,"bearing":249.00221252441407,"altitude":74.7327880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550991.622083,"delta_ms":0},{"type":"getStatus","timestamp":1585550993.137,"event_timestamp":1585550991.63781,"result":{"route_state":"tracking","location":{"lat":35.61418914794922,"lon":139.6347198486328,"time":1585550993.137,"speed":10.540082931518555,"bearing":246.70693969726563,"altitude":74.7327880859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":810.4512329101563,"remaining_leg_duration":200.355,"step_index":0,"remaining_step_distance":464.7576904296875,"remaining_step_duration":114.0,"state_message":"","in_tunnel":false,"predicted":1.516,"shape_index":36,"intersection_index":31,"road_name":"","key_points":[{"lat":35.61418914794922,"lon":139.6347198486328,"time":1585550993.137,"bearing":246.70693969726563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6142205,"lon":139.6347844,"time":1585550992.628,"speed":10.31020736694336,"bearing":246.00149536132813,"altitude":73.9521484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550992.628454,"delta_ms":0},{"type":"getStatus","timestamp":1585550994.182,"event_timestamp":1585550992.684484,"result":{"route_state":"tracking","location":{"lat":35.6141471862793,"lon":139.63461303710938,"time":1585550994.182,"speed":10.384529113769532,"bearing":246.70693969726563,"altitude":73.9521484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":799.7249755859375,"remaining_leg_duration":197.355,"step_index":0,"remaining_step_distance":454.0314025878906,"remaining_step_duration":112.0,"state_message":"","in_tunnel":false,"predicted":1.554,"shape_index":36,"intersection_index":31,"road_name":"","key_points":[{"lat":35.6141471862793,"lon":139.63461303710938,"time":1585550994.182,"bearing":246.70693969726563}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6141816,"lon":139.6346804,"time":1585550993.62,"speed":10.222501754760743,"bearing":241.02149963378907,"altitude":73.32135009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550993.620355,"delta_ms":0},{"type":"getStatus","timestamp":1585550995.237,"event_timestamp":1585550993.739997,"result":{"route_state":"tracking","location":{"lat":35.614097595214847,"lon":139.634521484375,"time":1585550995.237,"speed":10.3124418258667,"bearing":231.66441345214845,"altitude":73.32135009765625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":789.6190185546875,"remaining_leg_duration":195.355,"step_index":0,"remaining_step_distance":443.92547607421877,"remaining_step_duration":109.0,"state_message":"","in_tunnel":false,"predicted":1.617,"shape_index":37,"intersection_index":32,"road_name":"","key_points":[{"lat":35.614139556884769,"lon":139.63458251953126,"time":1585550994.483,"bearing":246.70693969726563},{"lat":35.614097595214847,"lon":139.634521484375,"time":1585550995.237,"bearing":231.66441345214845}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6141352,"lon":139.6345837,"time":1585550994.624,"speed":10.230086326599121,"bearing":236.00306701660157,"altitude":72.802001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550994.624312,"delta_ms":0},{"type":"getStatus","timestamp":1585550996.299,"event_timestamp":1585550994.800108,"result":{"route_state":"tracking","location":{"lat":35.61404037475586,"lon":139.63442993164063,"time":1585550996.299,"speed":10.202649116516114,"bearing":231.66441345214845,"altitude":72.802001953125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":779.173095703125,"remaining_leg_duration":192.355,"step_index":0,"remaining_step_distance":433.47955322265627,"remaining_step_duration":107.0,"state_message":"","in_tunnel":false,"predicted":1.675,"shape_index":37,"intersection_index":32,"road_name":"","key_points":[{"lat":35.61404037475586,"lon":139.63442993164063,"time":1585550996.299,"bearing":231.66441345214845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6140808,"lon":139.6344921,"time":1585550995.627,"speed":10.329963684082032,"bearing":230.00392150878907,"altitude":71.9342041015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550995.628015,"delta_ms":0},{"type":"getStatus","timestamp":1585550997.39,"event_timestamp":1585550995.890674,"result":{"route_state":"tracking","location":{"lat":35.61397171020508,"lon":139.63433837890626,"time":1585550997.39,"speed":10.271163940429688,"bearing":223.4845733642578,"altitude":71.9342041015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":767.8284912109375,"remaining_leg_duration":189.355,"step_index":0,"remaining_step_distance":422.1349182128906,"remaining_step_duration":104.0,"state_message":"","in_tunnel":false,"predicted":1.763,"shape_index":38,"intersection_index":32,"road_name":"","key_points":[{"lat":35.6140022277832,"lon":139.63436889648438,"time":1585550996.968,"bearing":231.66441345214845},{"lat":35.61397171020508,"lon":139.63433837890626,"time":1585550997.39,"bearing":223.4845733642578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6140175,"lon":139.634408,"time":1585550996.643,"speed":10.36994457244873,"bearing":225.0034637451172,"altitude":71.65081787109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550996.643322,"delta_ms":0},{"type":"getStatus","timestamp":1585550998.458,"event_timestamp":1585550996.958703,"result":{"route_state":"tracking","location":{"lat":35.61391067504883,"lon":139.63426208496095,"time":1585550998.458,"speed":10.274935722351075,"bearing":223.4845733642578,"altitude":71.65081787109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":758.1602783203125,"remaining_leg_duration":187.355,"step_index":0,"remaining_step_distance":412.46673583984377,"remaining_step_duration":101.0,"state_message":"","in_tunnel":false,"predicted":1.815,"shape_index":38,"intersection_index":32,"road_name":"","key_points":[{"lat":35.61391067504883,"lon":139.63426208496095,"time":1585550998.458,"bearing":223.4845733642578}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6139483,"lon":139.6343309,"time":1585550997.63,"speed":10.220005989074707,"bearing":220.00450134277345,"altitude":71.60125732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550997.630751,"delta_ms":0},{"type":"getStatus","timestamp":1585550999.509,"event_timestamp":1585550998.011853,"result":{"route_state":"tracking","location":{"lat":35.613834381103519,"lon":139.6342010498047,"time":1585550999.509,"speed":10.252912521362305,"bearing":215.8530731201172,"altitude":71.60125732421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":748.029052734375,"remaining_leg_duration":184.355,"step_index":0,"remaining_step_distance":402.33551025390627,"remaining_step_duration":99.0,"state_message":"","in_tunnel":false,"predicted":1.879,"shape_index":39,"intersection_index":32,"road_name":"","key_points":[{"lat":35.61391067504883,"lon":139.63426208496095,"time":1585550998.458,"bearing":223.4845733642578},{"lat":35.613834381103519,"lon":139.6342010498047,"time":1585550999.509,"bearing":215.8530731201172}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6138752,"lon":139.6342627,"time":1585550998.626,"speed":10.199728965759278,"bearing":214.00503540039063,"altitude":71.7266845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550998.62621,"delta_ms":0},{"type":"getStatus","timestamp":1585551000.562,"event_timestamp":1585550999.062976,"result":{"route_state":"tracking","location":{"lat":35.613739013671878,"lon":139.63414001464845,"time":1585551000.562,"speed":10.286288261413575,"bearing":202.1208038330078,"altitude":71.7266845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":735.8861694335938,"remaining_leg_duration":181.355,"step_index":0,"remaining_step_distance":390.192626953125,"remaining_step_duration":96.0,"state_message":"","in_tunnel":false,"predicted":1.936,"shape_index":40,"intersection_index":32,"road_name":"","key_points":[{"lat":35.613807678222659,"lon":139.63417053222657,"time":1585550999.859,"bearing":215.8530731201172},{"lat":35.613739013671878,"lon":139.63414001464845,"time":1585551000.562,"bearing":202.1208038330078}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6137945,"lon":139.6342036,"time":1585550999.62,"speed":10.599288940429688,"bearing":208.0045166015625,"altitude":71.485107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585550999.620603,"delta_ms":0},{"type":"getStatus","timestamp":1585551001.609,"event_timestamp":1585551000.110049,"result":{"route_state":"tracking","location":{"lat":35.61363220214844,"lon":139.63409423828126,"time":1585551001.609,"speed":10.488900184631348,"bearing":196.83045959472657,"altitude":71.485107421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":723.242431640625,"remaining_leg_duration":178.355,"step_index":0,"remaining_step_distance":377.548828125,"remaining_step_duration":93.0,"state_message":"","in_tunnel":false,"predicted":1.989,"shape_index":41,"intersection_index":32,"road_name":"","key_points":[{"lat":35.613685607910159,"lon":139.6341094970703,"time":1585551001.104,"bearing":202.1208038330078},{"lat":35.61363220214844,"lon":139.63409423828126,"time":1585551001.609,"bearing":196.83045959472657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6137057,"lon":139.6341542,"time":1585551000.638,"speed":10.643977165222168,"bearing":202.0284881591797,"altitude":70.7784423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551000.638547,"delta_ms":0},{"type":"getStatus","timestamp":1585551002.669,"event_timestamp":1585551001.169797,"result":{"route_state":"tracking","location":{"lat":35.61353302001953,"lon":139.63404846191407,"time":1585551002.669,"speed":10.627755165100098,"bearing":196.83045959472657,"altitude":70.7784423828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":711.4840087890625,"remaining_leg_duration":175.355,"step_index":0,"remaining_step_distance":365.79046630859377,"remaining_step_duration":90.0,"state_message":"","in_tunnel":false,"predicted":2.031,"shape_index":41,"intersection_index":32,"road_name":"","key_points":[{"lat":35.61353302001953,"lon":139.63404846191407,"time":1585551002.669,"bearing":196.83045959472657}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6136136,"lon":139.6341136,"time":1585551001.617,"speed":10.489730834960938,"bearing":199.00775146484376,"altitude":70.68634033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551001.617868,"delta_ms":0},{"type":"getStatus","timestamp":1585551003.719,"event_timestamp":1585551002.219592,"result":{"route_state":"tracking","location":{"lat":35.613426208496097,"lon":139.634033203125,"time":1585551003.719,"speed":10.634797096252442,"bearing":186.86758422851563,"altitude":70.68634033203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":699.5626220703125,"remaining_leg_duration":172.355,"step_index":0,"remaining_step_distance":353.8690490722656,"remaining_step_duration":87.0,"state_message":"","in_tunnel":false,"predicted":2.102,"shape_index":42,"intersection_index":33,"road_name":"","key_points":[{"lat":35.613521575927737,"lon":139.63404846191407,"time":1585551002.78,"bearing":196.83045959472657},{"lat":35.613426208496097,"lon":139.634033203125,"time":1585551003.719,"bearing":186.86758422851563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6135217,"lon":139.634081,"time":1585551002.624,"speed":10.259410858154297,"bearing":193.00657653808595,"altitude":70.72021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551002.624457,"delta_ms":0},{"type":"getStatus","timestamp":1585551004.768,"event_timestamp":1585551003.26937,"result":{"route_state":"tracking","location":{"lat":35.61332702636719,"lon":139.634033203125,"time":1585551004.768,"speed":10.431102752685547,"bearing":180.0,"altitude":70.72021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":688.5283203125,"remaining_leg_duration":170.355,"step_index":0,"remaining_step_distance":342.8347473144531,"remaining_step_duration":84.0,"state_message":"","in_tunnel":false,"predicted":2.144,"shape_index":43,"intersection_index":33,"road_name":"","key_points":[{"lat":35.61341857910156,"lon":139.634033203125,"time":1585551003.799,"bearing":186.86758422851563},{"lat":35.61332702636719,"lon":139.634033203125,"time":1585551004.768,"bearing":180.0}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6134292,"lon":139.6340618,"time":1585551003.641,"speed":10.469663619995118,"bearing":186.00221252441407,"altitude":70.2498779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551003.642036,"delta_ms":0},{"type":"getStatus","timestamp":1585551005.817,"event_timestamp":1585551004.318485,"result":{"route_state":"tracking","location":{"lat":35.61322784423828,"lon":139.634033203125,"time":1585551005.817,"speed":10.41514778137207,"bearing":180.0,"altitude":70.2498779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":677.4869995117188,"remaining_leg_duration":167.355,"step_index":0,"remaining_step_distance":331.79339599609377,"remaining_step_duration":82.0,"state_message":"","in_tunnel":false,"predicted":2.176,"shape_index":44,"intersection_index":34,"road_name":"","key_points":[{"lat":35.61331558227539,"lon":139.634033203125,"time":1585551004.888,"bearing":180.0},{"lat":35.61322784423828,"lon":139.634033203125,"time":1585551005.817,"bearing":180.0}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6133326,"lon":139.6340556,"time":1585551004.634,"speed":10.63970947265625,"bearing":180.0017852783203,"altitude":70.03253173828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551004.634797,"delta_ms":0},{"type":"getStatus","timestamp":1585551006.885,"event_timestamp":1585551005.388193,"result":{"route_state":"tracking","location":{"lat":35.61311721801758,"lon":139.63404846191407,"time":1585551006.885,"speed":10.596195220947266,"bearing":173.1324005126953,"altitude":70.03253173828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":665.0658569335938,"remaining_leg_duration":164.355,"step_index":0,"remaining_step_distance":319.372314453125,"remaining_step_duration":78.0,"state_message":"","in_tunnel":false,"predicted":2.251,"shape_index":45,"intersection_index":35,"road_name":"","key_points":[{"lat":35.613197326660159,"lon":139.634033203125,"time":1585551006.109,"bearing":180.0},{"lat":35.61311721801758,"lon":139.63404846191407,"time":1585551006.885,"bearing":173.1324005126953}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6132355,"lon":139.6340628,"time":1585551005.626,"speed":10.610505104064942,"bearing":177.00119018554688,"altitude":68.717529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551005.627017,"delta_ms":0},{"type":"getStatus","timestamp":1585551007.945,"event_timestamp":1585551006.447324,"result":{"route_state":"tracking","location":{"lat":35.613014221191409,"lon":139.63404846191407,"time":1585551007.945,"speed":10.644384384155274,"bearing":176.55381774902345,"altitude":68.717529296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":653.6234130859375,"remaining_leg_duration":161.355,"step_index":0,"remaining_step_distance":307.92987060546877,"remaining_step_duration":76.0,"state_message":"","in_tunnel":false,"predicted":2.319,"shape_index":46,"intersection_index":35,"road_name":"","key_points":[{"lat":35.613094329833987,"lon":139.63404846191407,"time":1585551007.12,"bearing":173.1324005126953},{"lat":35.613014221191409,"lon":139.63404846191407,"time":1585551007.945,"bearing":176.55381774902345}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6131385,"lon":139.6340736,"time":1585551006.625,"speed":10.769843101501465,"bearing":175.00054931640626,"altitude":67.9080810546875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551006.625299,"delta_ms":0},{"type":"getStatus","timestamp":1585551009.001,"event_timestamp":1585551007.501862,"result":{"route_state":"tracking","location":{"lat":35.6129150390625,"lon":139.63406372070313,"time":1585551009.001,"speed":10.720422744750977,"bearing":176.55381774902345,"altitude":67.9080810546875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":642.534912109375,"remaining_leg_duration":158.355,"step_index":0,"remaining_step_distance":296.8413391113281,"remaining_step_duration":73.0,"state_message":"","in_tunnel":false,"predicted":2.376,"shape_index":46,"intersection_index":35,"road_name":"","key_points":[{"lat":35.6129150390625,"lon":139.63406372070313,"time":1585551009.001,"bearing":176.55381774902345}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6130408,"lon":139.6340869,"time":1585551007.623,"speed":10.377546310424805,"bearing":174.01077270507813,"altitude":67.099609375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551007.624244,"delta_ms":0},{"type":"getStatus","timestamp":1585551010.05,"event_timestamp":1585551008.551059,"result":{"route_state":"tracking","location":{"lat":35.61280822753906,"lon":139.63409423828126,"time":1585551010.05,"speed":10.5585298538208,"bearing":162.79208374023438,"altitude":67.099609375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":630.2330932617188,"remaining_leg_duration":155.355,"step_index":0,"remaining_step_distance":284.53955078125,"remaining_step_duration":70.0,"state_message":"","in_tunnel":false,"predicted":2.427,"shape_index":47,"intersection_index":35,"road_name":"","voice_instruction":{"ssml_announcement":"300 メートル先、右方向 です。その先駒沢通りです","announcement":"300 メートル先、右方向 です。その先駒沢通りです","remaining_step_distance":285.0,"index":1},"key_points":[{"lat":35.61288833618164,"lon":139.63406372070313,"time":1585551009.254,"bearing":176.55381774902345},{"lat":35.61280822753906,"lon":139.63409423828126,"time":1585551010.05,"bearing":162.79208374023438}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6129475,"lon":139.6341002,"time":1585551008.636,"speed":10.143818855285645,"bearing":173.0105743408203,"altitude":66.58770751953125,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585551008.637062,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6128553,"lon":139.6341162,"time":1585551009.627,"speed":10.0503511428833,"bearing":171.00091552734376,"altitude":66.26678466796875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551009.62803,"delta_ms":0},{"type":"getStatus","timestamp":1585551011.128,"event_timestamp":1585551009.62895,"result":{"route_state":"tracking","location":{"lat":35.61272048950195,"lon":139.63414001464845,"time":1585551011.128,"speed":10.200632095336914,"bearing":162.2626953125,"altitude":66.26678466796875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":619.6240844726563,"remaining_leg_duration":153.355,"step_index":0,"remaining_step_distance":273.9305419921875,"remaining_step_duration":67.0,"state_message":"","in_tunnel":false,"predicted":1.501,"shape_index":48,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61280822753906,"lon":139.63409423828126,"time":1585551010.05,"bearing":162.79208374023438},{"lat":35.61272048950195,"lon":139.63414001464845,"time":1585551011.128,"bearing":162.2626953125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6127673,"lon":139.6341375,"time":1585551010.63,"speed":9.660573959350586,"bearing":164.0030517578125,"altitude":65.27496337890625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585551010.630333,"delta_ms":0},{"type":"getStatus","timestamp":1585551012.179,"event_timestamp":1585551010.680016,"result":{"route_state":"tracking","location":{"lat":35.61262512207031,"lon":139.63417053222657,"time":1585551012.179,"speed":9.905645370483399,"bearing":162.2626953125,"altitude":65.27496337890625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":608.7124633789063,"remaining_leg_duration":150.355,"step_index":0,"remaining_step_distance":263.0188903808594,"remaining_step_duration":65.0,"state_message":"","in_tunnel":false,"predicted":1.549,"shape_index":48,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61262512207031,"lon":139.63417053222657,"time":1585551012.179,"bearing":162.2626953125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6126853,"lon":139.6341721,"time":1585551011.624,"speed":9.421100616455079,"bearing":157.00714111328126,"altitude":64.8035888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551011.624153,"delta_ms":0},{"type":"getStatus","timestamp":1585551013.235,"event_timestamp":1585551011.736247,"result":{"route_state":"tracking","location":{"lat":35.612545013427737,"lon":139.6342010498047,"time":1585551013.235,"speed":9.572956085205079,"bearing":163.04534912109376,"altitude":64.8035888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":599.3703002929688,"remaining_leg_duration":148.355,"step_index":0,"remaining_step_distance":253.6767120361328,"remaining_step_duration":62.0,"state_message":"","in_tunnel":false,"predicted":1.611,"shape_index":49,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61257553100586,"lon":139.63418579101563,"time":1585551012.821,"bearing":162.2626953125},{"lat":35.612545013427737,"lon":139.6342010498047,"time":1585551013.235,"bearing":163.04534912109376}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6126091,"lon":139.6342154,"time":1585551012.608,"speed":9.183856010437012,"bearing":155.01535034179688,"altitude":64.619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551012.608652,"delta_ms":0},{"type":"getStatus","timestamp":1585551014.292,"event_timestamp":1585551012.792442,"result":{"route_state":"tracking","location":{"lat":35.61245346069336,"lon":139.6342315673828,"time":1585551014.292,"speed":9.304034233093262,"bearing":166.61569213867188,"altitude":64.619140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":588.8300170898438,"remaining_leg_duration":145.355,"step_index":0,"remaining_step_distance":243.13644409179688,"remaining_step_duration":60.0,"state_message":"","in_tunnel":false,"predicted":1.684,"shape_index":50,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61245346069336,"lon":139.6342315673828,"time":1585551014.292,"bearing":163.04534912109376},{"lat":35.61245346069336,"lon":139.6342315673828,"time":1585551014.292,"bearing":166.61569213867188}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6125345,"lon":139.634258,"time":1585551013.637,"speed":8.82213020324707,"bearing":157.99667358398438,"altitude":63.86834716796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551013.637717,"delta_ms":0},{"type":"getStatus","timestamp":1585551015.35,"event_timestamp":1585551013.850492,"result":{"route_state":"tracking","location":{"lat":35.61239242553711,"lon":139.63424682617188,"time":1585551015.35,"speed":9.055593490600586,"bearing":166.61569213867188,"altitude":63.86834716796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":581.896484375,"remaining_leg_duration":143.355,"step_index":0,"remaining_step_distance":236.20294189453126,"remaining_step_duration":58.0,"state_message":"","in_tunnel":false,"predicted":1.713,"shape_index":50,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61239242553711,"lon":139.63424682617188,"time":1585551015.35,"bearing":166.61569213867188}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6124619,"lon":139.6342916,"time":1585551014.625,"speed":8.541706085205079,"bearing":161.99148559570313,"altitude":63.28460693359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551014.625633,"delta_ms":0},{"type":"getStatus","timestamp":1585551016.403,"event_timestamp":1585551014.904064,"result":{"route_state":"tracking","location":{"lat":35.61229705810547,"lon":139.63427734375,"time":1585551016.403,"speed":8.711427688598633,"bearing":171.59176635742188,"altitude":63.28460693359375,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":570.9330444335938,"remaining_leg_duration":141.355,"step_index":0,"remaining_step_distance":225.23951721191407,"remaining_step_duration":55.0,"state_message":"","in_tunnel":false,"predicted":1.778,"shape_index":51,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61229705810547,"lon":139.63427734375,"time":1585551016.403,"bearing":166.61569213867188},{"lat":35.61229705810547,"lon":139.63427734375,"time":1585551016.403,"bearing":171.59176635742188}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6123891,"lon":139.6343176,"time":1585551015.62,"speed":8.479120254516602,"bearing":164.9941864013672,"altitude":62.95758056640625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585551015.620197,"delta_ms":0},{"type":"getStatus","timestamp":1585551017.454,"event_timestamp":1585551015.955414,"result":{"route_state":"tracking","location":{"lat":35.61224365234375,"lon":139.63429260253907,"time":1585551017.454,"speed":8.561883926391602,"bearing":171.59176635742188,"altitude":62.95758056640625,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":564.8296508789063,"remaining_leg_duration":139.355,"step_index":0,"remaining_step_distance":219.1360626220703,"remaining_step_duration":54.0,"state_message":"","in_tunnel":false,"predicted":1.834,"shape_index":51,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61224365234375,"lon":139.63429260253907,"time":1585551017.454,"bearing":171.59176635742188}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6123133,"lon":139.6343357,"time":1585551016.627,"speed":8.429200172424317,"bearing":167.99566650390626,"altitude":62.9708251953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551016.627747,"delta_ms":0},{"type":"getStatus","timestamp":1585551018.516,"event_timestamp":1585551017.017444,"result":{"route_state":"tracking","location":{"lat":35.612159729003909,"lon":139.63429260253907,"time":1585551018.516,"speed":8.473504066467286,"bearing":171.59176635742188,"altitude":62.9708251953125,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":555.5835571289063,"remaining_leg_duration":137.355,"step_index":0,"remaining_step_distance":209.8900146484375,"remaining_step_duration":52.0,"state_message":"","in_tunnel":false,"predicted":1.889,"shape_index":51,"intersection_index":36,"road_name":"","key_points":[{"lat":35.612159729003909,"lon":139.63429260253907,"time":1585551018.516,"bearing":171.59176635742188}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6122372,"lon":139.6343489,"time":1585551017.622,"speed":8.349226951599121,"bearing":172.9963836669922,"altitude":62.0906982421875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585551017.622472,"delta_ms":0},{"type":"getStatus","timestamp":1585551019.572,"event_timestamp":1585551018.072927,"result":{"route_state":"tracking","location":{"lat":35.61212921142578,"lon":139.63430786132813,"time":1585551019.572,"speed":8.41495418548584,"bearing":171.59176635742188,"altitude":62.0906982421875,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":552.0452880859375,"remaining_leg_duration":136.355,"step_index":0,"remaining_step_distance":206.3517303466797,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":1.95,"shape_index":51,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61212921142578,"lon":139.63430786132813,"time":1585551019.572,"bearing":171.59176635742188}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6121611,"lon":139.6343517,"time":1585551018.616,"speed":8.299712181091309,"bearing":180.9978485107422,"altitude":61.58514404296875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551018.617524,"delta_ms":0},{"type":"getStatus","timestamp":1585551020.63,"event_timestamp":1585551019.130512,"result":{"route_state":"tracking","location":{"lat":35.612056732177737,"lon":139.63427734375,"time":1585551020.63,"speed":8.32609748840332,"bearing":198.89642333984376,"altitude":61.58514404296875,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":543.5169067382813,"remaining_leg_duration":134.355,"step_index":0,"remaining_step_distance":197.82333374023438,"remaining_step_duration":49.0,"state_message":"","in_tunnel":false,"predicted":2.014,"shape_index":52,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61212921142578,"lon":139.63430786132813,"time":1585551019.572,"bearing":171.59176635742188},{"lat":35.612056732177737,"lon":139.63427734375,"time":1585551020.63,"bearing":198.89642333984376}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6120849,"lon":139.6343393,"time":1585551019.637,"speed":8.252004623413086,"bearing":192.98794555664063,"altitude":61.14495849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551019.637801,"delta_ms":0},{"type":"getStatus","timestamp":1585551021.675,"event_timestamp":1585551020.175714,"result":{"route_state":"tracking","location":{"lat":35.61196517944336,"lon":139.6342315673828,"time":1585551021.675,"speed":8.278461456298829,"bearing":202.12123107910157,"altitude":61.14495849609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":532.5158081054688,"remaining_leg_duration":131.355,"step_index":0,"remaining_step_distance":186.82223510742188,"remaining_step_duration":46.0,"state_message":"","in_tunnel":false,"predicted":2.038,"shape_index":53,"intersection_index":36,"road_name":"","key_points":[{"lat":35.612056732177737,"lon":139.63427734375,"time":1585551020.63,"bearing":198.89642333984376},{"lat":35.61196517944336,"lon":139.6342315673828,"time":1585551021.675,"bearing":202.12123107910157}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6120118,"lon":139.6343074,"time":1585551020.608,"speed":8.3923921585083,"bearing":202.96495056152345,"altitude":60.47418212890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551020.608745,"delta_ms":0},{"type":"getStatus","timestamp":1585551022.729,"event_timestamp":1585551021.230289,"result":{"route_state":"tracking","location":{"lat":35.61190414428711,"lon":139.63418579101563,"time":1585551022.729,"speed":8.373759269714356,"bearing":214.1169891357422,"altitude":60.47418212890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":524.558349609375,"remaining_leg_duration":129.355,"step_index":0,"remaining_step_distance":178.86477661132813,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":2.121,"shape_index":54,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61196517944336,"lon":139.6342315673828,"time":1585551021.675,"bearing":202.12123107910157},{"lat":35.61190414428711,"lon":139.63418579101563,"time":1585551022.729,"bearing":214.1169891357422}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6119406,"lon":139.6342614,"time":1585551021.614,"speed":8.520041465759278,"bearing":209.99600219726563,"altitude":60.6298828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551021.614218,"delta_ms":0},{"type":"getStatus","timestamp":1585551023.782,"event_timestamp":1585551022.28352,"result":{"route_state":"tracking","location":{"lat":35.61183166503906,"lon":139.6341094970703,"time":1585551023.782,"speed":8.502991676330567,"bearing":223.7247772216797,"altitude":60.6298828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":513.9614868164063,"remaining_leg_duration":127.355,"step_index":0,"remaining_step_distance":168.26792907714845,"remaining_step_duration":41.0,"state_message":"","in_tunnel":false,"predicted":2.168,"shape_index":55,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611873626708987,"lon":139.6341552734375,"time":1585551023.163,"bearing":214.1169891357422},{"lat":35.61183166503906,"lon":139.6341094970703,"time":1585551023.782,"bearing":223.7247772216797}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6118768,"lon":139.6342077,"time":1585551022.635,"speed":7.410502910614014,"bearing":215.99685668945313,"altitude":60.12933349609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551022.635635,"delta_ms":0},{"type":"getStatus","timestamp":1585551024.842,"event_timestamp":1585551023.343001,"result":{"route_state":"tracking","location":{"lat":35.61180877685547,"lon":139.6340789794922,"time":1585551024.842,"speed":7.880050182342529,"bearing":223.7247772216797,"altitude":60.12933349609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":510.215576171875,"remaining_leg_duration":126.355,"step_index":0,"remaining_step_distance":164.5220184326172,"remaining_step_duration":40.0,"state_message":"","in_tunnel":false,"predicted":2.207,"shape_index":55,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61180877685547,"lon":139.6340789794922,"time":1585551024.842,"bearing":223.7247772216797}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6118281,"lon":139.6341549,"time":1585551023.645,"speed":6.2110466957092289,"bearing":222.99224853515626,"altitude":59.5535888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551023.645978,"delta_ms":0},{"type":"getStatus","timestamp":1585551025.915,"event_timestamp":1585551024.416388,"result":{"route_state":"tracking","location":{"lat":35.61176681518555,"lon":139.63401794433595,"time":1585551025.915,"speed":6.799944877624512,"bearing":232.4478302001953,"altitude":59.5535888671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":502.98114013671877,"remaining_leg_duration":124.355,"step_index":0,"remaining_step_distance":157.28758239746095,"remaining_step_duration":39.0,"state_message":"","in_tunnel":false,"predicted":2.27,"shape_index":56,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61180877685547,"lon":139.6340789794922,"time":1585551024.842,"bearing":223.7247772216797},{"lat":35.61176681518555,"lon":139.63401794433595,"time":1585551025.915,"bearing":232.4478302001953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117924,"lon":139.6341062,"time":1585551024.631,"speed":5.1609206199646,"bearing":227.94744873046876,"altitude":59.32098388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551024.631904,"delta_ms":0},{"type":"getStatus","timestamp":1585551026.974,"event_timestamp":1585551025.475043,"result":{"route_state":"tracking","location":{"lat":35.611751556396487,"lon":139.6339874267578,"time":1585551026.974,"speed":5.736861705780029,"bearing":232.4478302001953,"altitude":59.32098388671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":499.764404296875,"remaining_leg_duration":123.355,"step_index":0,"remaining_step_distance":154.0708465576172,"remaining_step_duration":38.0,"state_message":"","in_tunnel":false,"predicted":2.343,"shape_index":56,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611751556396487,"lon":139.6339874267578,"time":1585551026.974,"bearing":232.4478302001953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117679,"lon":139.6340655,"time":1585551025.636,"speed":3.703794002532959,"bearing":231.00096130371095,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551025.636331,"delta_ms":0},{"type":"getStatus","timestamp":1585551028.031,"event_timestamp":1585551026.532203,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551028.031,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.395,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611751556396487,"lon":139.6339874267578,"time":1585551026.974,"bearing":232.4478302001953},{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551028.031,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117524,"lon":139.6340355,"time":1585551026.628,"speed":2.6163527965545656,"bearing":234.01698303222657,"altitude":59.00299072265625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551026.628235,"delta_ms":0},{"type":"getStatus","timestamp":1585551029.09,"event_timestamp":1585551027.590583,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551029.09,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.462,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551028.031,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117435,"lon":139.6340154,"time":1585551027.653,"speed":1.3955951929092408,"bearing":235.05885314941407,"altitude":58.82305908203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551027.653199,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117391,"lon":139.6340041,"time":1585551028.638,"speed":0.5706866979598999,"bearing":236.01959228515626,"altitude":58.61846923828125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551028.638537,"delta_ms":0},{"type":"getStatus","timestamp":1585551030.145,"event_timestamp":1585551028.648443,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551030.145,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.507,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551029.09,"bearing":238.4076690673828}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6117384,"lon":139.6340001,"time":1585551029.621,"speed":0.18124999105930329,"bearing":236.12013244628907,"altitude":58.59979248046875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551029.621494,"delta_ms":0},{"type":"getStatus","timestamp":1585551031.211,"event_timestamp":1585551029.712325,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551031.211,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.59,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551030.145,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117393,"lon":139.6340004,"time":1585551030.622,"speed":0.1803002953529358,"bearing":236.08181762695313,"altitude":59.321533203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551030.622705,"delta_ms":0},{"type":"getStatus","timestamp":1585551032.275,"event_timestamp":1585551030.777656,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551032.275,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.653,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551031.211,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117405,"lon":139.6340014,"time":1585551031.624,"speed":0.03641832247376442,"bearing":326.2484130859375,"altitude":59.400390625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551031.62473,"delta_ms":0},{"type":"getStatus","timestamp":1585551033.366,"event_timestamp":1585551031.867145,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551033.366,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.742,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551032.275,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117417,"lon":139.6340007,"time":1585551032.622,"speed":0.10127469897270203,"bearing":334.885498046875,"altitude":59.417724609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551032.62232,"delta_ms":0},{"type":"getStatus","timestamp":1585551034.434,"event_timestamp":1585551032.935995,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551034.434,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.812,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551033.366,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117423,"lon":139.6340012,"time":1585551033.626,"speed":0.07432006299495697,"bearing":6.751917839050293,"altitude":59.63702392578125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551033.627267,"delta_ms":0},{"type":"getStatus","timestamp":1585551035.526,"event_timestamp":1585551034.028193,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551035.526,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.9,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551034.434,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117427,"lon":139.6340011,"time":1585551034.613,"speed":0.06211784482002258,"bearing":355.33740234375,"altitude":59.516845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551034.613941,"delta_ms":0},{"type":"getStatus","timestamp":1585551036.594,"event_timestamp":1585551035.094977,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551036.594,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.981,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551035.526,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117433,"lon":139.6340016,"time":1585551035.624,"speed":0.06586910039186478,"bearing":20.65228843688965,"altitude":59.76580810546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551035.624922,"delta_ms":0},{"type":"getStatus","timestamp":1585551037.672,"event_timestamp":1585551036.173909,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551037.672,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.048,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551036.594,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117436,"lon":139.6340005,"time":1585551036.629,"speed":0.06132279708981514,"bearing":314.9836120605469,"altitude":59.73321533203125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551036.629827,"delta_ms":0},{"type":"getStatus","timestamp":1585551038.783,"event_timestamp":1585551037.284849,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551038.783,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.154,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551037.672,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117443,"lon":139.6339995,"time":1585551037.634,"speed":0.09584365785121918,"bearing":312.9303283691406,"altitude":59.88739013671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551037.635094,"delta_ms":0},{"type":"getStatus","timestamp":1585551039.897,"event_timestamp":1585551038.397941,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551039.897,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.263,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551038.783,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117448,"lon":139.6339998,"time":1585551038.624,"speed":0.1799347698688507,"bearing":235.9983367919922,"altitude":60.05438232421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551038.624315,"delta_ms":0},{"type":"getStatus","timestamp":1585551040.968,"event_timestamp":1585551039.469637,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551040.968,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.344,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551039.897,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117448,"lon":139.6339985,"time":1585551039.619,"speed":0.17989274859428407,"bearing":236.00216674804688,"altitude":60.11669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551039.61922,"delta_ms":0},{"type":"getStatus","timestamp":1585551042.051,"event_timestamp":1585551040.552257,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551042.051,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.432,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551040.968,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117454,"lon":139.6339967,"time":1585551040.656,"speed":0.15785908699035645,"bearing":266.1607666015625,"altitude":60.0826416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551040.657085,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117461,"lon":139.6339935,"time":1585551041.615,"speed":0.22999705374240876,"bearing":236.00961303710938,"altitude":60.02276611328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551041.616037,"delta_ms":0},{"type":"getStatus","timestamp":1585551043.149,"event_timestamp":1585551041.649787,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551043.149,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.534,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551042.051,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117474,"lon":139.633993,"time":1585551042.625,"speed":0.003413235303014517,"bearing":9.235260963439942,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551042.626136,"delta_ms":0},{"type":"getStatus","timestamp":1585551044.216,"event_timestamp":1585551042.716588,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551044.216,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.591,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551043.149,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117471,"lon":139.6339929,"time":1585551043.62,"speed":0.01767473854124546,"bearing":203.75164794921876,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551043.620714,"delta_ms":0},{"type":"getStatus","timestamp":1585551045.278,"event_timestamp":1585551043.778663,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551045.278,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.658,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551044.216,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117473,"lon":139.633992,"time":1585551044.631,"speed":0.05005538463592529,"bearing":278.6167907714844,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551044.632379,"delta_ms":0},{"type":"getStatus","timestamp":1585551046.339,"event_timestamp":1585551044.839887,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551046.339,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.708,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551045.278,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117472,"lon":139.6339913,"time":1585551045.617,"speed":0.06003664433956146,"bearing":268.42706298828127,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551045.618003,"delta_ms":0},{"type":"getStatus","timestamp":1585551047.395,"event_timestamp":1585551045.895376,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551047.395,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.778,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551046.339,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.611747,"lon":139.6339907,"time":1585551046.619,"speed":0.05682988837361336,"bearing":256.90240478515627,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551046.619302,"delta_ms":0},{"type":"getStatus","timestamp":1585551048.464,"event_timestamp":1585551046.965377,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551048.464,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.845,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551047.395,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117471,"lon":139.6339911,"time":1585551047.617,"speed":0.0042189802043139938,"bearing":181.69419860839845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551047.617509,"delta_ms":0},{"type":"getStatus","timestamp":1585551049.536,"event_timestamp":1585551048.037107,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551049.536,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.919,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551048.464,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.611746,"lon":139.6339916,"time":1585551048.608,"speed":0.1892106533050537,"bearing":236.8682403564453,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551048.608786,"delta_ms":0},{"type":"getStatus","timestamp":1585551050.604,"event_timestamp":1585551049.105279,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551050.604,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.996,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551049.536,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117451,"lon":139.6339916,"time":1585551049.641,"speed":0.18998588621616364,"bearing":236.99734497070313,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551049.643236,"delta_ms":1},{"type":"getStatus","timestamp":1585551051.672,"event_timestamp":1585551050.173658,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551051.672,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.031,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551050.604,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117449,"lon":139.6339923,"time":1585551050.627,"speed":0.1899995505809784,"bearing":236.9999237060547,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551050.628037,"delta_ms":0},{"type":"getStatus","timestamp":1585551052.726,"event_timestamp":1585551051.226888,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551052.726,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.099,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551051.672,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.611745,"lon":139.6339924,"time":1585551051.634,"speed":0.18994177877902986,"bearing":236.9945831298828,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551051.634393,"delta_ms":0},{"type":"getStatus","timestamp":1585551053.806,"event_timestamp":1585551052.307117,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551053.806,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.172,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551052.726,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117458,"lon":139.633993,"time":1585551052.661,"speed":0.041722532361745837,"bearing":268.8213806152344,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551052.661722,"delta_ms":0},{"type":"getStatus","timestamp":1585551054.891,"event_timestamp":1585551053.391957,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551054.891,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.23,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551053.806,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117469,"lon":139.6339927,"time":1585551053.615,"speed":0.08295784145593643,"bearing":337.75732421875,"altitude":51.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551053.616106,"delta_ms":0},{"type":"getStatus","timestamp":1585551055.974,"event_timestamp":1585551054.475407,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551055.974,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.359,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551054.891,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117465,"lon":139.6339904,"time":1585551054.627,"speed":0.15999701619148255,"bearing":237.00209045410157,"altitude":51.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551054.62798,"delta_ms":0},{"type":"getStatus","timestamp":1585551057.048,"event_timestamp":1585551055.549714,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551057.048,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":2.421,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551055.974,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117461,"lon":139.6339884,"time":1585551055.652,"speed":0.24998128414154054,"bearing":236.99864196777345,"altitude":51.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585551055.65315,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117448,"lon":139.6339849,"time":1585551056.623,"speed":0.6797200441360474,"bearing":236.99264526367188,"altitude":51.19999694824219,"accuracyHorizontal":3.763000011444092,"provider":"fused"},"result":true,"event_timestamp":1585551056.623734,"delta_ms":0},{"type":"getStatus","timestamp":1585551058.143,"event_timestamp":1585551056.644321,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551058.143,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.52,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551057.048,"bearing":238.4076690673828}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117407,"lon":139.6339762,"time":1585551057.625,"speed":1.7479931116104127,"bearing":237.97901916503907,"altitude":51.19999694824219,"accuracyHorizontal":3.7860000133514406,"provider":"fused"},"result":true,"event_timestamp":1585551057.625644,"delta_ms":0},{"type":"getStatus","timestamp":1585551059.196,"event_timestamp":1585551057.697257,"result":{"route_state":"tracking","location":{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551059.196,"speed":4.445213317871094,"bearing":238.4076690673828,"altitude":59.24200439453125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":495.1092834472656,"remaining_leg_duration":122.355,"step_index":0,"remaining_step_distance":149.41574096679688,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.571,"shape_index":57,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611732482910159,"lon":139.63394165039063,"time":1585551058.143,"bearing":238.4076690673828}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117308,"lon":139.6339549,"time":1585551058.627,"speed":3.1021015644073488,"bearing":238.9510040283203,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551058.627922,"delta_ms":0},{"type":"getStatus","timestamp":1585551060.261,"event_timestamp":1585551058.762593,"result":{"route_state":"tracking","location":{"lat":35.61171340942383,"lon":139.6339111328125,"time":1585551060.261,"speed":2.3861823081970217,"bearing":241.7134552001953,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":491.65850830078127,"remaining_leg_duration":121.355,"step_index":0,"remaining_step_distance":145.96493530273438,"remaining_step_duration":36.0,"state_message":"","in_tunnel":false,"predicted":1.634,"shape_index":58,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61171340942383,"lon":139.6339111328125,"time":1585551060.261,"bearing":238.4076690673828},{"lat":35.61171340942383,"lon":139.6339111328125,"time":1585551060.261,"bearing":241.7134552001953}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6117143,"lon":139.6339204,"time":1585551059.626,"speed":4.132308006286621,"bearing":239.9625244140625,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551059.626266,"delta_ms":0},{"type":"getStatus","timestamp":1585551061.332,"event_timestamp":1585551059.833567,"result":{"route_state":"tracking","location":{"lat":35.61170196533203,"lon":139.6338653564453,"time":1585551061.332,"speed":3.504476547241211,"bearing":241.7134552001953,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":487.32391357421877,"remaining_leg_duration":120.355,"step_index":0,"remaining_step_distance":141.63035583496095,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.706,"shape_index":58,"intersection_index":36,"road_name":"","key_points":[{"lat":35.61170196533203,"lon":139.6338653564453,"time":1585551061.332,"bearing":241.7134552001953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6116936,"lon":139.6338752,"time":1585551060.622,"speed":5.34867000579834,"bearing":239.99725341796876,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551060.623079,"delta_ms":0},{"type":"getStatus","timestamp":1585551062.384,"event_timestamp":1585551060.885257,"result":{"route_state":"tracking","location":{"lat":35.611663818359378,"lon":139.63380432128907,"time":1585551062.384,"speed":4.7273054122924809,"bearing":241.7134552001953,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":480.5268249511719,"remaining_leg_duration":119.355,"step_index":0,"remaining_step_distance":134.833251953125,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":1.762,"shape_index":58,"intersection_index":36,"road_name":"","key_points":[{"lat":35.611663818359378,"lon":139.63380432128907,"time":1585551062.384,"bearing":241.7134552001953}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6116669,"lon":139.6338173,"time":1585551061.618,"speed":6.764926910400391,"bearing":239.95892333984376,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551061.618357,"delta_ms":0},{"type":"getStatus","timestamp":1585551063.434,"event_timestamp":1585551061.935644,"result":{"route_state":"tracking","location":{"lat":35.61162567138672,"lon":139.6337127685547,"time":1585551063.434,"speed":6.103235244750977,"bearing":241.61021423339845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":471.22088623046877,"remaining_leg_duration":116.355,"step_index":0,"remaining_step_distance":125.52732849121094,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":1.816,"shape_index":59,"intersection_index":37,"road_name":"","key_points":[{"lat":35.61166000366211,"lon":139.6337890625,"time":1585551062.546,"bearing":241.7134552001953},{"lat":35.61162567138672,"lon":139.6337127685547,"time":1585551063.434,"bearing":241.61021423339845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.611635,"lon":139.6337474,"time":1585551062.617,"speed":7.309220790863037,"bearing":241.95779418945313,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551062.617589,"delta_ms":0},{"type":"getStatus","timestamp":1585551064.483,"event_timestamp":1585551062.984652,"result":{"route_state":"tracking","location":{"lat":35.6115837097168,"lon":139.6336212158203,"time":1585551064.483,"speed":7.101839065551758,"bearing":241.61021423339845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":461.7088928222656,"remaining_leg_duration":114.355,"step_index":0,"remaining_step_distance":116.01534271240235,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":1.866,"shape_index":59,"intersection_index":37,"road_name":"","key_points":[{"lat":35.6115837097168,"lon":139.6336212158203,"time":1585551064.483,"bearing":241.61021423339845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6116039,"lon":139.6336721,"time":1585551063.617,"speed":7.440803050994873,"bearing":243.94715881347657,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551063.617814,"delta_ms":0},{"type":"getStatus","timestamp":1585551065.554,"event_timestamp":1585551064.054824,"result":{"route_state":"tracking","location":{"lat":35.61153793334961,"lon":139.63351440429688,"time":1585551065.554,"speed":7.482381820678711,"bearing":241.61021423339845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":450.7833557128906,"remaining_leg_duration":111.355,"step_index":0,"remaining_step_distance":105.08978271484375,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":1.937,"shape_index":59,"intersection_index":37,"road_name":"","key_points":[{"lat":35.61153793334961,"lon":139.63351440429688,"time":1585551065.554,"bearing":241.61021423339845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6115745,"lon":139.6335955,"time":1585551064.623,"speed":7.578550338745117,"bearing":244.9934539794922,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551064.623417,"delta_ms":0},{"type":"getStatus","timestamp":1585551066.606,"event_timestamp":1585551065.107411,"result":{"route_state":"tracking","location":{"lat":35.611507415771487,"lon":139.63345336914063,"time":1585551066.606,"speed":7.55417013168335,"bearing":241.61021423339845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":444.3053283691406,"remaining_leg_duration":110.355,"step_index":0,"remaining_step_distance":98.61175537109375,"remaining_step_duration":24.0,"state_message":"","in_tunnel":false,"predicted":1.983,"shape_index":59,"intersection_index":37,"road_name":"","key_points":[{"lat":35.611507415771487,"lon":139.63345336914063,"time":1585551066.606,"bearing":241.61021423339845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6115434,"lon":139.6335204,"time":1585551065.632,"speed":7.669762134552002,"bearing":244.9994659423828,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551065.633127,"delta_ms":0},{"type":"getStatus","timestamp":1585551067.668,"event_timestamp":1585551066.168951,"result":{"route_state":"tracking","location":{"lat":35.61146926879883,"lon":139.63336181640626,"time":1585551067.668,"speed":7.645638942718506,"bearing":241.61021423339845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":434.999755859375,"remaining_leg_duration":107.355,"step_index":0,"remaining_step_distance":89.30618286132813,"remaining_step_duration":22.0,"state_message":"","in_tunnel":false,"predicted":2.036,"shape_index":59,"intersection_index":37,"road_name":"","key_points":[{"lat":35.61146926879883,"lon":139.63336181640626,"time":1585551067.668,"bearing":241.61021423339845}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6115134,"lon":139.633445,"time":1585551066.631,"speed":7.194463729858398,"bearing":245.0118865966797,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551066.631598,"delta_ms":0},{"type":"getStatus","timestamp":1585551068.722,"event_timestamp":1585551067.224211,"result":{"route_state":"tracking","location":{"lat":35.61144256591797,"lon":139.63330078125,"time":1585551068.722,"speed":7.3857221603393559,"bearing":241.61021423339845,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":428.72723388671877,"remaining_leg_duration":106.355,"step_index":0,"remaining_step_distance":83.03368377685547,"remaining_step_duration":20.0,"state_message":"","in_tunnel":false,"predicted":2.091,"shape_index":59,"intersection_index":37,"road_name":"","key_points":[{"lat":35.61144256591797,"lon":139.63330078125,"time":1585551068.722,"bearing":241.61021423339845}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6114861,"lon":139.6333761,"time":1585551067.633,"speed":6.317470073699951,"bearing":244.0970916748047,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551067.633682,"delta_ms":0},{"type":"getStatus","timestamp":1585551069.782,"event_timestamp":1585551068.28332,"result":{"route_state":"tracking","location":{"lat":35.611419677734378,"lon":139.63323974609376,"time":1585551069.782,"speed":6.784422397613525,"bearing":242.86419677734376,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":422.65618896484377,"remaining_leg_duration":104.355,"step_index":0,"remaining_step_distance":76.96261596679688,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":2.149,"shape_index":60,"intersection_index":38,"road_name":"","key_points":[{"lat":35.6114387512207,"lon":139.63328552246095,"time":1585551068.972,"bearing":241.61021423339845},{"lat":35.611419677734378,"lon":139.63323974609376,"time":1585551069.782,"bearing":242.86419677734376}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6114609,"lon":139.6333227,"time":1585551068.63,"speed":5.533949375152588,"bearing":242.01828002929688,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551068.630459,"delta_ms":0},{"type":"getStatus","timestamp":1585551070.843,"event_timestamp":1585551069.344666,"result":{"route_state":"tracking","location":{"lat":35.61140060424805,"lon":139.63319396972657,"time":1585551070.843,"speed":5.988420486450195,"bearing":242.62002563476563,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":418.0010681152344,"remaining_leg_duration":103.355,"step_index":0,"remaining_step_distance":72.30750274658203,"remaining_step_duration":18.0,"state_message":"","in_tunnel":false,"predicted":2.213,"shape_index":61,"intersection_index":39,"road_name":"","key_points":[{"lat":35.611419677734378,"lon":139.63323974609376,"time":1585551069.782,"bearing":242.86419677734376},{"lat":35.61140060424805,"lon":139.63319396972657,"time":1585551070.843,"bearing":242.62002563476563}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6114368,"lon":139.6332712,"time":1585551069.629,"speed":5.887782096862793,"bearing":241.9927215576172,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551069.630011,"delta_ms":0},{"type":"getStatus","timestamp":1585551071.909,"event_timestamp":1585551070.410254,"result":{"route_state":"tracking","location":{"lat":35.611366271972659,"lon":139.63311767578126,"time":1585551071.909,"speed":5.843547344207764,"bearing":242.62002563476563,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":410.11029052734377,"remaining_leg_duration":101.355,"step_index":0,"remaining_step_distance":64.41671752929688,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.28,"shape_index":61,"intersection_index":39,"road_name":"","key_points":[{"lat":35.611366271972659,"lon":139.63311767578126,"time":1585551071.909,"bearing":242.62002563476563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.611412,"lon":139.6332127,"time":1585551070.629,"speed":6.087512969970703,"bearing":243.98585510253907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551070.629954,"delta_ms":0},{"type":"getStatus","timestamp":1585551072.971,"event_timestamp":1585551071.472026,"result":{"route_state":"tracking","location":{"lat":35.611351013183597,"lon":139.63307189941407,"time":1585551072.971,"speed":5.897240161895752,"bearing":242.62002563476563,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":405.6510925292969,"remaining_leg_duration":100.355,"step_index":0,"remaining_step_distance":59.95753479003906,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":2.342,"shape_index":61,"intersection_index":39,"road_name":"","voice_instruction":{"ssml_announcement":"右方向 です。その先駒沢通りです","announcement":"右方向 です。その先駒沢通りです","remaining_step_distance":61.099998474121097,"index":2},"key_points":[{"lat":35.611351013183597,"lon":139.63307189941407,"time":1585551072.971,"bearing":242.62002563476563}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6113878,"lon":139.6331515,"time":1585551071.612,"speed":5.8225417137146,"bearing":242.0152130126953,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551071.612832,"delta_ms":0},{"type":"getStatus","timestamp":1585551074.036,"event_timestamp":1585551072.537613,"result":{"route_state":"tracking","location":{"lat":35.611324310302737,"lon":139.6330108642578,"time":1585551074.036,"speed":5.87883186340332,"bearing":242.62002563476563,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":399.3800048828125,"remaining_leg_duration":99.355,"step_index":0,"remaining_step_distance":53.68644714355469,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.424,"shape_index":61,"intersection_index":39,"road_name":"","key_points":[{"lat":35.611324310302737,"lon":139.6330108642578,"time":1585551074.036,"bearing":242.62002563476563}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6113612,"lon":139.633089,"time":1585551072.621,"speed":6.653896331787109,"bearing":241.98231506347657,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551072.621736,"delta_ms":0},{"type":"getStatus","timestamp":1585551075.094,"event_timestamp":1585551073.596485,"result":{"route_state":"tracking","location":{"lat":35.61129379272461,"lon":139.6329345703125,"time":1585551075.094,"speed":6.365906715393066,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":391.6604309082031,"remaining_leg_duration":97.355,"step_index":0,"remaining_step_distance":45.966854095458987,"remaining_step_duration":11.0,"state_message":"","in_tunnel":false,"predicted":2.473,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.611297607421878,"lon":139.63294982910157,"time":1585551074.895,"bearing":242.62002563476563},{"lat":35.61129379272461,"lon":139.6329345703125,"time":1585551075.094,"bearing":244.53907775878907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6113318,"lon":139.6330189,"time":1585551073.657,"speed":7.134787082672119,"bearing":241.98573303222657,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551073.65764,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6113031,"lon":139.632946,"time":1585551074.631,"speed":6.770273685455322,"bearing":242.00051879882813,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551074.632096,"delta_ms":0},{"type":"getStatus","timestamp":1585551076.147,"event_timestamp":1585551074.648193,"result":{"route_state":"tracking","location":{"lat":35.61125564575195,"lon":139.63284301757813,"time":1585551076.147,"speed":6.882644176483154,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":382.3725280761719,"remaining_leg_duration":94.355,"step_index":0,"remaining_step_distance":36.678955078125,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.516,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.61125564575195,"lon":139.63284301757813,"time":1585551076.147,"bearing":244.53907775878907}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6112755,"lon":139.6328769,"time":1585551075.628,"speed":6.998655319213867,"bearing":242.994384765625,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551075.628418,"delta_ms":0},{"type":"getStatus","timestamp":1585551077.2,"event_timestamp":1585551075.701441,"result":{"route_state":"tracking","location":{"lat":35.611228942871097,"lon":139.6327667236328,"time":1585551077.2,"speed":7.007848262786865,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":374.8585205078125,"remaining_leg_duration":93.355,"step_index":0,"remaining_step_distance":29.16494369506836,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.572,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.611228942871097,"lon":139.6327667236328,"time":1585551077.2,"bearing":244.53907775878907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.611248,"lon":139.6328066,"time":1585551076.628,"speed":6.8014020919799809,"bearing":243.00401306152345,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551076.628498,"delta_ms":0},{"type":"getStatus","timestamp":1585551078.258,"event_timestamp":1585551076.759653,"result":{"route_state":"tracking","location":{"lat":35.611202239990237,"lon":139.63270568847657,"time":1585551078.258,"speed":6.819738388061523,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":368.5946044921875,"remaining_leg_duration":91.355,"step_index":0,"remaining_step_distance":22.90102767944336,"remaining_step_duration":6.0,"state_message":"","in_tunnel":false,"predicted":1.63,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.611202239990237,"lon":139.63270568847657,"time":1585551078.258,"bearing":244.53907775878907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6112212,"lon":139.6327397,"time":1585551077.63,"speed":6.420145511627197,"bearing":242.00050354003907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551077.630634,"delta_ms":0},{"type":"getStatus","timestamp":1585551079.313,"event_timestamp":1585551077.815302,"result":{"route_state":"tracking","location":{"lat":35.61117935180664,"lon":139.6326446533203,"time":1585551079.313,"speed":6.645442962646484,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":362.51220703125,"remaining_leg_duration":90.355,"step_index":0,"remaining_step_distance":16.818645477294923,"remaining_step_duration":4.0,"state_message":"","in_tunnel":false,"predicted":1.683,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.61117935180664,"lon":139.6326446533203,"time":1585551079.313,"bearing":244.53907775878907}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6111953,"lon":139.6326773,"time":1585551078.633,"speed":6.060161113739014,"bearing":242.00033569335938,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551078.633726,"delta_ms":0},{"type":"getStatus","timestamp":1585551080.369,"event_timestamp":1585551078.871083,"result":{"route_state":"tracking","location":{"lat":35.611148834228519,"lon":139.632568359375,"time":1585551080.369,"speed":6.377151966094971,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":354.81744384765627,"remaining_leg_duration":88.355,"step_index":0,"remaining_step_distance":9.123891830444336,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.736,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.611148834228519,"lon":139.632568359375,"time":1585551080.369,"bearing":244.53907775878907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6111711,"lon":139.6326186,"time":1585551079.623,"speed":5.641777038574219,"bearing":242.00613403320313,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551079.624041,"delta_ms":0},{"type":"getStatus","timestamp":1585551081.421,"event_timestamp":1585551079.923568,"result":{"route_state":"tracking","location":{"lat":35.61112594604492,"lon":139.63250732421876,"time":1585551081.421,"speed":5.924800395965576,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":348.7349548339844,"remaining_leg_duration":86.355,"step_index":0,"remaining_step_distance":3.041383743286133,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.798,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.61112594604492,"lon":139.63250732421876,"time":1585551081.421,"bearing":244.53907775878907}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.611149,"lon":139.632565,"time":1585551080.621,"speed":5.240051746368408,"bearing":242.03819274902345,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551080.622836,"delta_ms":1},{"type":"getStatus","timestamp":1585551082.476,"event_timestamp":1585551080.977703,"result":{"route_state":"tracking","location":{"lat":35.611114501953128,"lon":139.63247680664063,"time":1585551082.476,"speed":5.426416873931885,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":345.6936340332031,"remaining_leg_duration":85.355,"step_index":0,"remaining_step_distance":0.0000629425048828125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.855,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.611114501953128,"lon":139.63247680664063,"time":1585551082.476,"bearing":244.53907775878907}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6111311,"lon":139.6325119,"time":1585551081.63,"speed":5.351426124572754,"bearing":253.95541381835938,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551081.630867,"delta_ms":0},{"type":"getStatus","timestamp":1585551083.534,"event_timestamp":1585551082.036942,"result":{"route_state":"tracking","location":{"lat":35.611114501953128,"lon":139.63247680664063,"time":1585551083.534,"speed":5.418592929840088,"bearing":244.53907775878907,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":345.6936340332031,"remaining_leg_duration":85.355,"step_index":0,"remaining_step_distance":0.0000629425048828125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.904,"shape_index":62,"intersection_index":40,"road_name":"","key_points":[{"lat":35.611114501953128,"lon":139.63247680664063,"time":1585551082.476,"bearing":244.53907775878907}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6111274,"lon":139.6324527,"time":1585551082.606,"speed":5.589681625366211,"bearing":275.0021057128906,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551082.606663,"delta_ms":0},{"type":"getStatus","timestamp":1585551084.597,"event_timestamp":1585551083.102876,"result":{"route_state":"tracking","location":{"lat":35.61117172241211,"lon":139.63235473632813,"time":1585551084.597,"speed":5.518558979034424,"bearing":300.7322082519531,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":332.9412841796875,"remaining_leg_duration":82.772,"step_index":1,"remaining_step_distance":276.91925048828127,"remaining_step_duration":63.0,"state_message":"","in_tunnel":false,"predicted":1.991,"shape_index":63,"intersection_index":0,"road_name":"","banner_instruction":{"primary":{"text":"右折です","type":"turn","modifier":"right","components":[{"type":"text","text":"右折です"}]},"remaining_step_distance":289.6715393066406,"index":0},"key_points":[{"lat":35.611114501953128,"lon":139.63247680664063,"time":1585551083.534,"bearing":244.53907775878907},{"lat":35.61117172241211,"lon":139.63235473632813,"time":1585551084.597,"bearing":300.7322082519531}]},"delta_ms":5},{"type":"updateLocation","location":{"lat":35.6111435,"lon":139.6323911,"time":1585551083.642,"speed":6.087561130523682,"bearing":292.7974853515625,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551083.643083,"delta_ms":0},{"type":"getStatus","timestamp":1585551085.717,"event_timestamp":1585551084.218693,"result":{"route_state":"tracking","location":{"lat":35.611202239990237,"lon":139.63229370117188,"time":1585551085.717,"speed":5.805490970611572,"bearing":300.7322082519531,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":326.45794677734377,"remaining_leg_duration":81.772,"step_index":1,"remaining_step_distance":270.4359130859375,"remaining_step_duration":62.0,"state_message":"","in_tunnel":false,"predicted":2.075,"shape_index":63,"intersection_index":0,"road_name":"","key_points":[{"lat":35.611202239990237,"lon":139.63229370117188,"time":1585551085.717,"bearing":300.7322082519531}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.611174,"lon":139.6323284,"time":1585551084.606,"speed":7.083513259887695,"bearing":298.99725341796877,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551084.606903,"delta_ms":0},{"type":"getStatus","timestamp":1585551086.79,"event_timestamp":1585551085.291878,"result":{"route_state":"tracking","location":{"lat":35.611244201660159,"lon":139.6322021484375,"time":1585551086.79,"speed":6.615139961242676,"bearing":299.501953125,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":316.9410705566406,"remaining_leg_duration":78.772,"step_index":1,"remaining_step_distance":260.9190368652344,"remaining_step_duration":59.0,"state_message":"","in_tunnel":false,"predicted":2.184,"shape_index":64,"intersection_index":1,"road_name":"","voice_instruction":{"ssml_announcement":"300 メートル先、右折です","announcement":"300 メートル先、右折です","remaining_step_distance":270.0,"index":0},"key_points":[{"lat":35.61122512817383,"lon":139.6322479248047,"time":1585551086.265,"bearing":300.7322082519531},{"lat":35.611244201660159,"lon":139.6322021484375,"time":1585551086.79,"bearing":299.501953125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6112113,"lon":139.6322585,"time":1585551085.624,"speed":7.812864303588867,"bearing":299.0176696777344,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551085.624689,"delta_ms":0},{"type":"getStatus","timestamp":1585551087.845,"event_timestamp":1585551086.346796,"result":{"route_state":"tracking","location":{"lat":35.611289978027347,"lon":139.63209533691407,"time":1585551087.845,"speed":7.356971263885498,"bearing":299.501953125,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":306.0129699707031,"remaining_leg_duration":76.772,"step_index":1,"remaining_step_distance":249.99093627929688,"remaining_step_duration":57.0,"state_message":"","in_tunnel":false,"predicted":2.221,"shape_index":64,"intersection_index":1,"road_name":"","key_points":[{"lat":35.611289978027347,"lon":139.63209533691407,"time":1585551087.845,"bearing":299.501953125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6112494,"lon":139.6321837,"time":1585551086.642,"speed":7.506661891937256,"bearing":297.993896484375,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551086.642756,"delta_ms":0},{"type":"getStatus","timestamp":1585551088.898,"event_timestamp":1585551087.401089,"result":{"route_state":"tracking","location":{"lat":35.61132049560547,"lon":139.6320343017578,"time":1585551088.898,"speed":7.42997407913208,"bearing":299.501953125,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":299.5389099121094,"remaining_leg_duration":74.772,"step_index":1,"remaining_step_distance":243.5168914794922,"remaining_step_duration":55.0,"state_message":"","in_tunnel":false,"predicted":2.256,"shape_index":64,"intersection_index":1,"road_name":"","key_points":[{"lat":35.61132049560547,"lon":139.6320343017578,"time":1585551088.898,"bearing":299.501953125}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6112815,"lon":139.6321113,"time":1585551087.622,"speed":7.619101047515869,"bearing":298.0023193359375,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551087.622759,"delta_ms":0},{"type":"getStatus","timestamp":1585551089.949,"event_timestamp":1585551088.450346,"result":{"route_state":"tracking","location":{"lat":35.61137008666992,"lon":139.63192749023438,"time":1585551089.949,"speed":7.615233421325684,"bearing":299.501953125,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":288.40814208984377,"remaining_leg_duration":72.772,"step_index":1,"remaining_step_distance":232.3861083984375,"remaining_step_duration":53.0,"state_message":"","in_tunnel":false,"predicted":2.327,"shape_index":64,"intersection_index":1,"road_name":"","key_points":[{"lat":35.61137008666992,"lon":139.63192749023438,"time":1585551089.949,"bearing":299.501953125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6113167,"lon":139.6320366,"time":1585551088.635,"speed":8.269719123840332,"bearing":298.99993896484377,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551088.63574,"delta_ms":0},{"type":"getStatus","timestamp":1585551090.999,"event_timestamp":1585551089.500204,"result":{"route_state":"tracking","location":{"lat":35.61140823364258,"lon":139.63185119628907,"time":1585551090.999,"speed":8.016767501831055,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":280.3099060058594,"remaining_leg_duration":70.772,"step_index":1,"remaining_step_distance":224.2878875732422,"remaining_step_duration":51.0,"state_message":"","in_tunnel":false,"predicted":2.364,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61140060424805,"lon":139.63186645507813,"time":1585551090.789,"bearing":299.501953125},{"lat":35.61140823364258,"lon":139.63185119628907,"time":1585551090.999,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6113559,"lon":139.6319564,"time":1585551089.627,"speed":8.646932601928711,"bearing":300.0023498535156,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551089.629263,"delta_ms":1},{"type":"getStatus","timestamp":1585551092.059,"event_timestamp":1585551090.56016,"result":{"route_state":"tracking","location":{"lat":35.6114501953125,"lon":139.6317596435547,"time":1585551092.059,"speed":8.399755477905274,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":270.7967224121094,"remaining_leg_duration":68.772,"step_index":1,"remaining_step_distance":214.7747039794922,"remaining_step_duration":49.0,"state_message":"","in_tunnel":false,"predicted":2.432,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.6114501953125,"lon":139.6317596435547,"time":1585551092.059,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6113979,"lon":139.6318736,"time":1585551090.62,"speed":9.249634742736817,"bearing":300.00042724609377,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551090.620821,"delta_ms":0},{"type":"getStatus","timestamp":1585551093.111,"event_timestamp":1585551091.611568,"result":{"route_state":"tracking","location":{"lat":35.61149215698242,"lon":139.6316680908203,"time":1585551093.111,"speed":9.00426959991455,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":261.2850341796875,"remaining_leg_duration":66.772,"step_index":1,"remaining_step_distance":205.2630157470703,"remaining_step_duration":47.0,"state_message":"","in_tunnel":false,"predicted":2.491,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61149215698242,"lon":139.6316680908203,"time":1585551093.111,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6114421,"lon":139.6317835,"time":1585551091.667,"speed":9.899270057678223,"bearing":299.0016784667969,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551091.667588,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6114879,"lon":139.631687,"time":1585551092.634,"speed":10.196465492248536,"bearing":299.0067443847656,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551092.634767,"delta_ms":0},{"type":"getStatus","timestamp":1585551094.168,"event_timestamp":1585551092.668958,"result":{"route_state":"tracking","location":{"lat":35.61155319213867,"lon":139.63153076171876,"time":1585551094.168,"speed":10.10959529876709,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":247.1216278076172,"remaining_leg_duration":63.772,"step_index":1,"remaining_step_distance":191.099609375,"remaining_step_duration":44.0,"state_message":"","in_tunnel":false,"predicted":1.534,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61155319213867,"lon":139.63153076171876,"time":1585551094.168,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6115337,"lon":139.6315889,"time":1585551093.636,"speed":9.787946701049805,"bearing":298.9842834472656,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551093.636968,"delta_ms":0},{"type":"getStatus","timestamp":1585551095.225,"event_timestamp":1585551093.725819,"result":{"route_state":"tracking","location":{"lat":35.611602783203128,"lon":139.63143920898438,"time":1585551095.225,"speed":9.902654647827149,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":237.18887329101563,"remaining_leg_duration":60.772,"step_index":1,"remaining_step_distance":181.16683959960938,"remaining_step_duration":41.0,"state_message":"","in_tunnel":false,"predicted":1.589,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.611602783203128,"lon":139.63143920898438,"time":1585551095.225,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6115784,"lon":139.6314956,"time":1585551094.629,"speed":9.441266059875489,"bearing":298.99755859375,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551094.629664,"delta_ms":0},{"type":"getStatus","timestamp":1585551096.274,"event_timestamp":1585551094.775604,"result":{"route_state":"tracking","location":{"lat":35.61164474487305,"lon":139.63134765625,"time":1585551096.274,"speed":9.622016906738282,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":227.67791748046876,"remaining_leg_duration":58.772,"step_index":1,"remaining_step_distance":171.65589904785157,"remaining_step_duration":39.0,"state_message":"","in_tunnel":false,"predicted":1.645,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61164474487305,"lon":139.63134765625,"time":1585551096.274,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6116205,"lon":139.6314051,"time":1585551095.628,"speed":9.065317153930664,"bearing":298.988525390625,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551095.628312,"delta_ms":0},{"type":"getStatus","timestamp":1585551097.329,"event_timestamp":1585551095.830148,"result":{"route_state":"tracking","location":{"lat":35.611690521240237,"lon":139.63125610351563,"time":1585551097.329,"speed":9.285910606384278,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":217.95364379882813,"remaining_leg_duration":56.772,"step_index":1,"remaining_step_distance":161.93162536621095,"remaining_step_duration":37.0,"state_message":"","in_tunnel":false,"predicted":1.701,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.611690521240237,"lon":139.63125610351563,"time":1585551097.329,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6116604,"lon":139.6313196,"time":1585551096.616,"speed":8.672584533691407,"bearing":298.9717102050781,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551096.616912,"delta_ms":0},{"type":"getStatus","timestamp":1585551098.392,"event_timestamp":1585551096.896588,"result":{"route_state":"tracking","location":{"lat":35.61172866821289,"lon":139.63116455078126,"time":1585551098.392,"speed":8.93822956085205,"bearing":299.8462219238281,"altitude":51.19999694824219,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":208.65567016601563,"remaining_leg_duration":54.772,"step_index":1,"remaining_step_distance":152.63363647460938,"remaining_step_duration":35.0,"state_message":"","in_tunnel":false,"predicted":1.776,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61172866821289,"lon":139.63116455078126,"time":1585551098.392,"bearing":299.8462219238281}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6116962,"lon":139.6312352,"time":1585551097.65,"speed":8.32013988494873,"bearing":298.9998474121094,"altitude":55.99237060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551097.650249,"delta_ms":0},{"type":"getStatus","timestamp":1585551099.448,"event_timestamp":1585551097.949645,"result":{"route_state":"tracking","location":{"lat":35.61176681518555,"lon":139.63108825683595,"time":1585551099.448,"speed":8.449787139892579,"bearing":299.8462219238281,"altitude":55.99237060546875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":200.55282592773438,"remaining_leg_duration":52.772,"step_index":1,"remaining_step_distance":144.53079223632813,"remaining_step_duration":33.0,"state_message":"","in_tunnel":false,"predicted":1.798,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61176681518555,"lon":139.63108825683595,"time":1585551099.448,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117327,"lon":139.6311571,"time":1585551098.61,"speed":7.865151405334473,"bearing":301.97174072265627,"altitude":56.282958984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551098.610162,"delta_ms":0},{"type":"getStatus","timestamp":1585551100.51,"event_timestamp":1585551099.011231,"result":{"route_state":"tracking","location":{"lat":35.61180114746094,"lon":139.63101196289063,"time":1585551100.51,"speed":8.08934497833252,"bearing":299.8462219238281,"altitude":56.282958984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":192.6622772216797,"remaining_leg_duration":50.772,"step_index":1,"remaining_step_distance":136.6402587890625,"remaining_step_duration":31.0,"state_message":"","in_tunnel":false,"predicted":1.9,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61180114746094,"lon":139.63101196289063,"time":1585551100.51,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6117704,"lon":139.6310867,"time":1585551099.612,"speed":7.260351657867432,"bearing":303.9985046386719,"altitude":56.23760986328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551099.612823,"delta_ms":0},{"type":"getStatus","timestamp":1585551101.57,"event_timestamp":1585551100.071418,"result":{"route_state":"tracking","location":{"lat":35.61183166503906,"lon":139.6309356689453,"time":1585551101.57,"speed":7.602380752563477,"bearing":299.8462219238281,"altitude":56.23760986328125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":184.982421875,"remaining_leg_duration":48.772,"step_index":1,"remaining_step_distance":128.96038818359376,"remaining_step_duration":29.0,"state_message":"","in_tunnel":false,"predicted":1.958,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61183166503906,"lon":139.6309356689453,"time":1585551101.57,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.611806,"lon":139.6310229,"time":1585551100.633,"speed":6.821829319000244,"bearing":302.00152587890627,"altitude":56.17425537109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551100.634078,"delta_ms":0},{"type":"getStatus","timestamp":1585551102.627,"event_timestamp":1585551101.128428,"result":{"route_state":"tracking","location":{"lat":35.61186218261719,"lon":139.63087463378907,"time":1585551102.627,"speed":7.046207904815674,"bearing":299.8462219238281,"altitude":56.17425537109375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":178.5010223388672,"remaining_leg_duration":47.772,"step_index":1,"remaining_step_distance":122.47900390625,"remaining_step_duration":28.0,"state_message":"","in_tunnel":false,"predicted":1.994,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61186218261719,"lon":139.63087463378907,"time":1585551102.627,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6118379,"lon":139.6309592,"time":1585551101.619,"speed":7.087183952331543,"bearing":298.01800537109377,"altitude":55.99578857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551101.619917,"delta_ms":0},{"type":"getStatus","timestamp":1585551103.684,"event_timestamp":1585551102.185134,"result":{"route_state":"tracking","location":{"lat":35.61189651489258,"lon":139.6308135986328,"time":1585551103.684,"speed":7.048862457275391,"bearing":299.8462219238281,"altitude":55.99578857421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":171.80694580078126,"remaining_leg_duration":45.772,"step_index":1,"remaining_step_distance":115.78491973876953,"remaining_step_duration":26.0,"state_message":"","in_tunnel":false,"predicted":2.065,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61189651489258,"lon":139.6308135986328,"time":1585551103.684,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6118675,"lon":139.6308866,"time":1585551102.642,"speed":7.677745342254639,"bearing":295.0085144042969,"altitude":55.4886474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551102.642697,"delta_ms":0},{"type":"getStatus","timestamp":1585551104.735,"event_timestamp":1585551103.237003,"result":{"route_state":"tracking","location":{"lat":35.61193084716797,"lon":139.6307373046875,"time":1585551104.735,"speed":7.334721565246582,"bearing":299.8462219238281,"altitude":55.4886474609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":163.91653442382813,"remaining_leg_duration":44.772,"step_index":1,"remaining_step_distance":107.8945083618164,"remaining_step_duration":25.0,"state_message":"","in_tunnel":false,"predicted":2.093,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.61193084716797,"lon":139.6307373046875,"time":1585551104.735,"bearing":299.8462219238281}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.611897,"lon":139.6308085,"time":1585551103.636,"speed":7.48105525970459,"bearing":294.997314453125,"altitude":55.824951171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551103.63684,"delta_ms":0},{"type":"getStatus","timestamp":1585551105.819,"event_timestamp":1585551104.320114,"result":{"route_state":"tracking","location":{"lat":35.611968994140628,"lon":139.6306610107422,"time":1585551105.819,"speed":7.439136028289795,"bearing":299.8462219238281,"altitude":55.824951171875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":155.8134307861328,"remaining_leg_duration":42.772,"step_index":1,"remaining_step_distance":99.7914047241211,"remaining_step_duration":23.0,"state_message":"","in_tunnel":false,"predicted":2.183,"shape_index":65,"intersection_index":2,"road_name":"","key_points":[{"lat":35.611968994140628,"lon":139.6306610107422,"time":1585551105.819,"bearing":299.8462219238281}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6119263,"lon":139.6307335,"time":1585551104.624,"speed":7.150237560272217,"bearing":295.9991455078125,"altitude":55.99969482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551104.624566,"delta_ms":0},{"type":"getStatus","timestamp":1585551106.889,"event_timestamp":1585551105.390651,"result":{"route_state":"tracking","location":{"lat":35.61199951171875,"lon":139.63058471679688,"time":1585551106.889,"speed":7.301182746887207,"bearing":299.0693359375,"altitude":55.99969482421875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":148.13351440429688,"remaining_leg_duration":40.772,"step_index":1,"remaining_step_distance":92.11149597167969,"remaining_step_duration":21.0,"state_message":"","in_tunnel":false,"predicted":2.265,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.61198425292969,"lon":139.630615234375,"time":1585551106.439,"bearing":299.8462219238281},{"lat":35.61199951171875,"lon":139.63058471679688,"time":1585551106.889,"bearing":299.0693359375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6119568,"lon":139.6306633,"time":1585551105.621,"speed":7.679690837860107,"bearing":297.999755859375,"altitude":56.0538330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551105.621902,"delta_ms":0},{"type":"getStatus","timestamp":1585551107.941,"event_timestamp":1585551106.442711,"result":{"route_state":"tracking","location":{"lat":35.61204147338867,"lon":139.63050842285157,"time":1585551107.941,"speed":7.577840805053711,"bearing":299.0693359375,"altitude":56.0538330078125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":139.79969787597657,"remaining_leg_duration":38.772,"step_index":1,"remaining_step_distance":83.77767944335938,"remaining_step_duration":19.0,"state_message":"","in_tunnel":false,"predicted":2.32,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.61204147338867,"lon":139.63050842285157,"time":1585551107.941,"bearing":299.0693359375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6119926,"lon":139.6305879,"time":1585551106.619,"speed":8.177772521972657,"bearing":299.0030517578125,"altitude":56.09527587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551106.619929,"delta_ms":0},{"type":"getStatus","timestamp":1585551108.995,"event_timestamp":1585551107.496323,"result":{"route_state":"tracking","location":{"lat":35.61207962036133,"lon":139.6304168701172,"time":1585551108.995,"speed":7.959737777709961,"bearing":299.0693359375,"altitude":56.09527587890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":130.51963806152345,"remaining_leg_duration":36.772,"step_index":1,"remaining_step_distance":74.49761962890625,"remaining_step_duration":17.0,"state_message":"","in_tunnel":false,"predicted":2.376,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.61207962036133,"lon":139.6304168701172,"time":1585551108.995,"bearing":299.0693359375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6120306,"lon":139.6305077,"time":1585551107.639,"speed":8.48989486694336,"bearing":299.0000915527344,"altitude":55.951416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551107.63933,"delta_ms":0},{"type":"getStatus","timestamp":1585551110.048,"event_timestamp":1585551108.550899,"result":{"route_state":"tracking","location":{"lat":35.612117767333987,"lon":139.6303253173828,"time":1585551110.048,"speed":8.27033519744873,"bearing":299.0693359375,"altitude":55.951416015625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":121.22113037109375,"remaining_leg_duration":34.772,"step_index":1,"remaining_step_distance":65.19910430908203,"remaining_step_duration":15.0,"state_message":"","in_tunnel":false,"predicted":2.409,"shape_index":66,"intersection_index":3,"road_name":"","voice_instruction":{"ssml_announcement":"右折です その先 まもなく目的地に到着します","announcement":"右折です その先 まもなく目的地に到着します","remaining_step_distance":65.9000015258789,"index":1},"key_points":[{"lat":35.612117767333987,"lon":139.6303253173828,"time":1585551110.048,"bearing":299.0693359375}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6120686,"lon":139.6304267,"time":1585551108.627,"speed":8.202675819396973,"bearing":298.9936218261719,"altitude":56.099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551108.628028,"delta_ms":0},{"type":"getStatus","timestamp":1585551111.111,"event_timestamp":1585551109.612191,"result":{"route_state":"tracking","location":{"lat":35.61215591430664,"lon":139.63023376464845,"time":1585551111.111,"speed":8.224113464355469,"bearing":299.0693359375,"altitude":56.099609375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":111.91708374023438,"remaining_leg_duration":32.772,"step_index":1,"remaining_step_distance":55.89506149291992,"remaining_step_duration":13.0,"state_message":"","in_tunnel":false,"predicted":2.484,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.61215591430664,"lon":139.63023376464845,"time":1585551111.111,"bearing":299.0693359375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6121057,"lon":139.6303464,"time":1585551109.67,"speed":8.457801818847657,"bearing":298.0080261230469,"altitude":56.186279296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551109.671092,"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6121438,"lon":139.6302638,"time":1585551110.632,"speed":8.70926570892334,"bearing":298.9999084472656,"altitude":56.1873779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551110.632907,"delta_ms":0},{"type":"getStatus","timestamp":1585551112.165,"event_timestamp":1585551110.666607,"result":{"route_state":"tracking","location":{"lat":35.612205505371097,"lon":139.630126953125,"time":1585551112.165,"speed":8.706886291503907,"bearing":299.0693359375,"altitude":56.1873779296875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":100.78608703613281,"remaining_leg_duration":29.772,"step_index":1,"remaining_step_distance":44.76406478881836,"remaining_step_duration":10.0,"state_message":"","in_tunnel":false,"predicted":1.533,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.612205505371097,"lon":139.630126953125,"time":1585551112.165,"bearing":299.0693359375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6121833,"lon":139.6301811,"time":1585551111.633,"speed":8.360128402709961,"bearing":298.9998779296875,"altitude":56.56781005859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551111.633335,"delta_ms":0},{"type":"getStatus","timestamp":1585551113.216,"event_timestamp":1585551111.718268,"result":{"route_state":"tracking","location":{"lat":35.61223220825195,"lon":139.63006591796876,"time":1585551113.216,"speed":8.465479850769043,"bearing":299.0693359375,"altitude":56.56781005859375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":94.51382446289063,"remaining_leg_duration":28.772,"step_index":1,"remaining_step_distance":38.49180603027344,"remaining_step_duration":9.0,"state_message":"","in_tunnel":false,"predicted":1.583,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.61223220825195,"lon":139.63006591796876,"time":1585551113.216,"bearing":299.0693359375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6122206,"lon":139.6301031,"time":1585551112.623,"speed":7.800914764404297,"bearing":298.9979248046875,"altitude":56.57891845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551112.623735,"delta_ms":0},{"type":"getStatus","timestamp":1585551114.299,"event_timestamp":1585551112.801849,"result":{"route_state":"tracking","location":{"lat":35.612274169921878,"lon":139.62997436523438,"time":1585551114.299,"speed":8.159488677978516,"bearing":299.0693359375,"altitude":56.57891845703125,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":85.00242614746094,"remaining_leg_duration":26.772,"step_index":1,"remaining_step_distance":28.98040771484375,"remaining_step_duration":7.0,"state_message":"","in_tunnel":false,"predicted":1.676,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.612274169921878,"lon":139.62997436523438,"time":1585551114.299,"bearing":299.0693359375}]},"delta_ms":2},{"type":"updateLocation","location":{"lat":35.6122551,"lon":139.6300309,"time":1585551113.626,"speed":7.200128078460693,"bearing":298.9999084472656,"altitude":56.629638671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551113.626351,"delta_ms":0},{"type":"getStatus","timestamp":1585551115.367,"event_timestamp":1585551113.869244,"result":{"route_state":"tracking","location":{"lat":35.6123046875,"lon":139.62991333007813,"time":1585551115.367,"speed":7.459575653076172,"bearing":299.0693359375,"altitude":56.629638671875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":78.52320861816406,"remaining_leg_duration":24.772,"step_index":1,"remaining_step_distance":22.501190185546876,"remaining_step_duration":5.0,"state_message":"","in_tunnel":false,"predicted":1.741,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.6123046875,"lon":139.62991333007813,"time":1585551115.367,"bearing":299.0693359375}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6122868,"lon":139.6299643,"time":1585551114.629,"speed":6.661269664764404,"bearing":298.99639892578127,"altitude":56.84661865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551114.629366,"delta_ms":0},{"type":"getStatus","timestamp":1585551116.423,"event_timestamp":1585551114.92435,"result":{"route_state":"tracking","location":{"lat":35.612335205078128,"lon":139.6298370361328,"time":1585551116.423,"speed":7.008290767669678,"bearing":299.0693359375,"altitude":56.84661865234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":70.83847045898438,"remaining_leg_duration":22.772,"step_index":1,"remaining_step_distance":14.816444396972657,"remaining_step_duration":3.0,"state_message":"","in_tunnel":false,"predicted":1.794,"shape_index":66,"intersection_index":3,"road_name":"","key_points":[{"lat":35.612335205078128,"lon":139.6298370361328,"time":1585551116.423,"bearing":299.0693359375}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6123159,"lon":139.6299033,"time":1585551115.606,"speed":6.100129127502441,"bearing":298.99981689453127,"altitude":56.87396240234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551115.608983,"delta_ms":1},{"type":"getStatus","timestamp":1585551117.471,"event_timestamp":1585551115.972517,"result":{"route_state":"tracking","location":{"lat":35.612369537353519,"lon":139.62977600097657,"time":1585551117.471,"speed":6.44404935836792,"bearing":303.1632080078125,"altitude":56.87396240234375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":64.12008666992188,"remaining_leg_duration":21.772,"step_index":1,"remaining_step_distance":8.098068237304688,"remaining_step_duration":2.0,"state_message":"","in_tunnel":false,"predicted":1.865,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.612342834472659,"lon":139.62982177734376,"time":1585551116.675,"bearing":299.0693359375},{"lat":35.612369537353519,"lon":139.62977600097657,"time":1585551117.471,"bearing":303.1632080078125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6123426,"lon":139.6298473,"time":1585551116.614,"speed":5.4302754402160648,"bearing":298.999267578125,"altitude":56.984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551116.614696,"delta_ms":0},{"type":"getStatus","timestamp":1585551118.531,"event_timestamp":1585551117.032236,"result":{"route_state":"tracking","location":{"lat":35.612396240234378,"lon":139.62973022460938,"time":1585551118.531,"speed":5.718069076538086,"bearing":303.1632080078125,"altitude":56.984375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":59.0213737487793,"remaining_leg_duration":20.772,"step_index":1,"remaining_step_distance":2.9993505477905275,"remaining_step_duration":1.0,"state_message":"","in_tunnel":false,"predicted":1.917,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.612396240234378,"lon":139.62973022460938,"time":1585551118.531,"bearing":303.1632080078125}]},"delta_ms":0},{"type":"updateLocation","location":{"lat":35.6123652,"lon":139.6298002,"time":1585551117.648,"speed":3.9755890369415285,"bearing":298.9724426269531,"altitude":56.86334228515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551117.648586,"delta_ms":0},{"type":"getStatus","timestamp":1585551119.599,"event_timestamp":1585551118.101185,"result":{"route_state":"tracking","location":{"lat":35.612403869628909,"lon":139.6297149658203,"time":1585551119.599,"speed":4.481822967529297,"bearing":303.1632080078125,"altitude":56.86334228515625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":57.40374755859375,"remaining_leg_duration":19.772,"step_index":1,"remaining_step_distance":1.381723403930664,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":1.951,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.612403869628909,"lon":139.6297149658203,"time":1585551119.599,"bearing":303.1632080078125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6123813,"lon":139.6297673,"time":1585551118.634,"speed":2.9818124771118166,"bearing":298.9881591796875,"altitude":56.8197021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551118.634583,"delta_ms":0},{"type":"getStatus","timestamp":1585551120.66,"event_timestamp":1585551119.162286,"result":{"route_state":"tracking","location":{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551120.66,"speed":3.6039505004882814,"bearing":303.1632080078125,"altitude":56.8197021484375,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":56.021995544433597,"remaining_leg_duration":19.772,"step_index":1,"remaining_step_distance":-0.00002765655517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.026,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551120.66,"bearing":303.1632080078125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6123938,"lon":139.6297438,"time":1585551119.654,"speed":1.9941747188568116,"bearing":303.94439697265627,"altitude":56.506591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551119.654854,"delta_ms":0},{"type":"getStatus","timestamp":1585551121.735,"event_timestamp":1585551120.237331,"result":{"route_state":"tracking","location":{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551121.735,"speed":2.4673049449920656,"bearing":303.1632080078125,"altitude":56.506591796875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":56.021995544433597,"remaining_leg_duration":19.772,"step_index":1,"remaining_step_distance":-0.00002765655517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.081,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551120.66,"bearing":303.1632080078125}]},"delta_ms":1},{"type":"updateLocation","location":{"lat":35.6124053,"lon":139.6297307,"time":1585551120.654,"speed":1.710679054260254,"bearing":316.9513854980469,"altitude":56.51422119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551120.65468,"delta_ms":0},{"type":"getStatus","timestamp":1585551122.791,"event_timestamp":1585551121.295783,"result":{"route_state":"tracking","location":{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551122.791,"speed":1.8365755081176758,"bearing":303.1632080078125,"altitude":56.51422119140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":56.021995544433597,"remaining_leg_duration":19.772,"step_index":1,"remaining_step_distance":-0.00002765655517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.137,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551121.735,"bearing":303.1632080078125}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6124191,"lon":139.6297247,"time":1585551121.645,"speed":1.8279609680175782,"bearing":335.9543151855469,"altitude":56.36669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551121.645238,"delta_ms":0},{"type":"getStatus","timestamp":1585551123.907,"event_timestamp":1585551122.410606,"result":{"route_state":"tracking","location":{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551123.907,"speed":1.7495378255844117,"bearing":303.1632080078125,"altitude":56.36669921875,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":56.021995544433597,"remaining_leg_duration":19.772,"step_index":1,"remaining_step_distance":-0.00002765655517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.262,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551122.791,"bearing":303.1632080078125}]},"delta_ms":3},{"type":"updateLocation","location":{"lat":35.6124383,"lon":139.629726,"time":1585551122.631,"speed":2.3294339179992677,"bearing":357.9986877441406,"altitude":56.5308837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551122.631885,"delta_ms":0},{"type":"getStatus","timestamp":1585551124.982,"event_timestamp":1585551123.487287,"result":{"route_state":"tracking","location":{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551124.982,"speed":1.9795409440994263,"bearing":303.1632080078125,"altitude":56.5308837890625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":56.021995544433597,"remaining_leg_duration":19.772,"step_index":1,"remaining_step_distance":-0.00002765655517578125,"remaining_step_duration":0.0,"state_message":"","in_tunnel":false,"predicted":2.351,"shape_index":67,"intersection_index":4,"road_name":"","key_points":[{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551123.907,"bearing":303.1632080078125}]},"delta_ms":4},{"type":"updateLocation","location":{"lat":35.6124623,"lon":139.6297358,"time":1585551123.63,"speed":3.2214395999908449,"bearing":15.025921821594239,"altitude":56.28375244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"result":true,"event_timestamp":1585551123.630967,"delta_ms":0},{"type":"getStatus","timestamp":1585551126.087,"event_timestamp":1585551124.591207,"result":{"route_state":"tracking","location":{"lat":35.61250305175781,"lon":139.6297607421875,"time":1585551126.087,"speed":2.649834632873535,"bearing":18.89630126953125,"altitude":56.28375244140625,"accuracyHorizontal":3.9000000953674318,"provider":"fused"},"route_index":0,"leg_index":0,"remaining_leg_distance":44.05427551269531,"remaining_leg_duration":15.783,"step_index":2,"remaining_step_distance":44.05427551269531,"remaining_step_duration":16.0,"state_message":"","in_tunnel":false,"predicted":2.457,"shape_index":69,"intersection_index":1,"road_name":"","key_points":[{"lat":35.61240768432617,"lon":139.62969970703126,"time":1585551124.982,"bearing":303.1632080078125},{"lat":35.61250305175781,"lon":139.6297607421875,"time":1585551126.087,"bearing":27.488100051879884},{"lat":35.61250305175781,"lon":139.6297607421875,"time":1585551126.087,"bearing":18.89630126953125}]},"delta_ms":4},{"type":"end_transit","properties":1585551124.658,"event_timestamp":1585551124.659006}],"version":"9.0.4","history_version":"1.0.0","config":{"proximity_to_route_stay_initialized_threshold":200.0,"corral_buffer":50.0,"max_history":10,"max_retro_grade_time":3,"max_retro_grade_jitter":50.0,"max_prediction":5.0,"min_near_tunnel":20.0,"min_speed_meters_per_second":5.0,"min_annotation_distance":3.0,"voice_instruction_threshold":250.0,"default_arrival_distance":5.0,"use_EKF":true,"mpp_speed_averaging_max_points":10,"mpp_match_trace_speed_multiplier":5.0,"mpp_match_trace_minimum_distance":100.0,"mpp_match_trace_maximum_distance":1500.0,"mpp_match_trace_maximum_points":20,"mpp_match_minimum_search_radius":20,"mpp_match_maximum_search_radius":100,"mpp_minimum_length":50.0,"mpp_maximum_length":3000.0,"mpp_bearing_change_minimum_speed":0.5,"mpp_max_request_time_ms":100,"eh_max_request_time_ms":100,"eh_minimum_coverage_distance":100,"eh_maximum_coverage_distance":1500,"eh_enable_real_time_info":true,"max_speed_estimator_buffer_size":3,"look_head_time_ms":0,"points_in_uncertain_state":0,"points_outside_route_before_reporting_offroute":3},"router_params":{"tiles_path":"/data/user/0/com.mapbox.logistics_example/files/Offline/api-routing-tiles-zenrin-staging.tilestream.net/2020_03_02-18_32_39/tiles","threads_count":2,"endpoints_config":{"host":"https://api-routing-tiles-zenrin-staging.tilestream.net","version":"2020_03_02-18_32_39","userAgent":"MapboxNavigationNative","navigator_version":""}}} \ No newline at end of file diff --git a/examples/src/main/java/com/mapbox/navigation/examples/ExamplesAdapter.kt b/examples/src/main/java/com/mapbox/navigation/examples/ExamplesAdapter.kt deleted file mode 100644 index 0014595b1f1..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/ExamplesAdapter.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.mapbox.navigation.examples - -import android.content.Context -import android.view.LayoutInflater -import android.view.ViewGroup -import androidx.recyclerview.widget.RecyclerView -import com.mapbox.navigation.examples.core.databinding.ItemExamplesAdapterBinding - -class ExamplesAdapter( - appContext: Context, - private val itemClickLambda: (position: Int) -> Unit -) : RecyclerView.Adapter() { - - private val inflater = LayoutInflater.from(appContext) - private val itemList: MutableList = mutableListOf() - - fun addSampleItems(mutableList: List) { - itemList.addAll(mutableList) - notifyItemRangeInserted(0, mutableList.size) - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExamplesViewHolder { - val binding = ItemExamplesAdapterBinding.inflate(inflater, parent, false) - return ExamplesViewHolder(binding) - } - - override fun getItemCount() = itemList.size - - override fun onBindViewHolder(holder: ExamplesViewHolder, position: Int) { - holder.bindItem(itemList[position]) - } - - inner class ExamplesViewHolder( - private val viewBinding: ItemExamplesAdapterBinding - ) : RecyclerView.ViewHolder(viewBinding.root) { - fun bindItem(sampleItem: SampleItem) { - viewBinding.nameView.text = sampleItem.name - viewBinding.descriptionView.text = sampleItem.description - - viewBinding.root.setOnClickListener { - itemClickLambda(layoutPosition) - } - } - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.kt deleted file mode 100644 index dcb54683038..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/MainActivity.kt +++ /dev/null @@ -1,209 +0,0 @@ -package com.mapbox.navigation.examples - -import android.Manifest.permission -import android.content.Intent -import android.content.pm.PackageManager -import android.os.Build -import android.os.Bundle -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat -import androidx.recyclerview.widget.LinearLayoutManager -import com.mapbox.android.core.permissions.PermissionsListener -import com.mapbox.common.LogConfiguration -import com.mapbox.common.LoggingLevel -import com.mapbox.navigation.examples.core.AdasisActivity -import com.mapbox.navigation.examples.core.IndependentRouteGenerationActivity -import com.mapbox.navigation.examples.core.MapboxBuildingHighlightActivity -import com.mapbox.navigation.examples.core.MapboxCustomStyleActivity -import com.mapbox.navigation.examples.core.MapboxJunctionActivity -import com.mapbox.navigation.examples.core.MapboxManeuverActivity -import com.mapbox.navigation.examples.core.MapboxMultipleArrowActivity -import com.mapbox.navigation.examples.core.MapboxNavigationActivity -import com.mapbox.navigation.examples.core.MapboxRouteLineAndArrowActivity -import com.mapbox.navigation.examples.core.MapboxSignboardActivity -import com.mapbox.navigation.examples.core.MapboxTripProgressActivity -import com.mapbox.navigation.examples.core.MapboxVoiceActivity -import com.mapbox.navigation.examples.core.MultiLegRouteExampleActivity -import com.mapbox.navigation.examples.core.R -import com.mapbox.navigation.examples.core.ReplayHistoryActivity -import com.mapbox.navigation.examples.core.camera.MapboxCameraAnimationsActivity -import com.mapbox.navigation.examples.core.databinding.LayoutActivityMainBinding -import com.mapbox.navigation.examples.util.LocationPermissionsHelper -import com.mapbox.navigation.examples.util.LocationPermissionsHelper.Companion.areLocationPermissionsGranted -import com.mapbox.navigation.examples.util.RouteDrawingActivity - -class MainActivity : AppCompatActivity(), PermissionsListener { - - private val locationPermissionsHelper = LocationPermissionsHelper(this) - private lateinit var binding: LayoutActivityMainBinding - private lateinit var adapter: ExamplesAdapter - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - LogConfiguration.setLoggingLevel(LoggingLevel.DEBUG) - binding = LayoutActivityMainBinding.inflate(layoutInflater) - setContentView(binding.root) - - val sampleItemList = buildSampleList() - adapter = ExamplesAdapter(this) { - startActivity(Intent(this@MainActivity, sampleItemList[it].activity)) - } - binding.coreRecycler.apply { - layoutManager = LinearLayoutManager( - this@MainActivity, - LinearLayoutManager.VERTICAL, - false - ) - adapter = this@MainActivity.adapter - } - adapter.addSampleItems(sampleItemList) - - if (areLocationPermissionsGranted(this)) { - requestOptionalPermissions() - } else { - locationPermissionsHelper.requestLocationPermissions(this) - } - } - - private fun buildSampleList(): List { - return listOf( - SampleItem( - getString(R.string.title_navigation), - getString(R.string.description_navigation), - MapboxNavigationActivity::class.java - ), - SampleItem( - getString(R.string.title_route_line), - getString(R.string.description_route_line), - MapboxRouteLineAndArrowActivity::class.java - ), - SampleItem( - getString(R.string.title_camera), - getString(R.string.description_camera), - MapboxCameraAnimationsActivity::class.java - ), - SampleItem( - getString(R.string.title_signboard), - getString(R.string.description_signboard), - MapboxSignboardActivity::class.java - ), - SampleItem( - getString(R.string.title_junction), - getString(R.string.description_junction), - MapboxJunctionActivity::class.java - ), - SampleItem( - getString(R.string.title_trip_progress), - getString(R.string.description_trip_progress), - MapboxTripProgressActivity::class.java - ), - SampleItem( - getString(R.string.title_maneuver), - getString(R.string.description_maneuver), - MapboxManeuverActivity::class.java - ), - SampleItem( - getString(R.string.title_voice), - getString(R.string.description_voice), - MapboxVoiceActivity::class.java - ), - SampleItem( - getString(R.string.title_custom_style), - getString(R.string.description_custom_style), - MapboxCustomStyleActivity::class.java - ), - SampleItem( - getString(R.string.title_replay), - getString(R.string.description_replay), - ReplayHistoryActivity::class.java - ), - SampleItem( - getString(R.string.title_multiple_arrows), - getString(R.string.description_multiple_arrows), - MapboxMultipleArrowActivity::class.java - ), - SampleItem( - getString(R.string.title_independent_route), - getString(R.string.description_independent_route), - IndependentRouteGenerationActivity::class.java - ), - SampleItem( - getString(R.string.title_building_highlight), - getString(R.string.description_building_highlight), - MapboxBuildingHighlightActivity::class.java - ), - SampleItem( - getString(R.string.title_multileg_route), - getString(R.string.description_multileg_route), - MultiLegRouteExampleActivity::class.java - ), - SampleItem( - getString(R.string.title_draw_utility), - getString(R.string.description_draw_utility), - RouteDrawingActivity::class.java - ), - SampleItem( - getString(R.string.title_adasis), - getString(R.string.description_adasis), - AdasisActivity::class.java - ) - ) - } - - override fun onRequestPermissionsResult( - requestCode: Int, - permissions: Array, - grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - locationPermissionsHelper.onRequestPermissionsResult(requestCode, permissions, grantResults) - } - - override fun onExplanationNeeded(permissionsToExplain: List?) { - Toast.makeText( - this, - "This app needs location permission in order to show its functionality.", - Toast.LENGTH_LONG - ).show() - } - - override fun onPermissionResult(granted: Boolean) { - if (granted) { - requestOptionalPermissions() - } else { - Toast.makeText( - this, - "You didn't grant location permissions.", - Toast.LENGTH_LONG - ).show() - } - } - - private fun requestOptionalPermissions() { - // starting from Android R leak canary writes to Download storage without the permission - val permissionsToRequest = mutableListOf() - if ( - Build.VERSION.SDK_INT < Build.VERSION_CODES.R && - ContextCompat.checkSelfPermission(this, permission.WRITE_EXTERNAL_STORAGE) != - PackageManager.PERMISSION_GRANTED - ) { - permissionsToRequest.add(permission.WRITE_EXTERNAL_STORAGE) - } - if ( - Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && - ContextCompat.checkSelfPermission(this, permission.POST_NOTIFICATIONS) != - PackageManager.PERMISSION_GRANTED - ) { - permissionsToRequest.add(permission.POST_NOTIFICATIONS) - } - if (permissionsToRequest.isNotEmpty()) { - ActivityCompat.requestPermissions( - this, - permissionsToRequest.toTypedArray(), - 10 - ) - } - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/SampleItem.java b/examples/src/main/java/com/mapbox/navigation/examples/SampleItem.java deleted file mode 100644 index a307b8353bf..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/SampleItem.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mapbox.navigation.examples; - -public class SampleItem { - private String name; - private String description; - private Class activity; - - public SampleItem(String name, String description, Class activity) { - this.name = name; - this.description = description; - this.activity = activity; - } - - public String getName() { - return name; - } - - public String getDescription() { - return description; - } - - public Class getActivity() { - return activity; - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/AdasisActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/AdasisActivity.kt deleted file mode 100644 index 502574d3eec..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/AdasisActivity.kt +++ /dev/null @@ -1,325 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.location.Location -import android.os.Bundle -import android.util.Log -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style -import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigation.base.route.NavigationRouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.adas.AdasisConfig -import com.mapbox.navigation.core.adas.AdasisDataSendingConfig -import com.mapbox.navigation.core.adas.AdasisMessageBinaryFormat -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityAdasisBinding -import com.mapbox.navigation.examples.core.waypoints.WaypointsController -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setNavigationRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -class AdasisActivity : AppCompatActivity() { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapCamera: CameraAnimationsPlugin - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityAdasisBinding - private lateinit var locationComponent: LocationComponentPlugin - private var isNavigating = false - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - private val waypointsController = WaypointsController() - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - if (isNavigating) { - updateCamera(locationMatcherResult.enhancedLocation) - } - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.navigationRoutes.isNotEmpty()) { - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setNavigationRoutes(result.navigationRoutes).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - isNavigating = result.navigationRoutes.isNotEmpty() - startSimulation(result.navigationRoutes[0].directionsRoute) - } - } - - private var adasisMessagesLog: String = "Received adasis messages:\n" - private var numberOfMessages = 1 - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this@AdasisActivity) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.registerLocationObserver(object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - updateCamera(rawLocation) - navigationLocationProvider.changePosition( - rawLocation, - ) - mapboxNavigation.unregisterLocationObserver(this) - } - - override fun onNewLocationMatcherResult( - locationMatcherResult: LocationMatcherResult, - ) { - // - } - }) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(Style.MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener { point -> - val currentLocation = navigationLocationProvider.lastLocation - if (currentLocation != null) { - waypointsController.add(point) - val origin = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - findRoute(origin) - } - false - } - } - } - - @SuppressLint("DiscouragedApi") - private fun getMapboxAccessTokenFromResources(): String { - return getString( - resources.getIdentifier("mapbox_access_token", "string", packageName) - ) - } - - private fun getMapCamera(): CameraAnimationsPlugin { - return binding.mapView.camera - } - - @SuppressLint("MissingPermission") - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - mapCamera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun findRoute(origin: Point) { - val coordinates = waypointsController.coordinates(origin) - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(coordinates) - .layersList( - ArrayList(coordinates.size).apply { - add(mapboxNavigation.getZLevel()) - repeat(coordinates.size - 1) { add(null) } - }, - ) - .build() - - mapboxNavigation.requestRoutes( - routeOptions, - object : NavigationRouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin, - ) { - mapboxNavigation.setNavigationRoutes(routes) - } - - override fun onFailure(reasons: List, routeOptions: RouteOptions) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - binding = LayoutActivityAdasisBinding.inflate(layoutInflater) - setContentView(binding.root) - - mapboxMap = binding.mapView.getMapboxMap() - binding.adasisMsgLog.text = adasisMessagesLog - - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - mapCamera = getMapCamera() - - init() - } - - @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - - val dataSendingConfig = AdasisDataSendingConfig.Builder( - AdasisMessageBinaryFormat.FlatBuffers, - ).build() - - mapboxNavigation.setAdasisMessageObserver( - AdasisConfig.Builder(dataSendingConfig).build() - ) { messageBuffer -> - this@AdasisActivity.runOnUiThread { - // TODO decode buffer and print data - adasisMessagesLog += "${numberOfMessages++}: ${messageBuffer.size} bytes\n" - binding.adasisMsgLog.text = adasisMessagesLog - binding.scrollContainer.fullScroll(View.FOCUS_DOWN) - - Log.d(TAG, "Adasis message: $messageBuffer") - } - } - } - } - - @OptIn(ExperimentalPreviewMapboxNavigationAPI::class) - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.resetAdasisMessageObserver() - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - private companion object { - val TAG = AdasisActivity::class.simpleName - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/IndependentRouteGenerationActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/IndependentRouteGenerationActivity.kt deleted file mode 100644 index 0dc1ecef664..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/IndependentRouteGenerationActivity.kt +++ /dev/null @@ -1,301 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.location.Location -import android.os.Bundle -import android.view.View -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Feature -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.annotation.annotations -import com.mapbox.maps.plugin.annotation.generated.CircleAnnotationManager -import com.mapbox.maps.plugin.annotation.generated.CircleAnnotationOptions -import com.mapbox.maps.plugin.annotation.generated.PolylineAnnotationManager -import com.mapbox.maps.plugin.annotation.generated.PolylineAnnotationOptions -import com.mapbox.maps.plugin.annotation.generated.createCircleAnnotationManager -import com.mapbox.maps.plugin.annotation.generated.createPolylineAnnotationManager -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.formatter.DistanceFormatterOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.base.utils.DecodeUtils.completeGeometryToLineString -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityIndependentRouteGenerationBinding -import com.mapbox.navigation.examples.util.RouteLineUtil -import com.mapbox.navigation.examples.util.Utils -import com.mapbox.navigation.ui.maps.NavigationStyles -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.tripprogress.api.MapboxTripProgressApi -import com.mapbox.navigation.ui.tripprogress.model.DistanceRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.EstimatedTimeToArrivalFormatter -import com.mapbox.navigation.ui.tripprogress.model.TimeRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.TripProgressUpdateFormatter - -class IndependentRouteGenerationActivity : AppCompatActivity() { - - private lateinit var binding: LayoutActivityIndependentRouteGenerationBinding - private val routeLine = RouteLineUtil(this) - private lateinit var mapboxMap: MapboxMap - private val navigationLocationProvider = NavigationLocationProvider() - private lateinit var locationComponent: LocationComponentPlugin - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var circleManager: CircleAnnotationManager - private lateinit var lineManager: PolylineAnnotationManager - private val mapboxReplayer = MapboxReplayer() - - private val tripProgressApi: MapboxTripProgressApi by lazy { - MapboxTripProgressApi(tripProgressFormatter) - } - - private val tripProgressFormatter: TripProgressUpdateFormatter by lazy { - val distanceFormatterOptions = - DistanceFormatterOptions.Builder(this).build() - TripProgressUpdateFormatter.Builder(this) - .distanceRemainingFormatter(DistanceRemainingFormatter(distanceFormatterOptions)) - .timeRemainingFormatter(TimeRemainingFormatter(this)) - .estimatedTimeToArrivalFormatter(EstimatedTimeToArrivalFormatter(this)) - .build() - } - - private var routeRequestId: Long? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = LayoutActivityIndependentRouteGenerationBinding.inflate(layoutInflater) - setContentView(binding.root) - - mapboxMap = binding.mapView.getMapboxMap() - circleManager = binding.mapView.annotations - .createCircleAnnotationManager(binding.mapView, null) - lineManager = binding.mapView.annotations - .createPolylineAnnotationManager(binding.mapView, null) - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - initStyle() - initNavigation() - routeLine.initialize(binding.mapView, mapboxNavigation) - } - - private fun initStyle() { - mapboxMap.loadStyleUri( - NavigationStyles.NAVIGATION_DAY_STYLE - ) { - binding.mapView.gestures.addOnMapLongClickListener( - mapLongClickListener - ) - } - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(Utils.getMapboxAccessToken(this)) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val locationObserver = object : LocationObserver { - private var initialUpdateDone = false - - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - val enhancedLocation = locationMatcherResult.enhancedLocation - if (!initialUpdateDone) { - updateCamera( - Point.fromLngLat(enhancedLocation.longitude, enhancedLocation.latitude) - ) - initialUpdateDone = true - } - - navigationLocationProvider.changePosition( - enhancedLocation, - locationMatcherResult.keyPoints, - ) - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - startSimulation(result.routes[0]) - binding.tripProgressView.visibility = View.VISIBLE - } else { - mapboxReplayer.stop() - binding.tripProgressView.visibility = View.GONE - } - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - tripProgressApi.getTripProgress(routeProgress).let { update -> - binding.tripProgressView.render(update) - } - } - - private val mapLongClickListener = OnMapLongClickListener { point -> - Utils.vibrate(this@IndependentRouteGenerationActivity) - - val currentLocation = navigationLocationProvider.lastLocation - if (currentLocation != null) { - val originPoint = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - findRoute(originPoint, point) - } - true - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun updateCamera(point: Point) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - binding.mapView.camera.flyTo( - CameraOptions.Builder() - .center(point) - .bearing(0.0) - .pitch(0.0) - .zoom(14.0) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun findRoute(origin: Point, destination: Point) { - val currentRouteRequestId = routeRequestId - if (currentRouteRequestId != null) { - mapboxNavigation.cancelRouteRequest(currentRouteRequestId) - } else { - clearRouteSelectionUi() - } - - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .alternatives(false) - .build() - routeRequestId = mapboxNavigation.requestRoutes( - routeOptions, - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - lineManager.create( - PolylineAnnotationOptions.fromFeature( - Feature.fromGeometry( - routes[0].completeGeometryToLineString(), - ) - )!! - ) - - binding.routeSelection.visibility = View.VISIBLE - binding.acceptRoute.setOnClickListener { - mapboxNavigation.setRoutes(routes) - clearRouteSelectionUi() - } - binding.rejectRoute.setOnClickListener { - updateCamera(origin) - clearRouteSelectionUi() - } - - routeRequestId = null - updateCamera(destination) - } - - override fun onFailure(reasons: List, routeOptions: RouteOptions) { - Toast.makeText( - this@IndependentRouteGenerationActivity, - "Route request failed.", - Toast.LENGTH_LONG - ).show() - routeRequestId = null - clearRouteSelectionUi() - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - Toast.makeText( - this@IndependentRouteGenerationActivity, - """Route request "$routeRequestId" canceled.""", - Toast.LENGTH_LONG - ).show() - routeRequestId = null - clearRouteSelectionUi() - } - } - ) - - circleManager.create( - CircleAnnotationOptions.fromFeature(Feature.fromGeometry(destination))!! - ) - } - - private fun clearRouteSelectionUi() { - binding.routeSelection.visibility = View.GONE - circleManager.deleteAll() - lineManager.deleteAll() - } - - override fun onStart() { - super.onStart() - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - } - - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - } - - override fun onDestroy() { - super.onDestroy() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxBuildingHighlightActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxBuildingHighlightActivity.kt deleted file mode 100644 index 487793379d6..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxBuildingHighlightActivity.kt +++ /dev/null @@ -1,360 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.location.Location -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.bindgen.Expected -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.animation.CameraAnimationsPlugin -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.base.trip.model.RouteLegProgress -import com.mapbox.navigation.base.trip.model.RouteProgress -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.arrival.ArrivalObserver -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityBuildingHighlightBinding -import com.mapbox.navigation.examples.core.waypoints.WaypointsController -import com.mapbox.navigation.ui.base.util.MapboxNavigationConsumer -import com.mapbox.navigation.ui.maps.building.api.MapboxBuildingsApi -import com.mapbox.navigation.ui.maps.building.model.BuildingError -import com.mapbox.navigation.ui.maps.building.model.BuildingValue -import com.mapbox.navigation.ui.maps.building.view.MapboxBuildingView -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.utils.internal.logE -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -/** - * This activity demonstrates the [MapboxBuildingsApi] and the [MapboxBuildingView]. - * - * 1. Tap on map to highlight buildings - * 2. Arrive at a destination and highlight buildings - */ -class MapboxBuildingHighlightActivity : AppCompatActivity(), OnMapLongClickListener { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapCamera: CameraAnimationsPlugin - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityBuildingHighlightBinding - private lateinit var locationComponent: LocationComponentPlugin - private var isNavigating = false - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - private val waypointsController = WaypointsController() - - /** - * This api allows you to query a building feature if it exists on a [MapboxMap] - */ - private val buildingsApi: MapboxBuildingsApi by lazy { - MapboxBuildingsApi(mapboxMap) - } - - /** - * This view can be used to render building highlight if it obtained as a result from the query - * using [MapboxBuildingsApi] - */ - private val buildingView = MapboxBuildingView() - - /** - * The callback contains a list of buildings returned as a result of querying the [MapboxMap]. - * If no buildings are available, the list is empty - */ - private val callback = - MapboxNavigationConsumer> { expected -> - expected.fold( - { - logE( - "error: ${it.errorMessage}", - "MapboxBuildingHighlightActivity" - ) - }, - { value -> - mapboxMap.getStyle { style -> - buildingView.highlightBuilding(style, value.buildings) - } - } - ) - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - if (isNavigating) { - updateCamera(locationMatcherResult.enhancedLocation) - } - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setRoutes( - listOf(RouteLine(result.routes[0], null)) - ).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - isNavigating = true - startSimulation(result.routes[0]) - } - } - - private val arrivalObserver = object : ArrivalObserver { - override fun onNextRouteLegStart(routeLegProgress: RouteLegProgress) { - mapboxMap.getStyle { style -> - buildingView.removeBuildingHighlight(style) - } - } - - override fun onWaypointArrival(routeProgress: RouteProgress) { - buildingsApi.queryBuildingOnWaypoint(routeProgress, callback) - } - - override fun onFinalDestinationArrival(routeProgress: RouteProgress) { - buildingsApi.queryBuildingOnFinalDestination(routeProgress, callback) - } - } - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this@MapboxBuildingHighlightActivity) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.registerLocationObserver(object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - updateCamera(rawLocation) - navigationLocationProvider.changePosition( - rawLocation, - ) - mapboxNavigation.unregisterLocationObserver(this) - } - - override fun onNewLocationMatcherResult( - locationMatcherResult: LocationMatcherResult, - ) { - // - } - }) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } - - private fun getMapCamera(): CameraAnimationsPlugin { - return binding.mapView.camera - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - mapCamera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun findRoute(origin: Point) { - val coordinates = waypointsController.coordinates(origin) - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(coordinates) - .layersList( - ArrayList(coordinates.size).apply { - add(mapboxNavigation.getZLevel()) - repeat(coordinates.size - 1) { add(null) } - }, - ) - .build() - mapboxNavigation.requestRoutes( - routeOptions, - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - binding = LayoutActivityBuildingHighlightBinding.inflate(layoutInflater) - - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - mapCamera = getMapCamera() - - init() - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerArrivalObserver(arrivalObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - } - } - - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterArrivalObserver(arrivalObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - buildingsApi.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - override fun onMapLongClick(point: Point): Boolean { - val currentLocation = navigationLocationProvider.lastLocation - if (currentLocation != null) { - waypointsController.add(point) - val origin = Point.fromLngLat(currentLocation.longitude, currentLocation.latitude) - findRoute(origin) - } - return false - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxCustomStyleActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxCustomStyleActivity.kt deleted file mode 100644 index 8b2554964d5..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxCustomStyleActivity.kt +++ /dev/null @@ -1,336 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.location.Location -import android.os.Bundle -import android.view.View.GONE -import android.view.View.VISIBLE -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.DirectionsCriteria -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.formatter.DistanceFormatterOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityStyleBinding -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.ui.speedlimit.api.MapboxSpeedLimitApi -import com.mapbox.navigation.ui.speedlimit.model.SpeedLimitFormatter -import com.mapbox.navigation.ui.tripprogress.api.MapboxTripProgressApi -import com.mapbox.navigation.ui.tripprogress.model.DistanceRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.EstimatedTimeToArrivalFormatter -import com.mapbox.navigation.ui.tripprogress.model.TimeRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.TripProgressUpdateFormatter -import com.mapbox.navigation.ui.utils.internal.ifNonNull -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.util.Collections - -class MapboxCustomStyleActivity : AppCompatActivity(), OnMapLongClickListener { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityStyleBinding - private lateinit var locationComponent: LocationComponentPlugin - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - - private val speedLimitFormatter: SpeedLimitFormatter by lazy { - SpeedLimitFormatter(this) - } - - private val speedLimitApi: MapboxSpeedLimitApi by lazy { - MapboxSpeedLimitApi(speedLimitFormatter) - } - - private val tripProgressFormatter: TripProgressUpdateFormatter by lazy { - val distanceFormatterOptions = - DistanceFormatterOptions.Builder(this).build() - TripProgressUpdateFormatter.Builder(this) - .distanceRemainingFormatter(DistanceRemainingFormatter(distanceFormatterOptions)) - .timeRemainingFormatter(TimeRemainingFormatter(this)) - .estimatedTimeToArrivalFormatter(EstimatedTimeToArrivalFormatter(this)) - .build() - } - - private val tripProgressApiApi: MapboxTripProgressApi by lazy { - MapboxTripProgressApi(tripProgressFormatter) - } - - private val distanceFormatter: DistanceFormatterOptions by lazy { - DistanceFormatterOptions.Builder(this).build() - } - - private val maneuverApi: MapboxManeuverApi by lazy { - MapboxManeuverApi(MapboxDistanceFormatter(distanceFormatter)) - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - updateCamera(locationMatcherResult.enhancedLocation) - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - binding.tripProgressView.visibility = VISIBLE - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setRoutes( - listOf(RouteLine(result.routes[0], null)) - ).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - startSimulation(result.routes[0]) - } else { - binding.tripProgressView.visibility = GONE - } - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - tripProgressApiApi.getTripProgress(routeProgress).let { update -> - binding.tripProgressView.render(update) - } - - val maneuvers = maneuverApi.getManeuvers(routeProgress) - - if (binding.maneuverView.visibility != VISIBLE) { - binding.maneuverView.visibility = VISIBLE - } - maneuvers.onError { error -> - Toast.makeText( - this@MapboxCustomStyleActivity, - error.errorMessage, - Toast.LENGTH_SHORT - ).show() - } - binding.maneuverView.renderManeuvers(maneuvers) - } - - private val locationMatcherObserver = object : LocationObserver { - - override fun onNewRawLocation(rawLocation: Location) {} - - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - val value = speedLimitApi.updateSpeedLimit(locationMatcherResult.speedLimit) - binding.speedLimitView.render(value) - } - } - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun findRoute(origin: Point, destination: Point) { - mapboxNavigation.requestRoutes( - RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .alternatives(false) - .annotationsList(Collections.singletonList(DirectionsCriteria.ANNOTATION_MAXSPEED)) - .build(), - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - binding.mapView.camera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = LayoutActivityStyleBinding.inflate(layoutInflater) - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - init() - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerLocationObserver(locationMatcherObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - } - } - - override fun onStop() { - super.onStop() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterLocationObserver(locationMatcherObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - } - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - maneuverApi.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - override fun onMapLongClick(point: Point): Boolean { - ifNonNull(navigationLocationProvider.lastLocation) { currentLocation -> - val originPoint = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - findRoute(originPoint, point) - } - return false - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxJunctionActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxJunctionActivity.kt deleted file mode 100644 index 0c1e8a83317..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxJunctionActivity.kt +++ /dev/null @@ -1,353 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.content.Context -import android.location.Location -import android.os.Bundle -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.bindgen.Expected -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityJunctionBinding -import com.mapbox.navigation.examples.util.Utils.getMapboxAccessToken -import com.mapbox.navigation.ui.base.util.MapboxNavigationConsumer -import com.mapbox.navigation.ui.maps.guidance.junction.api.MapboxJunctionApi -import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionError -import com.mapbox.navigation.ui.maps.guidance.junction.model.JunctionValue -import com.mapbox.navigation.ui.maps.guidance.junction.view.MapboxJunctionView -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.ui.utils.internal.ifNonNull -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -/** - * This activity demonstrates the usage of the [MapboxJunctionApi]. There is boiler plate - * code for establishing basic navigation and a route simulator is used. The example assumes - * that LOCATION permission has already been granted. - * - * The code specifically related to the junction component is commented in order to call - * attention to its usage. The example uses a predefined location pair to demonstrate junction. - * Long press anywhere on the map to use predefined coordinates and trigger navigation. - * - * Note: A special access token is required to get access to junctions in directions response. - */ -class MapboxJunctionActivity : AppCompatActivity(), OnMapLongClickListener { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityJunctionBinding - private lateinit var locationComponent: LocationComponentPlugin - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - - /** - * The [MapboxJunctionApi] consumes banner instructions data and produces junctions related - * data that is consumed by the [MapboxJunctionView] in the view layout. - */ - private val junctionApi: MapboxJunctionApi by lazy { - MapboxJunctionApi(getMapboxRouteAccessToken(this)) - } - - /** - * The result of invoking [MapboxJunctionApi.generateJunction] is returned as a callback - * containing either a success in the form of [JunctionValue] or failure in the form of - * [JunctionError]. - */ - private val junctionCallback = - MapboxNavigationConsumer> { value -> - // The data obtained must be rendered by [MapboxJunctionView] - binding.junctionView.render(value) - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - updateCamera(locationMatcherResult.enhancedLocation) - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setRoutes(listOf(RouteLine(result.routes[0], null))).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - startSimulation(result.routes[0]) - } - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private val bannerInstructionsObserver = BannerInstructionsObserver { bannerInstructions -> - // The junction component is driven by banner instructions updates. - // Passing the instructions to the MapboxJunctionApi generates the data - // for updating the view. - junctionApi.generateJunction(bannerInstructions, junctionCallback) - } - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(getMapboxRouteAccessToken(this)) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun findRoute(origin: Point, destination: Point) { - mapboxNavigation.requestRoutes( - RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .alternatives(true) - .build(), - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - binding.mapView.camera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun getMapboxAccessTokenFromResources(): String { - return getMapboxAccessToken(this) - } - - /** - * Uses a specific access token required for the route request to send junctions in the response. - * If the specific access token is not present, it defaults to access token required to render - * Maps. - * - * @param context The [Context] of the [android.app.Activity] or [android.app.Fragment]. - * @return The Mapbox access token or null if not found. - */ - private fun getMapboxRouteAccessToken(context: Context): String { - val tokenResId = context.resources - .getIdentifier("mapbox_access_token_junction", "string", context.packageName) - return if (tokenResId != 0) { - context.getString(tokenResId) - } else { - Toast.makeText(this, "Missing mapbox_access_token_junction", Toast.LENGTH_LONG).show() - getMapboxAccessTokenFromResources() - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - // Look at LayoutActivityJunctionBinding to see the view component in the - // activity's layout. - binding = LayoutActivityJunctionBinding.inflate(layoutInflater) - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - init() - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerBannerInstructionsObserver(bannerInstructionsObserver) - } - } - - override fun onStop() { - super.onStop() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.unregisterBannerInstructionsObserver(bannerInstructionsObserver) - } - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - junctionApi.cancelAll() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - /** - * Coordinates containing `subType = JCT` - * 139.7745686, 35.677573;139.784915, 35.680960 - * https://api.mapbox.com/guidance-views/v1/709948800/jct/CA075101?arrow_ids=CA07510E - * - * Coordinates containing `subType` = SAPA` - * 137.76136788022933, 34.83891088143494;137.75220947550804, 34.840924660770725 - * https://api.mapbox.com/guidance-views/v1/709948800/sapa/SA117201?arrow_ids=SA11720A - * - * Coordinates containing `subType` = CITYREAL` - * 139.68153626083233, 35.66812853462302;139.68850488593154, 35.66099697148769 - * https://api.mapbox.com/guidance-views/v1/709948800/cityreal/13c00282_o40d?arrow_ids=13c00282_o41a - * - * Coordinates containing `subType` = TOLLBRANCH` - * 137.02725, 35.468588;137.156787, 35.372602 - * https://api.mapbox.com/guidance-views/v1/709948800/tollbranch/CR896101?arrow_ids=CR89610A - * - * Coordinates containing `subType` = AFTERTOLL` - * 141.4223967090212, 43.07693368987961;141.42118630948409, 43.07604662044662 - * https://api.mapbox.com/guidance-views/v1/709948800/aftertoll/HW00101805?arrow_ids=HW00101805_1 - * - * Coordinates containing `subType` = EXPRESSWAY_ENTRANCE` - * 139.724088, 35.672885; 139.630359, 35.626416 - * https://api.mapbox.com/guidance-views/v1/709948800/entrance/13i00015_o10d?arrow_ids=13i00015_o11a - * - * Coordinates containing `subType` = EXPRESSWAY_EXIT` - * 135.324023, 34.715952;135.296332, 34.711387 - * https://api.mapbox.com/guidance-views/v1/709948800/exit/28o00022_o20d?arrow_ids=28o00022_o21a - */ - override fun onMapLongClick(point: Point): Boolean { - ifNonNull(navigationLocationProvider.lastLocation) { - val or = Point.fromLngLat(141.4223967090212, 43.07693368987961) - val de = Point.fromLngLat(141.42118630948409, 43.07604662044662) - findRoute(or, de) - } - return false - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxManeuverActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxManeuverActivity.kt deleted file mode 100644 index 3c596e60b0f..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxManeuverActivity.kt +++ /dev/null @@ -1,343 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.location.Location -import android.os.Bundle -import android.view.View.INVISIBLE -import android.view.View.VISIBLE -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.bindgen.Expected -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.extensions.coordinates -import com.mapbox.navigation.base.formatter.DistanceFormatterOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityManeuverBinding -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maneuver.model.Maneuver -import com.mapbox.navigation.ui.maneuver.model.ManeuverError -import com.mapbox.navigation.ui.maneuver.view.MapboxManeuverView -import com.mapbox.navigation.ui.maps.NavigationStyles.NAVIGATION_DAY_STYLE -import com.mapbox.navigation.ui.maps.NavigationStyles.NAVIGATION_DAY_STYLE_ID -import com.mapbox.navigation.ui.maps.NavigationStyles.NAVIGATION_DAY_STYLE_USER_ID -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.ui.shield.model.RouteShieldCallback -import com.mapbox.navigation.ui.utils.internal.ifNonNull -import com.mapbox.navigation.utils.internal.logE -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -/** - * This activity demonstrates the usage of the [MapboxManeuverApi]. There is boiler plate - * code for establishing basic navigation and a route simulator is used. The example assumes - * that LOCATION permission has already been granted. - * - * The code specifically related to the maneuver component is commented in order to call - * attention to its usage. Long press anywhere on the map to set a destination and trigger - * navigation. - */ -class MapboxManeuverActivity : AppCompatActivity(), OnMapLongClickListener { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityManeuverBinding - private lateinit var locationComponent: LocationComponentPlugin - private var isNavigating = false - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - - /** - * The data in the view is formatted by default mapbox distance formatting implementation. - */ - private val distanceFormatter: DistanceFormatterOptions by lazy { - DistanceFormatterOptions.Builder(this).build() - } - - /** - * The [MapboxManeuverApi] consumes route progress and banner instructions data - * and produces trip related data that is consumed by the [MapboxManeuverView] in the layout. - */ - private val maneuverApi: MapboxManeuverApi by lazy { - MapboxManeuverApi(MapboxDistanceFormatter(distanceFormatter)) - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val roadShieldCallback = RouteShieldCallback { shieldResult -> - binding.maneuverView.renderManeuverWith(shieldResult) - } - - private val locationObserver = object : LocationObserver { - - override fun onNewRawLocation(rawLocation: Location) {} - - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - if (isNavigating) { - updateCamera(locationMatcherResult.enhancedLocation) - } - } - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - val maneuvers = maneuverApi.getManeuvers(routeProgress) - renderManeuvers(maneuvers) - - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setRoutes( - listOf(RouteLine(result.routes[0], null)) - ).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - isNavigating = true - startSimulation(result.routes[0]) - - val maneuvers = maneuverApi.getManeuvers(result.routes.first()) - renderManeuvers(maneuvers) - } - } - - private fun renderManeuvers(maneuvers: Expected>) { - maneuvers.onError { error -> - logE(error.errorMessage!!, "MapboxManeuverActivity") - } - maneuvers.onValue { - if (binding.maneuverView.visibility == INVISIBLE) { - binding.maneuverView.visibility = VISIBLE - } - binding.maneuverView.renderManeuvers(maneuvers) - maneuverApi.getRoadShields( - NAVIGATION_DAY_STYLE_USER_ID, - NAVIGATION_DAY_STYLE_ID, - getString(R.string.mapbox_access_token), - it, - roadShieldCallback - ) - } - } - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - val navigationOptions = NavigationOptions.Builder(this) - .accessToken(getString(R.string.mapbox_access_token)) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - mapboxNavigation = MapboxNavigationProvider.create(navigationOptions) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - mapboxNavigation.registerLocationObserver(object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - updateCamera(rawLocation) - navigationLocationProvider.changePosition( - rawLocation, - ) - mapboxNavigation.unregisterLocationObserver(this) - } - - override fun onNewLocationMatcherResult( - locationMatcherResult: LocationMatcherResult, - ) { - // - } - }) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxReplayer.pushRealLocation(this, 0.0) - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(NAVIGATION_DAY_STYLE) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun findRoute(origin: Point, destination: Point) { - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinates( - origin = origin, - destination = destination - ) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .build() - mapboxNavigation.requestRoutes( - routeOptions, - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - binding.mapView.camera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = LayoutActivityManeuverBinding.inflate(layoutInflater) - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - init() - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - } - } - - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - maneuverApi.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - override fun onMapLongClick(point: Point): Boolean { - ifNonNull(navigationLocationProvider.lastLocation) { currentLocation -> - - val originPoint = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - - findRoute(originPoint, point) - } - return false - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxMultipleArrowActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxMultipleArrowActivity.kt deleted file mode 100644 index b63cd5bc8f0..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxMultipleArrowActivity.kt +++ /dev/null @@ -1,208 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.location.Location -import android.os.Bundle -import android.view.View -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style -import com.mapbox.navigation.examples.core.databinding.LayoutActivityMultipleManeuverArrowBinding -import com.mapbox.navigation.ui.maps.NavigationStyles -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.ManeuverArrow -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions - -/** - * This activity demonstrates using the [MapboxRouteArrowApi] to add multiple arrows to a map. - * This example will display the map at a specific location and when the 'Add Arrow' or - * 'Remove Arrow' buttons are pressed will display predefined arrows. - * - * In your application you may add multiple arrows using any collection of 2 or more points. - * - */ -class MapboxMultipleArrowActivity : AppCompatActivity() { - - private val binding: LayoutActivityMultipleManeuverArrowBinding by lazy { - LayoutActivityMultipleManeuverArrowBinding.inflate(layoutInflater) - } - - private val mapboxMap: MapboxMap by lazy { - binding.mapView.getMapboxMap() - } - - // One of the more important options is the 'aboveLayerId' option which determines the - // elevation of layer hosting the arrows. The arrow layer will be placed above the layer ID - // specified. By default the RouteLayerConstants.TOP_LEVEL_ROUTE_LINE_LAYER_ID is used - // which is the layer hosting the line representing a route's traffic. - // This default depends on the MapboxRouteLineView being initialized first. There is no - // route line being used in this example so a layer ID is being specified. - private val routeArrowOptions by lazy { - RouteArrowOptions.Builder(this).withAboveLayerId("road-label").build() - } - - // The MapboxRouteArrowApi is responsible for generating data describing the layer state - // for the Map. The data generated should be rendered with the MapboxRouteArrowView. - private val mapboxArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - // The MapboxRouteArrowView is responsible for rendering the data generated by - // MapboxRouteArrowApi. Calls to MapboxRouteArrowApi will not modify the map. Map mutations - // will not be visualized until the data is rendered by MapboxRouteArrowView. - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(routeArrowOptions) - } - - private val navigationLocationProvider by lazy { - NavigationLocationProvider() - } - - // An arrow used for this example. The arrow head is placed on the last point in the - // collection. The bearing of the arrow head is calculated based on the second to last - // point to the last point. - private val arrow0 by lazy { - ManeuverArrow( - listOf( - Point.fromLngLat(-122.432034, 37.775755), - Point.fromLngLat(-122.431229, 37.775865), - Point.fromLngLat(-122.431293, 37.776255) - ) - ) - } - - // An arrow used for this example. - private val arrow1 by lazy { - ManeuverArrow( - listOf( - Point.fromLngLat(-122.431481, 37.777082), - Point.fromLngLat(-122.431610, 37.777722), - Point.fromLngLat(-122.431969, 37.777663) - ) - ) - } - - // An arrow used for this example. - private val arrow2 by lazy { - ManeuverArrow( - listOf( - Point.fromLngLat(-122.432886, 37.777557), - Point.fromLngLat(-122.433251, 37.777515), - Point.fromLngLat(-122.433165, 37.777095) - ) - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(binding.root) - init() - Toast.makeText( - this, - "Click the add arrow button to add your first arrow.", - Toast.LENGTH_LONG - ).show() - } - - private fun init() { - initStyle() - initLocation() - } - - private fun initStyle() { - mapboxMap.loadStyleUri( - NavigationStyles.NAVIGATION_DAY_STYLE, - object : Style.OnStyleLoaded { - override fun onStyleLoaded(style: Style) { - initListeners(style) - } - } - ) - } - - // Using a hardcoded location for brevity - private fun initLocation() { - val location = Location("").also { - it.latitude = 37.77631058427689 - it.longitude = -122.43275730442387 - } - - val point = Point.fromLngLat(-122.43275730442387, 37.77631058427689) - val cameraOptions = CameraOptions.Builder().center(point).zoom(16.0).build() - mapboxMap.setCamera(cameraOptions) - navigationLocationProvider.changePosition( - location, - listOf(), - null, - null - ) - } - - private fun initListeners(style: Style) { - binding.btnAdd.setOnClickListener { - when (mapboxArrowApi.getArrows().size) { - 0 -> { - // Notice the result of the call to addArrow is rendered by the routeArrowView. - mapboxArrowApi.addArrow(arrow0).apply { - routeArrowView.render(style, this) - } - } - 1 -> { - mapboxArrowApi.addArrow(arrow1).apply { - routeArrowView.render(style, this) - } - } - 2 -> { - mapboxArrowApi.addArrow(arrow2).apply { - routeArrowView.render(style, this) - } - } - } - - handleButtonVisibility() - } - - binding.btnRemove.setOnClickListener { - when (mapboxArrowApi.getArrows().size) { - 0 -> { - } - 1 -> { - mapboxArrowApi.removeArrow(arrow0).apply { - routeArrowView.render(mapboxMap.getStyle()!!, this) - } - binding.btnRemove.visibility = View.INVISIBLE - } - 2 -> { - mapboxArrowApi.removeArrow(arrow1).apply { - routeArrowView.render(mapboxMap.getStyle()!!, this) - } - } - 3 -> { - mapboxArrowApi.removeArrow(arrow2).apply { - routeArrowView.render(mapboxMap.getStyle()!!, this) - } - } - } - - handleButtonVisibility() - } - } - - private fun handleButtonVisibility() { - if (mapboxArrowApi.getArrows().size in 0..2) { - binding.btnAdd.visibility = View.VISIBLE - } else { - binding.btnAdd.visibility = View.INVISIBLE - } - - if (mapboxArrowApi.getArrows().isNotEmpty()) { - binding.btnRemove.visibility = View.VISIBLE - } else { - binding.btnRemove.visibility = View.INVISIBLE - } - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt deleted file mode 100644 index 84ea81b9275..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxNavigationActivity.kt +++ /dev/null @@ -1,529 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.content.res.Configuration -import android.content.res.Resources -import android.location.Location -import android.os.Bundle -import android.view.View.INVISIBLE -import android.view.View.VISIBLE -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.bindgen.Expected -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.LocationPuck2D -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.TimeFormat -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.formatter.DistanceFormatterOptions -import com.mapbox.navigation.base.options.EventsAppMetadata -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigation.base.route.NavigationRouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.formatter.MapboxDistanceFormatter -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.NavigationSessionStateObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.core.trip.session.VoiceInstructionsObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityNavigationBinding -import com.mapbox.navigation.examples.util.Utils -import com.mapbox.navigation.ui.base.util.MapboxNavigationConsumer -import com.mapbox.navigation.ui.maneuver.api.MapboxManeuverApi -import com.mapbox.navigation.ui.maps.camera.NavigationCamera -import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSource -import com.mapbox.navigation.ui.maps.camera.lifecycle.NavigationBasicGesturesHandler -import com.mapbox.navigation.ui.maps.camera.state.NavigationCameraState -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.tripprogress.api.MapboxTripProgressApi -import com.mapbox.navigation.ui.tripprogress.model.DistanceRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.EstimatedTimeToArrivalFormatter -import com.mapbox.navigation.ui.tripprogress.model.PercentDistanceTraveledFormatter -import com.mapbox.navigation.ui.tripprogress.model.TimeRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.TripProgressUpdateFormatter -import com.mapbox.navigation.ui.voice.api.MapboxSpeechApi -import com.mapbox.navigation.ui.voice.api.MapboxVoiceInstructionsPlayer -import com.mapbox.navigation.ui.voice.model.SpeechAnnouncement -import com.mapbox.navigation.ui.voice.model.SpeechError -import com.mapbox.navigation.ui.voice.model.SpeechValue -import com.mapbox.navigation.ui.voice.model.SpeechVolume -import com.mapbox.navigation.utils.internal.logD -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.util.Locale - -class MapboxNavigationActivity : AppCompatActivity() { - - /* ----- Layout binding reference ----- */ - private lateinit var binding: LayoutActivityNavigationBinding - - /* ----- Mapbox Maps components ----- */ - private lateinit var mapboxMap: MapboxMap - - /* ----- Mapbox Navigation components ----- */ - private lateinit var mapboxNavigation: MapboxNavigation - - // location puck integration - private val navigationLocationProvider = NavigationLocationProvider() - - // camera - private lateinit var navigationCamera: NavigationCamera - private lateinit var viewportDataSource: MapboxNavigationViewportDataSource - private val pixelDensity = Resources.getSystem().displayMetrics.density - private val overviewPadding: EdgeInsets by lazy { - EdgeInsets( - 140.0 * pixelDensity, - 40.0 * pixelDensity, - 120.0 * pixelDensity, - 40.0 * pixelDensity - ) - } - private val landscapeOverviewPadding: EdgeInsets by lazy { - EdgeInsets( - 30.0 * pixelDensity, - 380.0 * pixelDensity, - 20.0 * pixelDensity, - 20.0 * pixelDensity - ) - } - private val followingPadding: EdgeInsets by lazy { - EdgeInsets( - 180.0 * pixelDensity, - 40.0 * pixelDensity, - 150.0 * pixelDensity, - 40.0 * pixelDensity - ) - } - private val landscapeFollowingPadding: EdgeInsets by lazy { - EdgeInsets( - 30.0 * pixelDensity, - 380.0 * pixelDensity, - 110.0 * pixelDensity, - 40.0 * pixelDensity - ) - } - - // trip progress bottom view - private lateinit var tripProgressApi: MapboxTripProgressApi - - // voice instructions - private var isVoiceInstructionsMuted = false - private lateinit var maneuverApi: MapboxManeuverApi - private lateinit var speechAPI: MapboxSpeechApi - private lateinit var voiceInstructionsPlayer: MapboxVoiceInstructionsPlayer - - // route line - private lateinit var routeLineAPI: MapboxRouteLineApi - private lateinit var routeLineView: MapboxRouteLineView - private lateinit var routeArrowView: MapboxRouteArrowView - private val routeArrowAPI: MapboxRouteArrowApi = MapboxRouteArrowApi() - - /* ----- Voice instruction callbacks ----- */ - private val voiceInstructionsObserver = - VoiceInstructionsObserver { voiceInstructions -> - speechAPI.generate( - voiceInstructions, - speechCallback - ) - } - - private val voiceInstructionsPlayerCallback = - MapboxNavigationConsumer { value -> - // remove already consumed file to free-up space - speechAPI.clean(value) - } - - private val speechCallback = - MapboxNavigationConsumer> { expected -> - expected.fold( - { error -> - // play the instruction via fallback text-to-speech engine - voiceInstructionsPlayer.play( - error.fallback, - voiceInstructionsPlayerCallback - ) - }, - { value -> - // play the sound file from the external generator - voiceInstructionsPlayer.play( - value.announcement, - voiceInstructionsPlayerCallback - ) - } - ) - } - - /* ----- Location and route progress callbacks ----- */ - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - // not handled - } - - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - // update location puck's position on the map - navigationLocationProvider.changePosition( - location = locationMatcherResult.enhancedLocation, - keyPoints = locationMatcherResult.keyPoints, - ) - - // update camera position to account for new location - viewportDataSource.onLocationChanged(locationMatcherResult.enhancedLocation) - viewportDataSource.evaluate() - } - } - - private val routeProgressObserver = - RouteProgressObserver { routeProgress -> - // update the camera position to account for the progressed fragment of the route - viewportDataSource.onRouteProgressChanged(routeProgress) - viewportDataSource.evaluate() - - // show arrow on the route line with the next maneuver - val maneuverArrowResult = routeArrowAPI.addUpcomingManeuverArrow(routeProgress) - val style = mapboxMap.getStyle() - if (style != null) { - routeArrowView.renderManeuverUpdate(style, maneuverArrowResult) - } - - // update top maneuver instructions - val maneuvers = maneuverApi.getManeuvers(routeProgress) - maneuvers.fold( - { error -> - Toast.makeText( - this@MapboxNavigationActivity, - error.errorMessage, - Toast.LENGTH_SHORT - ).show() - }, - { - binding.maneuverView.visibility = VISIBLE - binding.maneuverView.renderManeuvers(maneuvers) - } - ) - - // update bottom trip progress summary - binding.tripProgressView.render(tripProgressApi.getTripProgress(routeProgress)) - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - // generate route geometries asynchronously and render them - CoroutineScope(Dispatchers.Main).launch { - val result = routeLineAPI.setRoutes( - listOf(RouteLine(result.routes.first(), null)) - ) - val style = mapboxMap.getStyle() - if (style != null) { - routeLineView.renderRouteDrawData(style, result) - } - } - - // update the camera position to account for the new route - viewportDataSource.onRouteChanged(result.routes.first()) - viewportDataSource.evaluate() - } else { - // remove the route line and route arrow from the map - val style = mapboxMap.getStyle() - if (style != null) { - routeLineAPI.clearRouteLine { value -> - routeLineView.renderClearRouteLineValue( - style, - value - ) - } - routeArrowView.render(style, routeArrowAPI.clearArrows()) - } - - // remove the route reference to change camera position - viewportDataSource.clearRouteData() - viewportDataSource.evaluate() - } - } - - private val navigationSessionStateObserver = NavigationSessionStateObserver { - logD("NavigationSessionState=$it", LOG_CATEGORY) - logD("sessionId=${mapboxNavigation.getNavigationSessionState().sessionId}", LOG_CATEGORY) - } - - @SuppressLint("MissingPermission") - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = LayoutActivityNavigationBinding.inflate(layoutInflater) - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - - // initialize the location puck - binding.mapView.location.apply { - this.locationPuck = LocationPuck2D( - bearingImage = ContextCompat.getDrawable( - this@MapboxNavigationActivity, - R.drawable.mapbox_navigation_puck_icon - ) - ) - setLocationProvider(navigationLocationProvider) - enabled = true - } - - // initialize Mapbox Navigation - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(getMapboxAccessTokenFromResources()) - .eventsAppMetadata( - EventsAppMetadata.Builder( - BuildConfig.APPLICATION_ID, - BuildConfig.VERSION_NAME - ).build() - ) - .build() - ) - // move the camera to current location on the first update - mapboxNavigation.registerLocationObserver(object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) { - val point = Point.fromLngLat(rawLocation.longitude, rawLocation.latitude) - val cameraOptions = CameraOptions.Builder() - .center(point) - .zoom(13.0) - .build() - mapboxMap.setCamera(cameraOptions) - mapboxNavigation.unregisterLocationObserver(this) - } - - override fun onNewLocationMatcherResult( - locationMatcherResult: LocationMatcherResult, - ) { - // not handled - } - }) - - // initialize Navigation Camera - viewportDataSource = MapboxNavigationViewportDataSource( - binding.mapView.getMapboxMap() - ) - navigationCamera = NavigationCamera( - binding.mapView.getMapboxMap(), - binding.mapView.camera, - viewportDataSource - ) - binding.mapView.camera.addCameraAnimationsLifecycleListener( - NavigationBasicGesturesHandler(navigationCamera) - ) - navigationCamera.registerNavigationCameraStateChangeObserver { navigationCameraState -> - // shows/hide the recenter button depending on the camera state - when (navigationCameraState) { - NavigationCameraState.TRANSITION_TO_FOLLOWING, - NavigationCameraState.FOLLOWING -> binding.recenter.visibility = INVISIBLE - - NavigationCameraState.TRANSITION_TO_OVERVIEW, - NavigationCameraState.OVERVIEW, - NavigationCameraState.IDLE -> binding.recenter.visibility = VISIBLE - } - } - if (this.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - viewportDataSource.overviewPadding = landscapeOverviewPadding - } else { - viewportDataSource.overviewPadding = overviewPadding - } - if (this.resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - viewportDataSource.followingPadding = landscapeFollowingPadding - } else { - viewportDataSource.followingPadding = followingPadding - } - - // initialize top maneuver view - maneuverApi = MapboxManeuverApi( - MapboxDistanceFormatter(DistanceFormatterOptions.Builder(this).build()) - ) - - // initialize bottom progress view - tripProgressApi = MapboxTripProgressApi( - TripProgressUpdateFormatter.Builder(this) - .distanceRemainingFormatter( - DistanceRemainingFormatter( - mapboxNavigation.navigationOptions.distanceFormatterOptions - ) - ) - .timeRemainingFormatter(TimeRemainingFormatter(this)) - .percentRouteTraveledFormatter(PercentDistanceTraveledFormatter()) - .estimatedTimeToArrivalFormatter( - EstimatedTimeToArrivalFormatter(this, TimeFormat.NONE_SPECIFIED) - ) - .build() - ) - - // initialize voice instructions - speechAPI = MapboxSpeechApi( - this, - getMapboxAccessTokenFromResources(), - Locale.US.language - ) - voiceInstructionsPlayer = MapboxVoiceInstructionsPlayer( - this, - Locale.US.language - ) - - // initialize route line - val mapboxRouteLineOptions = MapboxRouteLineOptions.Builder(this) - .withRouteLineBelowLayerId("road-label") - .build() - routeLineAPI = MapboxRouteLineApi(mapboxRouteLineOptions) - routeLineView = MapboxRouteLineView(mapboxRouteLineOptions) - val routeArrowOptions = RouteArrowOptions.Builder(this).build() - routeArrowView = MapboxRouteArrowView(routeArrowOptions) - - // load map style - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - // add long click listener that search for a route to the clicked destination - binding.mapView.gestures.addOnMapLongClickListener { point -> - findRoute(point) - true - } - } - - // initialize view interactions - binding.stop.setOnClickListener { - clearRouteAndStopNavigation() - } - binding.recenter.setOnClickListener { - navigationCamera.requestNavigationCameraToFollowing() - } - binding.routeOverview.setOnClickListener { - navigationCamera.requestNavigationCameraToOverview() - binding.recenter.showTextAndExtend(2000L) - } - binding.soundButton.setOnClickListener { - // mute/unmute voice instructions - isVoiceInstructionsMuted = !isVoiceInstructionsMuted - if (isVoiceInstructionsMuted) { - binding.soundButton.muteAndExtend(2000L) - voiceInstructionsPlayer.volume(SpeechVolume(0f)) - } else { - binding.soundButton.unmuteAndExtend(2000L) - voiceInstructionsPlayer.volume(SpeechVolume(1f)) - } - } - - // start the trip session to being receiving location updates in free drive - // and later when a route is set, also receiving route progress updates - mapboxNavigation.startTripSession() - } - - override fun onStart() { - super.onStart() - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerNavigationSessionStateObserver(navigationSessionStateObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerVoiceInstructionsObserver(voiceInstructionsObserver) - } - - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterNavigationSessionStateObserver(navigationSessionStateObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterVoiceInstructionsObserver(voiceInstructionsObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineAPI.cancel() - routeLineView.cancel() - mapboxNavigation.onDestroy() - maneuverApi.cancel() - speechAPI.cancel() - voiceInstructionsPlayer.shutdown() - } - - private fun findRoute(destination: Point) { - val origin = navigationLocationProvider.lastLocation?.let { - Point.fromLngLat(it.longitude, it.latitude) - } ?: return - - mapboxNavigation.requestRoutes( - RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .build(), - object : NavigationRouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - setRouteAndStartNavigation(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - private fun setRouteAndStartNavigation(route: List) { - // set route - mapboxNavigation.setNavigationRoutes(route) - - // show UI elements - binding.soundButton.visibility = VISIBLE - binding.routeOverview.visibility = VISIBLE - binding.tripProgressCard.visibility = VISIBLE - binding.routeOverview.showTextAndExtend(2000L) - binding.soundButton.unmuteAndExtend(2000L) - - // move the camera to overview when new route is available - navigationCamera.requestNavigationCameraToOverview() - } - - private fun clearRouteAndStopNavigation() { - // clear - mapboxNavigation.setRoutes(listOf()) - - // hide UI elements - binding.soundButton.visibility = INVISIBLE - binding.maneuverView.visibility = INVISIBLE - binding.routeOverview.visibility = INVISIBLE - binding.tripProgressCard.visibility = INVISIBLE - } - - private fun getMapboxAccessTokenFromResources(): String { - return Utils.getMapboxAccessToken(this) - } - - private companion object { - private const val LOG_CATEGORY = "MapboxNavigationActivity" - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxRouteLineAndArrowActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxRouteLineAndArrowActivity.kt deleted file mode 100644 index 1a993a1ef9d..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxRouteLineAndArrowActivity.kt +++ /dev/null @@ -1,517 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.graphics.Color -import android.location.Location -import android.os.Build -import android.os.Bundle -import android.os.VibrationEffect -import android.os.Vibrator -import android.util.Log -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import com.mapbox.android.core.location.LocationEngineCallback -import com.mapbox.android.core.location.LocationEngineResult -import com.mapbox.android.gestures.Utils -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style -import com.mapbox.maps.extension.observable.eventdata.MapLoadingErrorEventData -import com.mapbox.maps.extension.style.layers.properties.generated.Visibility -import com.mapbox.maps.plugin.LocationPuck2D -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadErrorListener -import com.mapbox.maps.plugin.gestures.OnMapClickListener -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.OnIndicatorPositionChangedListener -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.history.ReplayEventBase -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityRoutelineExampleBinding -import com.mapbox.navigation.ui.maps.NavigationStyles -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.RouteLayerConstants.TOP_LEVEL_ROUTE_LINE_LAYER_ID -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineColorResources -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import java.lang.ref.WeakReference - -/** - * This class demonstrates the usage of the route line and route arrow API's. There is - * boiler plate code for a basic navigation experience. The turn by turn navigation is simulated. - * The route line and arrow specific code is indicated with inline comments. - */ -class MapboxRouteLineAndArrowActivity : AppCompatActivity(), OnMapLongClickListener { - private val routeClickPadding = Utils.dpToPx(30f) - private val ONE_HUNDRED_MILLISECONDS = 100 - private val mapboxReplayer = MapboxReplayer() - private val replayRouteMapper = ReplayRouteMapper() - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - private var trafficGradientSoft = false - - private val viewBinding: LayoutActivityRoutelineExampleBinding by lazy { - LayoutActivityRoutelineExampleBinding.inflate(layoutInflater) - } - - private val mapboxMap: MapboxMap by lazy { - viewBinding.mapView.getMapboxMap() - } - - private val navigationLocationProvider by lazy { - NavigationLocationProvider() - } - - private val locationComponent by lazy { - viewBinding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - } - - private val mapboxNavigation by lazy { - MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - } - - private val mapCamera by lazy { - viewBinding.mapView.camera - } - - // RouteLine: Route line related colors can be customized via the RouteLineColorResources. - private val routeLineColorResources by lazy { - RouteLineColorResources.Builder() - .routeLineTraveledColor(Color.LTGRAY) - .routeLineTraveledCasingColor(Color.GRAY) - .build() - } - - // RouteLine: Various route line related options can be customized here including applying - // route line color customizations. If using the default colors the RouteLineColorResources - // does not need to be set as seen here, the defaults will be used internally by the builder. - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder() - .routeLineColorResources(routeLineColorResources) - .build() - } - - // RouteLine: Additional route line options are available through the MapboxRouteLineOptions. - // Notice here the withRouteLineBelowLayerId option. The map is made up of layers. In this - // case the route line will be placed below the "road-label" layer which is a good default - // for the most common Mapbox navigation related maps. You should consider if this should be - // changed for your use case especially if you are using a custom map style. - // - // Also noteworthy is the 'withVanishingRouteLineEnabled' option. This feature will change - // the color of the route line behind the puck during navigation. The color can be customized - // using the RouteLineColorResources::routeLineTraveledColor and - // RouteLineColorResources::routeLineTraveledCasingColor options. The color options support - // an alpha value to render the line transparent which is the default. - // - // To use the vanishing route line feature it is also necessary to register an - // OnIndicatorPositionChangedListener and a RouteProgressObserver. There may be reasons to use - // a RouteProgressObserver even if you are not using the vanishing route line feature. - // The OnIndicatorPositionChangedListener is only useful and required when enabling the - // vanishing route line feature. - // - // Examples are below. - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label-navigation") - .withVanishingRouteLineEnabled(true) - .displaySoftGradientForTraffic(trafficGradientSoft) - .build() - } - - // RouteLine: This class is responsible for rendering route line related mutations generated - // by the MapboxRouteLineApi class. - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - // RouteLine: This class is responsible for generating route line related data which must be - // rendered by the MapboxRouteLineView class in order to visualize the route line on the map. - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - // RouteArrow: This class is responsible for generating data related to maneuver arrows. The - // data generated must be rendered by the MapboxRouteArrowView in order to apply mutations to - // the map. - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - // RouteArrow: Customization of the maneuver arrow(s) can be done using the - // RouteArrowOptions. Here the above layer ID is used to determine where in the map layer - // stack the arrows appear. Above the layer of the route traffic line is being used here. Your - // use case may necessitate adjusting this to a different layer position. - private val routeArrowOptions by lazy { - RouteArrowOptions.Builder(this) - .withAboveLayerId(TOP_LEVEL_ROUTE_LINE_LAYER_ID) - .build() - } - - // RouteArrow: This class is responsible for rendering the arrow related mutations generated - // by the MapboxRouteArrowApi class. - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(routeArrowOptions) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(viewBinding.root) - init() - } - - private fun init() { - initGradientSelector() - initNavigation() - initStyle() - initListeners() - locationComponent.locationPuck = LocationPuck2D( - null, - ContextCompat.getDrawable( - this@MapboxRouteLineAndArrowActivity, - R.drawable.mapbox_navigation_puck_icon - ), - null, - null - ) - } - - private fun initGradientSelector() { - viewBinding.gradientOptionHard.setOnClickListener { - trafficGradientSoft = false - } - viewBinding.gradientOptionSoft.setOnClickListener { - trafficGradientSoft = true - } - } - - // RouteLine: This is one way to keep the route(s) appearing on the map in sync with - // MapboxNavigation. When this observer is called the route data is used to draw route(s) - // on the map. - private val routesObserver: RoutesObserver = RoutesObserver { result -> - // RouteLine: wrap the DirectionRoute objects and pass them - // to the MapboxRouteLineApi to generate the data necessary to draw the route(s) - // on the map. - val routeLines = result.routes.map { RouteLine(it, null) } - - routeLineApi.setRoutes( - routeLines - ) { value -> - // RouteLine: The MapboxRouteLineView expects a non-null reference to the map style. - // the data generated by the call to the MapboxRouteLineApi above must be rendered - // by the MapboxRouteLineView in order to visualize the changes on the map. - mapboxMap.getStyle()?.apply { - routeLineView.renderRouteDrawData(this, value) - } - } - } - - // RouteLine: This listener is necessary only when enabling the vanishing route line feature - // which changes the color of the route line behind the puck during navigation. If this - // option is set to `false` (the default) in MapboxRouteLineOptions then it is not necessary - // to use this listener. - private val onPositionChangedListener = OnIndicatorPositionChangedListener { point -> - val result = routeLineApi.updateTraveledRouteLine(point) - mapboxMap.getStyle()?.apply { - // Render the result to update the map. - routeLineView.renderRouteLineUpdate(this, result) - } - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - // RouteLine: This line is only necessary if the vanishing route line feature - // is enabled. - routeLineApi.updateWithRouteProgress(routeProgress) { result -> - mapboxMap.getStyle()?.apply { - routeLineView.renderRouteLineUpdate(this, result) - } - } - - // RouteArrow: The next maneuver arrows are driven by route progress events. - // Generate the next maneuver arrow update data and pass it to the view class - // to visualize the updates on the map. - val arrowUpdate = routeArrowApi.addUpcomingManeuverArrow(routeProgress) - mapboxMap.getStyle()?.apply { - // Render the result to update the map. - routeArrowView.renderManeuverUpdate(this, arrowUpdate) - } - } - - // RouteLine: Below is a demonstration of selecting different routes. On a map click, a call - // will be made to look for a route line on the map based on the map touch point. If a route is - // found and it is not already the primary route, the selected route will designated the primary - // route and MapboxNavigation will be updated. - private val mapClickListener = OnMapClickListener { point -> - mapboxMap.getStyle()?.apply { - // Since this listener is reacting to all map touches, if the primary and alternative - // routes aren't visible it's assumed the touch isn't related to selecting an - // alternative route. - val primaryLineVisibility = routeLineView.getPrimaryRouteVisibility(this) - val alternativeRouteLinesVisibility = routeLineView.getAlternativeRoutesVisibility(this) - if ( - primaryLineVisibility == Visibility.VISIBLE && - alternativeRouteLinesVisibility == Visibility.VISIBLE - ) { - routeLineApi.findClosestRoute( - point, - mapboxMap, - routeClickPadding - ) { result -> - result.onValue { value -> - if (value.route != routeLineApi.getPrimaryRoute()) { - val reOrderedRoutes = routeLineApi.getRoutes() - .filter { it != value.route } - .toMutableList() - .also { - it.add(0, value.route) - } - mapboxNavigation.setRoutes(reOrderedRoutes) - } - } - } - } - } - - false - } - - private fun initNavigation() { - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerRoutesObserver(routesObserver) - - // The lines below are related to the navigation simulator. - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.playbackSpeed(1.5) - mapboxReplayer.play() - } - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - updateCamera(locationMatcherResult.enhancedLocation) - } - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapCamera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri( - NavigationStyles.NAVIGATION_DAY_STYLE, - { style: Style -> - // Get the last known location and move the map to that location. - mapboxNavigation.navigationOptions.locationEngine.getLastLocation( - locationEngineCallback - ) - viewBinding.mapView.gestures.addOnMapLongClickListener(this) - }, - object : OnMapLoadErrorListener { - override fun onMapLoadError(eventData: MapLoadingErrorEventData) { - Log.e( - MapboxRouteLineAndArrowActivity::class.java.simpleName, - "Error loading map - error type: " + - "${eventData.type}, message: ${eventData.message}" - ) - } - } - ) - } - - override fun onMapLongClick(point: Point): Boolean { - vibrate() - viewBinding.startNavigation.visibility = View.GONE - viewBinding.optionTrafficGradient.visibility = View.GONE - val currentLocation = navigationLocationProvider.lastLocation - if (currentLocation != null) { - val originPoint = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - findRoute(originPoint, point) - viewBinding.routeLoadingProgressBar.visibility = View.VISIBLE - } - return false - } - - fun findRoute(origin: Point?, destination: Point?) { - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .alternatives(true) - .build() - mapboxNavigation.requestRoutes( - routeOptions, - routesReqCallback - ) - } - - private val routesReqCallback: RouterCallback = object : RouterCallback { - override fun onRoutesReady(routes: List, routerOrigin: RouterOrigin) { - mapboxNavigation.setRoutes(routes) - if (routes.isNotEmpty()) { - viewBinding.routeLoadingProgressBar.visibility = View.INVISIBLE - viewBinding.startNavigation.visibility = View.VISIBLE - } - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - viewBinding.routeLoadingProgressBar.visibility = View.INVISIBLE - } - - override fun onFailure(reasons: List, routeOptions: RouteOptions) { - viewBinding.routeLoadingProgressBar.visibility = View.INVISIBLE - } - } - - @SuppressLint("MissingPermission") - private fun vibrate() { - val vibrator = getSystemService(VIBRATOR_SERVICE) as Vibrator - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - vibrator.vibrate( - VibrationEffect.createOneShot( - ONE_HUNDRED_MILLISECONDS.toLong(), - VibrationEffect.DEFAULT_AMPLITUDE - ) - ) - } else { - vibrator.vibrate(ONE_HUNDRED_MILLISECONDS.toLong()) - } - } - - @SuppressLint("MissingPermission") - private fun initListeners() { - viewBinding.startNavigation.setOnClickListener { - val route = mapboxNavigation.getRoutes().firstOrNull() - if (route != null) { - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.startTripSession() - viewBinding.startNavigation.visibility = View.INVISIBLE - locationComponent.addOnIndicatorPositionChangedListener(onPositionChangedListener) - - // RouteLine: Hiding the alternative routes when navigation starts. - mapboxMap.getStyle()?.apply { - routeLineView.hideAlternativeRoutes(this) - } - - startSimulation(route) - } - } - viewBinding.mapView.gestures.addOnMapClickListener(mapClickListener) - } - - // Starts the navigation simulator - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - val replayData: List = replayRouteMapper.mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayData) - mapboxReplayer.seekTo(replayData[0]) - mapboxReplayer.play() - } - - override fun onStart() { - super.onStart() - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRoutesObserver(routesObserver) - } - - override fun onStop() { - super.onStop() - locationComponent.removeOnIndicatorPositionChangedListener(onPositionChangedListener) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRoutesObserver(routesObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - private val locationEngineCallback = MyLocationEngineCallback(this) - - private class MyLocationEngineCallback(activity: MapboxRouteLineAndArrowActivity) : - LocationEngineCallback { - - private val activityRef: WeakReference by lazy { - WeakReference(activity) - } - - override fun onSuccess(result: LocationEngineResult?) { - val location = result?.lastLocation - val activity = activityRef.get() - if (location != null && activity != null) { - val point = Point.fromLngLat(location.longitude, location.latitude) - val cameraOptions = CameraOptions.Builder().center(point).zoom(13.0).build() - activity.mapboxMap.setCamera(cameraOptions) - activity.navigationLocationProvider.changePosition(location, listOf(), null, null) - } - } - - override fun onFailure(exception: Exception) { - } - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxSignboardActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxSignboardActivity.kt deleted file mode 100644 index c81974d8b07..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxSignboardActivity.kt +++ /dev/null @@ -1,329 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.content.Context -import android.location.Location -import android.os.Bundle -import android.view.View -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.bindgen.Expected -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.BannerInstructionsObserver -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivitySignboardBinding -import com.mapbox.navigation.ui.base.util.MapboxNavigationConsumer -import com.mapbox.navigation.ui.maps.guidance.signboard.api.MapboxSignboardApi -import com.mapbox.navigation.ui.maps.guidance.signboard.model.SignboardError -import com.mapbox.navigation.ui.maps.guidance.signboard.model.SignboardValue -import com.mapbox.navigation.ui.maps.guidance.signboard.view.MapboxSignboardView -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.ui.utils.internal.ifNonNull -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -/** - * This activity demonstrates the usage of the [MapboxSignboardApi]. There is boiler plate - * code for establishing basic navigation and a route simulator is used. The example assumes - * that LOCATION permission has already been granted. - * - * The code specifically related to the signboard component is commented in order to call - * attention to its usage. The example uses a predefined location pair to demonstrate signboard. - * Long press anywhere on the map to use predefined coordinates and trigger navigation. - * - * Note: A special access token is required to get access to signboards in directions response. - */ -class MapboxSignboardActivity : AppCompatActivity(), OnMapLongClickListener { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivitySignboardBinding - private lateinit var locationComponent: LocationComponentPlugin - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - - /** - * The [MapboxSignboardApi] consumes banner instructions data and produces signboard related - * data that is consumed by the [MapboxSignboardView] in the view layout. - */ - private val signboardApi: MapboxSignboardApi by lazy { - MapboxSignboardApi(getMapboxRouteAccessToken(this), applicationContext) - } - - /** - * The result of invoking [MapboxSignboardApi.generateSignboard] is returned as a callback - * containing either a success in the form of [SignboardValue] or failure in the form of - * [SignboardError]. - */ - private val signboardCallback = - MapboxNavigationConsumer> { expected -> - // The data obtained must be rendered by [MapboxSignboardView] - expected.onValue { - binding.signboardView.visibility = View.VISIBLE - } - expected.onError { - binding.signboardView.visibility = View.GONE - } - binding.signboardView.render(expected) - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - updateCamera(locationMatcherResult.enhancedLocation) - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setRoutes(listOf(RouteLine(result.routes[0], null))).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - startSimulation(result.routes[0]) - } - } - - private val bannerInstructionsObserver = BannerInstructionsObserver { bannerInstructions -> - // The signboard component is driven by banner instructions updates. - // Passing the instructions to the MapboxSignboardApi generates the data - // for updating the view. - signboardApi.generateSignboard(bannerInstructions, signboardCallback) - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(getMapboxRouteAccessToken(this)) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun findRoute(origin: Point, destination: Point) { - mapboxNavigation.requestRoutes( - RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .build(), - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - binding.mapView.camera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } - - /** - * Uses a specific access token required for the route request to send signboards in the response. - * If the specific access token is not present, it defaults to access token required to render - * Maps. - * - * @param context The [Context] of the [android.app.Activity] or [android.app.Fragment]. - * @return The Mapbox access token or null if not found. - */ - private fun getMapboxRouteAccessToken(context: Context): String { - val tokenResId = context.resources - .getIdentifier("mapbox_access_token_signboard", "string", context.packageName) - return if (tokenResId != 0) { - context.getString(tokenResId) - } else { - Toast.makeText(this, "Missing mapbox_access_token_signboard", Toast.LENGTH_LONG).show() - getMapboxAccessTokenFromResources() - } - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - // Look at LayoutActivitySignboardBinding to see the view component in the - // activity's layout. - binding = LayoutActivitySignboardBinding.inflate(layoutInflater) - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - init() - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerBannerInstructionsObserver(bannerInstructionsObserver) - } - } - - override fun onStop() { - super.onStop() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.unregisterBannerInstructionsObserver(bannerInstructionsObserver) - } - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - signboardApi.cancelAll() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - override fun onMapLongClick(point: Point): Boolean { - ifNonNull(navigationLocationProvider.lastLocation) { - val or = Point.fromLngLat(-3.5870, 40.5719) - val de = Point.fromLngLat(-3.607835, 40.551486) - findRoute(or, de) - } - return false - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxTripProgressActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxTripProgressActivity.kt deleted file mode 100644 index 0e8536600d2..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxTripProgressActivity.kt +++ /dev/null @@ -1,320 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.location.Location -import android.os.Bundle -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.formatter.DistanceFormatterOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityTripprogressBinding -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.ui.tripprogress.api.MapboxTripProgressApi -import com.mapbox.navigation.ui.tripprogress.model.DistanceRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.EstimatedTimeToArrivalFormatter -import com.mapbox.navigation.ui.tripprogress.model.TimeRemainingFormatter -import com.mapbox.navigation.ui.tripprogress.model.TripProgressUpdateFormatter -import com.mapbox.navigation.ui.tripprogress.view.MapboxTripProgressView -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch - -/** - * This activity demonstrates the usage of the [MapboxTripProgressApi]. There is boiler plate - * code for establishing basic navigation and a route simulator is used. The example assumes - * that LOCATION permission has already been granted. - * - * The code specifically related to the trip progress component is commented in order to call - * attention to its usage. Long press anywhere on the map to set a destination and trigger - * navigation. - */ -class MapboxTripProgressActivity : AppCompatActivity(), OnMapLongClickListener { - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityTripprogressBinding - private lateinit var locationComponent: LocationComponentPlugin - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - - /** - * TripProgress: The data in the view is formatted by different formatting implementations. - * Below are default formatters using default options but you can use your own formatting - * classes. - */ - private val tripProgressFormatter: TripProgressUpdateFormatter by lazy { - - // Here a distance formatter with default values is being created. - // The distance remaining formatter can also come from MapboxNavigation just be sure it - // is instantiated and configured first. The formatting options in MapboxNavigation - // can be found at: MapboxNavigation.navigationOptions.distanceFormatterOptions - val distanceFormatterOptions = - DistanceFormatterOptions.Builder(this).build() - - // These are Mapbox formatters being created with default values. You can provide your own - // custom formatters by implementing the appropriate interface. The expected output of - // a formatter is a SpannableString that is applied to the the view - // component in MapboxTripProgressView. - TripProgressUpdateFormatter.Builder(this) - .distanceRemainingFormatter(DistanceRemainingFormatter(distanceFormatterOptions)) - .timeRemainingFormatter(TimeRemainingFormatter(this)) - .estimatedTimeToArrivalFormatter(EstimatedTimeToArrivalFormatter(this)) - .build() - } - - /** - * TripProgress: The [MapboxTripProgressApi] consumes route progress data and produces trip related - * data that is consumed by the [MapboxTripProgressView] in the view layout. - */ - private val tripProgressApiApi: MapboxTripProgressApi by lazy { - MapboxTripProgressApi(tripProgressFormatter) - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - // TripProgress: The trip progress component is driven by route progress updates. - // Passing the route progress to the MapboxTripProgressApi generates the data - // for updating the view. The result must be rendered by the MapboxTripProgressView. - tripProgressApiApi.getTripProgress(routeProgress).let { update -> - binding.tripProgressView.render(update) - } - - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - updateCamera(locationMatcherResult.enhancedLocation) - } - } - - private val routesObserver = RoutesObserver { result -> - if (result.routes.isNotEmpty()) { - CoroutineScope(Dispatchers.Main).launch { - routeLineApi.setRoutes(listOf(RouteLine(result.routes[0], null))).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - startSimulation(result.routes[0]) - binding.tripProgressView.visibility = View.VISIBLE - } else { - binding.tripProgressView.visibility = View.GONE - } - } - - private fun init() { - initNavigation() - initStyle() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - mapboxNavigation = MapboxNavigationProvider.create( - NavigationOptions.Builder(this@MapboxTripProgressActivity) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } - - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapAnimationOptionsBuilder.duration(1500L) - binding.mapView.camera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private fun findRoute(origin: Point?, destination: Point?) { - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .alternatives(true) - .build() - mapboxNavigation.requestRoutes( - routeOptions, - object : RouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - // TripProgress: Look at LayoutActivityTripprogressBinding to see the view component in the - // activity's layout. You can update the style of the MapboxTripProgressView at runtime - // by calling MapboxTripProgressView::updateStyle. This can be useful when going from - // a light to a dark theme for example. - binding = LayoutActivityTripprogressBinding.inflate(layoutInflater) - - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - init() - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - } - } - - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - override fun onMapLongClick(point: Point): Boolean { - val currentLocation = navigationLocationProvider.lastLocation - if (currentLocation != null) { - val originPoint = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - findRoute(originPoint, point) - } - return false - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxVoiceActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxVoiceActivity.kt deleted file mode 100644 index 8642b717de5..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MapboxVoiceActivity.kt +++ /dev/null @@ -1,486 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.content.res.Resources -import android.location.Location -import android.os.Bundle -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.coroutineScope -import androidx.lifecycle.lifecycleScope -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.bindgen.Expected -import com.mapbox.common.ResourceLoadError -import com.mapbox.common.ResourceLoadProgress -import com.mapbox.common.ResourceLoadResult -import com.mapbox.geojson.Point -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style.Companion.MAPBOX_STREETS -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.gestures.OnMapLongClickListener -import com.mapbox.maps.plugin.gestures.gestures -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.NavigationRoute -import com.mapbox.navigation.base.route.NavigationRouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.core.trip.session.VoiceInstructionsObserver -import com.mapbox.navigation.examples.core.databinding.LayoutActivityVoiceBinding -import com.mapbox.navigation.ui.base.util.MapboxNavigationConsumer -import com.mapbox.navigation.ui.maps.camera.NavigationCamera -import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSource -import com.mapbox.navigation.ui.maps.camera.lifecycle.NavigationBasicGesturesHandler -import com.mapbox.navigation.ui.maps.camera.state.NavigationCameraState -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.MapboxRouteLineApiExtensions.setNavigationRoutes -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.ui.utils.internal.resource.ResourceLoadObserver -import com.mapbox.navigation.ui.utils.internal.resource.ResourceLoadRequest -import com.mapbox.navigation.ui.utils.internal.resource.ResourceLoaderFactory -import com.mapbox.navigation.ui.voice.api.MapboxSpeechApi -import com.mapbox.navigation.ui.voice.api.MapboxVoiceInstructionsPlayer -import com.mapbox.navigation.ui.voice.api.VoiceInstructionsPrefetcher -import com.mapbox.navigation.ui.voice.model.SpeechAnnouncement -import com.mapbox.navigation.ui.voice.model.SpeechError -import com.mapbox.navigation.ui.voice.model.SpeechValue -import com.mapbox.navigation.ui.voice.model.SpeechVolume -import com.mapbox.navigation.ui.voice.options.VoiceInstructionsPlayerOptions -import com.mapbox.navigation.utils.internal.ifNonNull -import com.mapbox.navigation.utils.internal.logD -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import java.util.Locale - -/** - * This activity demonstrates the usage of the [MapboxSpeechApi]. There is boiler plate - * code for establishing basic navigation and a route simulator is used. The example assumes - * that LOCATION permission has already been granted. - * - * The code specifically related to the voice component is commented in order to call - * attention to its usage. Long press anywhere on the map to set a destination and trigger - * navigation. - */ -@OptIn(ExperimentalPreviewMapboxNavigationAPI::class) -class MapboxVoiceActivity : AppCompatActivity(), OnMapLongClickListener { - - private var isMuted: Boolean = false - - private lateinit var mapboxMap: MapboxMap - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var binding: LayoutActivityVoiceBinding - private lateinit var locationComponent: LocationComponentPlugin - - private val mapboxReplayer = MapboxReplayer() - private val navigationLocationProvider = NavigationLocationProvider() - - /** - * The [MapboxSpeechApi] consumes route progress and voice instructions data - * and produces trip related data that is consumed by the [MapboxVoiceInstructionsPlayer] - * in the form of speech. - */ - private val speechApi: MapboxSpeechApi by lazy { - MapboxSpeechApi(this, getMapboxAccessTokenFromResources(), Locale.US.toLanguageTag()) - } - - /** - * The [MapboxVoiceInstructionsPlayer] consumes the voice instructions data - * and plays them using the appropriate TTS player. - * NOTE: do not use lazy initialization for this class since it takes some time to initialize - * the system services required for on-device speech synthesis. With lazy initialization - * there is a high risk that said services will not be available when the first instruction - * has to be played. [MapboxVoiceInstructionsPlayer] should be instantiated in - * `Activity#onCreate`. - */ - private var voiceInstructionsPlayer: MapboxVoiceInstructionsPlayer? = null - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label") - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - private lateinit var navigationCamera: NavigationCamera - private lateinit var viewportDataSource: MapboxNavigationViewportDataSource - - /** - * The result of invoking [MapboxVoiceInstructionsPlayer.play] is returned as a callback - * containing [SpeechAnnouncement]. - */ - private val voiceInstructionsPlayerCallback = - MapboxNavigationConsumer { value -> speechApi.clean(value) } - - /** - * The result of invoking [MapboxSpeechApi.generate] is returned as a callback - * containing either a success in the form of [SpeechValue] or failure in the form of - * [SpeechError]. - */ - private val speechCallback = - MapboxNavigationConsumer> { expected -> - expected.fold( - { error -> - logD("play(fallback): '${error.fallback.announcement}'", TAG) - // The data obtained in the form of an error is played using - // voiceInstructionsPlayer. - voiceInstructionsPlayer?.play( - error.fallback, - voiceInstructionsPlayerCallback - ) - }, - { value -> - logD("play: '${value.announcement.announcement}'", TAG) - // The data obtained in the form of speech announcement is played using - // voiceInstructionsPlayer. - voiceInstructionsPlayer?.play( - value.announcement, - voiceInstructionsPlayerCallback - ) - } - ) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - - // update camera position to account for new location - viewportDataSource.onLocationChanged(locationMatcherResult.enhancedLocation) - viewportDataSource.evaluate() - } - } - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - ifNonNull(routeArrowView, mapboxMap.getStyle()) { view, style -> - view.renderManeuverUpdate(style, this) - } - } - } - - private val voiceInstructionsPrefetcher by lazy { - VoiceInstructionsPrefetcher(speechApi) - } - - private val voiceInstructionsObserver = - VoiceInstructionsObserver { voiceInstructions -> // The data obtained must be used to generate the synthesized speech mp3 file. - speechApi.generatePredownloaded( - voiceInstructions, - speechCallback - ) - } - - private val routesObserver = - RoutesObserver { result -> // Every time a new route is obtained make sure to cancel the [MapboxSpeechApi] and - // clear the [MapboxVoiceInstructionsPlayer] - speechApi.cancel() - voiceInstructionsPlayer?.clear() - if (result.navigationRoutes.isNotEmpty()) { - lifecycleScope.launch { - routeLineApi.setNavigationRoutes( - listOf(result.navigationRoutes[0]) - ).apply { - routeLineView.renderRouteDrawData(mapboxMap.getStyle()!!, this) - } - } - startSimulation(result.navigationRoutes[0].directionsRoute) - } - } - - @SuppressLint("MissingPermission") - private fun init() { - initNavigation() - initStyle() - initButtons() - mapboxNavigation.startTripSession() - } - - @SuppressLint("MissingPermission") - private fun initNavigation() { - val navigationOptions = NavigationOptions.Builder(this) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - mapboxNavigation = MapboxNavigationProvider.create(navigationOptions) - mapboxNavigation.startTripSession() - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.play() - - // initialize Navigation Camera - viewportDataSource = MapboxNavigationViewportDataSource( - binding.mapView.getMapboxMap() - ).apply { - followingPadding = EdgeInsets(180.0.dp, 40.0.dp, 150.0.dp, 40.0.dp) - } - - navigationCamera = NavigationCamera( - binding.mapView.getMapboxMap(), - binding.mapView.camera, - viewportDataSource - ).apply { - requestNavigationCameraToFollowing() - registerNavigationCameraStateChangeObserver { navigationCameraState -> - binding.recenterButton.visibility = if ( - navigationCameraState in listOf( - NavigationCameraState.TRANSITION_TO_OVERVIEW, - NavigationCameraState.OVERVIEW, - NavigationCameraState.IDLE, - ) - ) { - View.VISIBLE - } else { - View.GONE - } - } - } - - binding.mapView.camera.addCameraAnimationsLifecycleListener( - NavigationBasicGesturesHandler(navigationCamera) - ) - } - - private fun initStyle() { - mapboxMap.loadStyleUri(MAPBOX_STREETS) { style -> - routeLineView.initializeLayers(style) - binding.mapView.gestures.addOnMapLongClickListener(this) - } - } - - private fun initButtons() { - soundButtonMake(isMuted) // init state - - binding.soundButton.setOnClickListener { - soundButtonMake(!isMuted) - } - - binding.addPlay.setOnClickListener { - voiceInstructionsPlayer?.play( - SpeechAnnouncement.Builder("Test hybrid speech player.").build(), - voiceInstructionsPlayerCallback - ) - } - - binding.recenterButton.setOnClickListener { - navigationCamera.requestNavigationCameraToFollowing() - } - } - - private fun soundButtonMake(mute: Boolean) { - val muted = if (mute) { - binding.soundButton.muteAndExtend(SOUND_BUTTON_TEXT_APPEAR_DURATION) - } else { - binding.soundButton.unmuteAndExtend(SOUND_BUTTON_TEXT_APPEAR_DURATION) - } - handleSoundState(muted) - } - - private fun handleSoundState(value: Boolean) { - if (value) { - // This is used to set the speech volume to mute. - voiceInstructionsPlayer?.volume(SpeechVolume(0.0f)) - } else { - // This is used to set the speech volume to max - voiceInstructionsPlayer?.volume(SpeechVolume(1.0f)) - } - isMuted = value - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } - - @SuppressLint("MissingPermission") - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - mapboxReplayer.pushRealLocation(this, 0.0) - val replayEvents = ReplayRouteMapper().mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayEvents) - mapboxReplayer.seekTo(replayEvents.first()) - mapboxReplayer.play() - } - - private fun findRoute(origin: Point, destination: Point) { - val routeOptions: RouteOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList(listOf(origin, destination)) - .layersList(listOf(mapboxNavigation.getZLevel(), null)) - .voiceInstructions(true) - .build() - mapboxNavigation.requestRoutes( - routeOptions, - object : NavigationRouterCallback { - override fun onRoutesReady( - routes: List, - routerOrigin: RouterOrigin - ) { - mapboxNavigation.setNavigationRoutes(routes) - } - - override fun onFailure( - reasons: List, - routeOptions: RouteOptions - ) { - // no impl - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - // no impl - } - } - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = LayoutActivityVoiceBinding.inflate(layoutInflater) - setContentView(binding.root) - mapboxMap = binding.mapView.getMapboxMap() - locationComponent = binding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - lifecycle.coroutineScope.launch(Dispatchers.Default) { - voiceInstructionsPlayer = MapboxVoiceInstructionsPlayer( - applicationContext, - Locale.US.toLanguageTag(), - VoiceInstructionsPlayerOptions.Builder() - .abandonFocusDelay(PLAYER_ABANDON_FOCUS_DELAY) - .build() - ) - } - init() - voiceInstructionsPrefetcher.onAttached(mapboxNavigation) - } - - override fun onStart() { - super.onStart() - if (::mapboxNavigation.isInitialized) { - mapboxNavigation.registerRoutesObserver(routesObserver) - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerVoiceInstructionsObserver(voiceInstructionsObserver) - } - ResourceLoaderFactory.getInstance().registerObserver(resourceLoadObserver) - } - - override fun onStop() { - super.onStop() - ResourceLoaderFactory.getInstance().unregisterObserver(resourceLoadObserver) - mapboxNavigation.unregisterRoutesObserver(routesObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.unregisterVoiceInstructionsObserver(voiceInstructionsObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - speechApi.cancel() - voiceInstructionsPrefetcher.onDetached(mapboxNavigation) - voiceInstructionsPlayer?.shutdown() - } - - override fun onMapLongClick(point: Point): Boolean { - val currentLocation = navigationLocationProvider.lastLocation - if (currentLocation != null) { - val originPoint = Point.fromLngLat( - currentLocation.longitude, - currentLocation.latitude - ) - findRoute(originPoint, point) - } - return false - } - - // ResourceLoadObserver that logs ResourceLoader operations - private val resourceLoadObserver = object : ResourceLoadObserver { - override fun onStart(request: ResourceLoadRequest) = Unit - - override fun onProgress( - request: ResourceLoadRequest, - progress: ResourceLoadProgress - ) = Unit - - override fun onFinish( - request: ResourceLoadRequest, - result: Expected - ) { - result.value?.also { v -> - val cleanURL = request.url.replace( - Regex("access_token=([a-zA-Z0-9.]+)"), - "access_token=REDACTED" - ) - val values = mutableMapOf( - "status" to v.status, - "totalBytes" to v.totalBytes, - "transferredBytes" to v.transferredBytes, - "url" to cleanURL - ) - logD("onFinish: $values", "ResourceLoadObserver") - } - } - } - - private val Number.dp: Double get() = toDouble() * Resources.getSystem().displayMetrics.density - - private companion object { - private const val TAG = "MapboxVoiceActivity" - private const val SOUND_BUTTON_TEXT_APPEAR_DURATION = 1000L - private const val PLAYER_ABANDON_FOCUS_DELAY = 2000L - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/MultiLegRouteExampleActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/MultiLegRouteExampleActivity.kt deleted file mode 100644 index 6df32b69f8c..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/MultiLegRouteExampleActivity.kt +++ /dev/null @@ -1,341 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.graphics.Color -import android.location.Location -import android.os.Bundle -import android.util.Log -import android.view.View -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import com.mapbox.api.directions.v5.models.DirectionsRoute -import com.mapbox.api.directions.v5.models.RouteOptions -import com.mapbox.geojson.Point -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.MapboxMap -import com.mapbox.maps.Style -import com.mapbox.maps.extension.observable.eventdata.MapLoadingErrorEventData -import com.mapbox.maps.plugin.LocationPuck2D -import com.mapbox.maps.plugin.animation.MapAnimationOptions -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadErrorListener -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.extensions.applyDefaultNavigationOptions -import com.mapbox.navigation.base.extensions.applyLanguageAndVoiceUnitOptions -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.base.route.RouterCallback -import com.mapbox.navigation.base.route.RouterFailure -import com.mapbox.navigation.base.route.RouterOrigin -import com.mapbox.navigation.core.MapboxNavigationProvider -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.MapboxReplayer -import com.mapbox.navigation.core.replay.ReplayLocationEngine -import com.mapbox.navigation.core.replay.history.ReplayEventBase -import com.mapbox.navigation.core.replay.route.ReplayProgressObserver -import com.mapbox.navigation.core.replay.route.ReplayRouteMapper -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.MultilegRouteExampleLayoutBinding -import com.mapbox.navigation.ui.maps.NavigationStyles -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineColorResources -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources - -/** - * This example demonstrates hiding inactive route legs. There are two specific use cases to - * take notice of that effect the implementation. - * - * It's important to take note of the code in the [RouteProgressObserver] below. - */ -class MultiLegRouteExampleActivity : AppCompatActivity() { - - private val mapboxReplayer = MapboxReplayer() - private val replayRouteMapper = ReplayRouteMapper() - - private val mapboxMap: MapboxMap by lazy { - viewBinding.mapView.getMapboxMap() - } - - private val navigationLocationProvider by lazy { - NavigationLocationProvider() - } - - private val viewBinding: MultilegRouteExampleLayoutBinding by lazy { - MultilegRouteExampleLayoutBinding.inflate(layoutInflater) - } - - private val locationComponent by lazy { - viewBinding.mapView.location.apply { - setLocationProvider(navigationLocationProvider) - enabled = true - } - } - - private val mapboxNavigation by lazy { - MapboxNavigationProvider.create( - NavigationOptions.Builder(this) - .accessToken(getMapboxAccessTokenFromResources()) - .locationEngine(ReplayLocationEngine(mapboxReplayer)) - .build() - ) - } - - private val mapCamera by lazy { - viewBinding.mapView.camera - } - - private val routeColorResources: RouteLineColorResources by lazy { - // This options is transparent by default. - RouteLineColorResources.Builder() - .inActiveRouteLegsColor(Color.GRAY) - .inactiveRouteLegCasingColor(Color.BLACK) - .build() - } - - private val routeLineResources: RouteLineResources by lazy { - RouteLineResources.Builder().routeLineColorResources(routeColorResources).build() - } - - private val options: MapboxRouteLineOptions by lazy { - MapboxRouteLineOptions.Builder(this) - .withRouteLineResources(routeLineResources) - .withRouteLineBelowLayerId("road-label-navigation") - .styleInactiveRouteLegsIndependently(true) // This is the relevant option for this example - .build() - } - - private val routeLineView by lazy { - MapboxRouteLineView(options) - } - - private val routeLineApi: MapboxRouteLineApi by lazy { - MapboxRouteLineApi(options) - } - - private val routeArrowApi: MapboxRouteArrowApi by lazy { - MapboxRouteArrowApi() - } - - private val routeArrowView: MapboxRouteArrowView by lazy { - MapboxRouteArrowView(RouteArrowOptions.Builder(this).build()) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(viewBinding.root) - init() - } - - private fun init() { - initNavigation() - initStyle() - initListeners() - locationComponent.locationPuck = LocationPuck2D( - null, - ContextCompat.getDrawable( - this@MultiLegRouteExampleActivity, - R.drawable.mapbox_navigation_puck_icon - ), - null, - null - ) - } - - private fun initNavigation() { - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerRoutesObserver(routesObserver) - - // The lines below are related to the navigation simulator. - mapboxReplayer.pushRealLocation(this, 0.0) - mapboxReplayer.playbackSpeed(1.5) - mapboxReplayer.play() - } - - private val locationObserver = object : LocationObserver { - override fun onNewRawLocation(rawLocation: Location) {} - override fun onNewLocationMatcherResult(locationMatcherResult: LocationMatcherResult) { - navigationLocationProvider.changePosition( - locationMatcherResult.enhancedLocation, - locationMatcherResult.keyPoints, - ) - updateCamera(locationMatcherResult.enhancedLocation) - } - } - - @SuppressLint("MissingPermission") - private fun initListeners() { - viewBinding.startNavigation.setOnClickListener { - val route = mapboxNavigation.getRoutes().firstOrNull() - if (route != null) { - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.startTripSession() - viewBinding.startNavigation.visibility = View.INVISIBLE - - startSimulation(route) - } - } - } - - // Starts the navigation simulator - private fun startSimulation(route: DirectionsRoute) { - mapboxReplayer.stop() - mapboxReplayer.clearEvents() - val replayData: List = replayRouteMapper.mapDirectionsRouteGeometry(route) - mapboxReplayer.pushEvents(replayData) - mapboxReplayer.seekTo(replayData[0]) - mapboxReplayer.play() - } - - override fun onStart() { - super.onStart() - mapboxNavigation.registerLocationObserver(locationObserver) - mapboxNavigation.registerRouteProgressObserver(replayProgressObserver) - mapboxNavigation.registerRouteProgressObserver(routeProgressObserver) - mapboxNavigation.registerRoutesObserver(routesObserver) - } - - override fun onStop() { - super.onStop() - mapboxNavigation.unregisterRouteProgressObserver(replayProgressObserver) - mapboxNavigation.unregisterRouteProgressObserver(routeProgressObserver) - mapboxNavigation.unregisterLocationObserver(locationObserver) - mapboxNavigation.unregisterRoutesObserver(routesObserver) - } - - override fun onDestroy() { - super.onDestroy() - routeLineApi.cancel() - routeLineView.cancel() - mapboxReplayer.finish() - mapboxNavigation.onDestroy() - } - - @SuppressLint("MissingPermission") - private fun initStyle() { - mapboxMap.loadStyleUri( - NavigationStyles.NAVIGATION_DAY_STYLE, - { style: Style -> - - // Hard coding a location and a route for this example. - val location = Location("").also { - it.latitude = 37.974972 - it.longitude = -122.523179 - } - val point = Point.fromLngLat(-122.523179, 37.974972) - val cameraOptions = CameraOptions.Builder().center(point).zoom(13.0).build() - mapboxMap.setCamera(cameraOptions) - navigationLocationProvider.changePosition( - location, - listOf(), - null, - null - ) - getRoute() - // - }, - - object : OnMapLoadErrorListener { - override fun onMapLoadError(eventData: MapLoadingErrorEventData) { - Log.e( - MultiLegRouteExampleActivity::class.java.simpleName, - "Error loading map - error type: " + - "${eventData.type}, message: ${eventData.message}" - ) - } - } - ) - } - - private fun getRoute() { - val routeOptions = RouteOptions.builder() - .applyDefaultNavigationOptions() - .applyLanguageAndVoiceUnitOptions(this) - .coordinatesList( - listOf( - Point.fromLngLat(-122.523179, 37.974972), - Point.fromLngLat(-122.524257, 37.970785), - Point.fromLngLat(-122.518925, 37.970548), - ) - ) - .alternatives(false) - .build() - mapboxNavigation.requestRoutes( - routeOptions, - routesReqCallback - ) - } - - private val routesReqCallback: RouterCallback = object : RouterCallback { - override fun onRoutesReady(routes: List, routerOrigin: RouterOrigin) { - mapboxNavigation.setRoutes(routes) - if (routes.isNotEmpty()) { - viewBinding.routeLoadingProgressBar.visibility = View.INVISIBLE - viewBinding.startNavigation.visibility = View.VISIBLE - } - } - - override fun onCanceled(routeOptions: RouteOptions, routerOrigin: RouterOrigin) { - viewBinding.routeLoadingProgressBar.visibility = View.INVISIBLE - } - - override fun onFailure(reasons: List, routeOptions: RouteOptions) { - viewBinding.routeLoadingProgressBar.visibility = View.INVISIBLE - } - } - - private fun updateCamera(location: Location) { - val mapAnimationOptionsBuilder = MapAnimationOptions.Builder() - mapCamera.easeTo( - CameraOptions.Builder() - .center(Point.fromLngLat(location.longitude, location.latitude)) - .bearing(location.bearing.toDouble()) - .pitch(45.0) - .zoom(17.0) - .padding(EdgeInsets(1000.0, 0.0, 0.0, 0.0)) - .build(), - mapAnimationOptionsBuilder.build() - ) - } - - private val replayProgressObserver = ReplayProgressObserver(mapboxReplayer) - - private val routeProgressObserver = RouteProgressObserver { routeProgress -> - - // This is the most important part of this example. The route progress will be used to - // determine the active leg and adjust the route line visibility accordingly. - routeLineApi.updateWithRouteProgress(routeProgress) { result -> - mapboxMap.getStyle()?.apply { - routeLineView.renderRouteLineUpdate(this, result) - } - } - - routeArrowApi.addUpcomingManeuverArrow(routeProgress).apply { - routeArrowView.renderManeuverUpdate(mapboxMap.getStyle()!!, this) - } - } - - private val routesObserver: RoutesObserver = RoutesObserver { result -> - val routeLines = result.routes.map { RouteLine(it, null) } - routeLineApi.setRoutes( - routeLines - ) { value -> - mapboxMap.getStyle()?.apply { - routeLineView.renderRouteDrawData(this, value) - } - } - } - - private fun getMapboxAccessTokenFromResources(): String { - return getString(this.resources.getIdentifier("mapbox_access_token", "string", packageName)) - } -} diff --git a/examples/src/main/java/com/mapbox/navigation/examples/core/ReplayHistoryActivity.kt b/examples/src/main/java/com/mapbox/navigation/examples/core/ReplayHistoryActivity.kt deleted file mode 100644 index aa4be51e3ed..00000000000 --- a/examples/src/main/java/com/mapbox/navigation/examples/core/ReplayHistoryActivity.kt +++ /dev/null @@ -1,354 +0,0 @@ -package com.mapbox.navigation.examples.core - -import android.annotation.SuppressLint -import android.content.Intent -import android.content.res.Configuration -import android.content.res.Resources -import android.location.Location -import android.os.Bundle -import android.widget.Button -import android.widget.SeekBar -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import androidx.lifecycle.lifecycleScope -import com.mapbox.maps.CameraOptions -import com.mapbox.maps.EdgeInsets -import com.mapbox.maps.extension.observable.eventdata.MapLoadingErrorEventData -import com.mapbox.maps.plugin.LocationPuck2D -import com.mapbox.maps.plugin.animation.camera -import com.mapbox.maps.plugin.delegates.listeners.OnMapLoadErrorListener -import com.mapbox.maps.plugin.locationcomponent.LocationComponentPlugin -import com.mapbox.maps.plugin.locationcomponent.OnIndicatorPositionChangedListener -import com.mapbox.maps.plugin.locationcomponent.location -import com.mapbox.navigation.base.ExperimentalPreviewMapboxNavigationAPI -import com.mapbox.navigation.base.options.NavigationOptions -import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.core.directions.session.RoutesObserver -import com.mapbox.navigation.core.replay.history.ReplayHistorySession -import com.mapbox.navigation.core.trip.session.LocationMatcherResult -import com.mapbox.navigation.core.trip.session.LocationObserver -import com.mapbox.navigation.core.trip.session.RouteProgressObserver -import com.mapbox.navigation.examples.core.databinding.ActivityReplayHistoryLayoutBinding -import com.mapbox.navigation.examples.core.replay.HistoryFileLoader -import com.mapbox.navigation.examples.core.replay.HistoryFilesActivity -import com.mapbox.navigation.examples.util.Utils -import com.mapbox.navigation.ui.maps.NavigationStyles -import com.mapbox.navigation.ui.maps.camera.NavigationCamera -import com.mapbox.navigation.ui.maps.camera.data.MapboxNavigationViewportDataSource -import com.mapbox.navigation.ui.maps.camera.transition.NavigationCameraTransitionOptions -import com.mapbox.navigation.ui.maps.location.NavigationLocationProvider -import com.mapbox.navigation.ui.maps.route.RouteLayerConstants -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowApi -import com.mapbox.navigation.ui.maps.route.arrow.api.MapboxRouteArrowView -import com.mapbox.navigation.ui.maps.route.arrow.model.RouteArrowOptions -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineApi -import com.mapbox.navigation.ui.maps.route.line.api.MapboxRouteLineView -import com.mapbox.navigation.ui.maps.route.line.model.MapboxRouteLineOptions -import com.mapbox.navigation.ui.maps.route.line.model.RouteLine -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineColorResources -import com.mapbox.navigation.ui.maps.route.line.model.RouteLineResources -import com.mapbox.navigation.utils.internal.logI -import kotlinx.coroutines.launch - -private const val DEFAULT_INITIAL_ZOOM = 15.0 - -@OptIn(ExperimentalPreviewMapboxNavigationAPI::class) -class ReplayHistoryActivity : AppCompatActivity() { - - private val navigationLocationProvider = NavigationLocationProvider() - private lateinit var historyFileLoader: HistoryFileLoader - private lateinit var mapboxNavigation: MapboxNavigation - private lateinit var locationComponent: LocationComponentPlugin - private lateinit var navigationCamera: NavigationCamera - private lateinit var viewportDataSource: MapboxNavigationViewportDataSource - private lateinit var binding: ActivityReplayHistoryLayoutBinding - private var isLocationInitialized = false - private val pixelDensity = Resources.getSystem().displayMetrics.density - private val overviewPadding: EdgeInsets by lazy { - EdgeInsets( - 140.0 * pixelDensity, - 40.0 * pixelDensity, - 120.0 * pixelDensity, - 40.0 * pixelDensity - ) - } - private val landscapeOverviewPadding: EdgeInsets by lazy { - EdgeInsets( - 30.0 * pixelDensity, - 380.0 * pixelDensity, - 20.0 * pixelDensity, - 20.0 * pixelDensity - ) - } - private val followingPadding: EdgeInsets by lazy { - EdgeInsets( - 180.0 * pixelDensity, - 40.0 * pixelDensity, - 150.0 * pixelDensity, - 40.0 * pixelDensity - ) - } - private val landscapeFollowingPadding: EdgeInsets by lazy { - EdgeInsets( - 30.0 * pixelDensity, - 380.0 * pixelDensity, - 110.0 * pixelDensity, - 40.0 * pixelDensity - ) - } - private val replayHistorySession = ReplayHistorySession() - - private val initialCameraOptions: CameraOptions? = CameraOptions.Builder() - .zoom(DEFAULT_INITIAL_ZOOM) - .build() - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - binding = ActivityReplayHistoryLayoutBinding.inflate(layoutInflater) - val view = binding.root - setContentView(view) - - initNavigation() - handleHistoryFileSelected() - initMapStyle() - - findViewById