diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6ec8ca3..f4665ed 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,8 +14,8 @@ android { applicationId = "com.kouros.navigation" minSdk = 33 targetSdk = 36 - versionCode = 38 - versionName = "0.2.0.38" + versionCode = 42 + versionName = "0.2.0.42" base.archivesName = "navi-$versionName" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/com/kouros/navigation/MainApplication.kt b/app/src/main/java/com/kouros/navigation/MainApplication.kt index bad399b..ac8694c 100644 --- a/app/src/main/java/com/kouros/navigation/MainApplication.kt +++ b/app/src/main/java/com/kouros/navigation/MainApplication.kt @@ -4,7 +4,7 @@ import android.app.Application import android.content.Context import com.kouros.navigation.data.ObjectBox import com.kouros.navigation.di.appModule -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel import com.kouros.navigation.utils.NavigationUtils.getViewModel import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger @@ -15,7 +15,7 @@ class MainApplication : Application() { override fun onCreate() { super.onCreate() - ObjectBox.init(this); + ObjectBox.init(this) appContext = applicationContext navigationViewModel = getViewModel(appContext!!) startKoin { @@ -30,6 +30,6 @@ class MainApplication : Application() { var appContext: Context? = null private set - lateinit var navigationViewModel : ViewModel + lateinit var navigationViewModel : NavigationViewModel } } \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/di/appModule.kt b/app/src/main/java/com/kouros/navigation/di/appModule.kt index f8047cb..ebb9c09 100644 --- a/app/src/main/java/com/kouros/navigation/di/appModule.kt +++ b/app/src/main/java/com/kouros/navigation/di/appModule.kt @@ -1,18 +1,19 @@ package com.kouros.navigation.di -import com.kouros.navigation.data.NavigationRepository import com.kouros.navigation.data.osrm.OsrmRepository import com.kouros.navigation.data.tomtom.TomTomRepository import com.kouros.navigation.data.valhalla.ValhallaRepository -import com.kouros.navigation.model.BaseStyleModel -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel +import com.kouros.navigation.model.SettingsViewModel +import com.kouros.navigation.repository.SettingsRepository import org.koin.core.module.dsl.singleOf +import org.koin.core.module.dsl.viewModel import org.koin.core.module.dsl.viewModelOf import org.koin.dsl.module -import kotlin.math.sin val appModule = module { - viewModelOf(::ViewModel) + viewModelOf(::NavigationViewModel) + viewModelOf(::SettingsViewModel) singleOf(::ValhallaRepository) singleOf(::OsrmRepository) singleOf(::TomTomRepository) diff --git a/app/src/main/java/com/kouros/navigation/ui/MainActivity.kt b/app/src/main/java/com/kouros/navigation/ui/MainActivity.kt index 7ba1186..2a97729 100644 --- a/app/src/main/java/com/kouros/navigation/ui/MainActivity.kt +++ b/app/src/main/java/com/kouros/navigation/ui/MainActivity.kt @@ -43,26 +43,27 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.lifecycle.MutableLiveData import androidx.lifecycle.Observer +import androidx.lifecycle.lifecycleScope import androidx.navigation.NavController import androidx.navigation.NavHostController -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationServices import com.kouros.data.R import com.kouros.navigation.MainApplication.Companion.navigationViewModel -import com.kouros.navigation.data.Constants import com.kouros.navigation.data.Constants.DESTINATION_ARRIVAL_DISTANCE import com.kouros.navigation.data.Constants.homeVogelhart import com.kouros.navigation.data.StepData +import com.kouros.navigation.data.datastore.DataStoreManager import com.kouros.navigation.model.BaseStyleModel import com.kouros.navigation.model.MockLocation import com.kouros.navigation.model.RouteModel +import com.kouros.navigation.repository.SettingsRepository +import com.kouros.navigation.ui.app.AppViewModel +import com.kouros.navigation.ui.app.appViewModel +import com.kouros.navigation.ui.navigation.AppNavGraph import com.kouros.navigation.ui.theme.NavigationTheme -import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue import com.kouros.navigation.utils.bearing -import com.kouros.navigation.utils.calculateZoom +import com.kouros.navigation.utils.getSettingsViewModel import com.kouros.navigation.utils.location import io.ticofab.androidgpxparser.parser.GPXParser import io.ticofab.androidgpxparser.parser.domain.Gpx @@ -70,7 +71,9 @@ import io.ticofab.androidgpxparser.parser.domain.TrackSegment import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import org.joda.time.DateTime import org.maplibre.compose.camera.CameraPosition import org.maplibre.compose.location.DesiredAccuracy @@ -83,12 +86,13 @@ import kotlin.time.Duration.Companion.seconds class MainActivity : ComponentActivity() { + val routeData = MutableLiveData("") val routeModel = RouteModel() var tilt = 50.0 - val useMock = false - val type = 3 // simulate 2 test 3 gpx 4 testSingle + val useMock = true + val type = 3 // 1 simulate 2 test 3 gpx 4 testSingle var currentIndex = 0 val stepData: MutableLiveData by lazy { @@ -134,8 +138,7 @@ class MainActivity : ComponentActivity() { @RequiresPermission(allOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION]) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - val darkModeSettings = getIntKeyValue(applicationContext, Constants.DARK_MODE_SETTINGS) - baseStyle = BaseStyleModel().readStyle(applicationContext, darkModeSettings, false) + if (useMock) { checkMockLocationEnabled() } @@ -150,6 +153,11 @@ class MainActivity : ComponentActivity() { navigationViewModel.route.observe(this, observer) } } + lifecycleScope.launch { + getSettingsViewModel(applicationContext).routingEngine.collect { + + } + } enableEdgeToEdge() setContent { CheckPermissionScreen() @@ -186,9 +194,13 @@ class MainActivity : ComponentActivity() { @Composable fun StartScreen( navController: NavHostController - ) { + val appViewModel: AppViewModel = appViewModel() + val darkMode by appViewModel.darkMode.collectAsState() + + baseStyle = BaseStyleModel().readStyle(applicationContext, darkMode, darkMode == 1) + val scaffoldState = rememberBottomSheetScaffoldState() val snackbarHostState = remember { SnackbarHostState() } val scope = rememberCoroutineScope() @@ -212,7 +224,7 @@ class MainActivity : ComponentActivity() { sheetPeekHeightState.value = 128.dp } } - NavigationTheme { + NavigationTheme (useDarkTheme = darkMode == 1) { BottomSheetScaffold( snackbarHost = { SnackbarHost(hostState = snackbarHostState) @@ -249,13 +261,12 @@ class MainActivity : ComponentActivity() { @Composable fun App() { - val navController = rememberNavController() - NavHost(navController = navController, startDestination = "startScreen") { - composable("startScreen") { StartScreen(navController) } - composable("settings") { SettingsScreen(navController) { navController.popBackStack() } } - composable("display_settings") { DisplayScreenSettings(applicationContext) { navController.popBackStack() } } - composable("nav_settings") { NavigationScreenSettings(applicationContext) { navController.popBackStack() } } - } + //val lastRoute = NavigationUtils.getStringKeyValue(applicationContext, Constants.LAST_ROUTE) + //if (lastRoute!!.isNotEmpty()) { + // routeModel.startNavigation(lastRoute, applicationContext) + // routeData.value = routeModel.curRoute.routeGeoJson + //} + AppNavGraph(applicationContext = applicationContext, this) } @Composable @@ -285,13 +296,15 @@ class MainActivity : ComponentActivity() { if (!routeModel.isNavigating()) { SearchSheet(applicationContext, navigationViewModel, lastLocation) { closeSheet() } } else { - NavigationSheet( - applicationContext, - routeModel, - step!!, - nextStep!!, - { stopNavigation { closeSheet() } }, - { simulateNavigation() }) + if (step != null && nextStep != null) { + NavigationSheet( + applicationContext, + routeModel, + step, + nextStep, + { stopNavigation { closeSheet() } }, + { simulateNavigation() }) + } } // For recomposition! Text("$locationState", fontSize = 12.sp) @@ -303,17 +316,18 @@ class MainActivity : ComponentActivity() { val bearing = bearing(lastLocation, currentLocation, cameraPosition.value!!.bearing) with(routeModel) { if (isNavigating()) { - updateLocation(currentLocation, navigationViewModel) + updateLocation(applicationContext,currentLocation, navigationViewModel) stepData.value = currentStep() nextStepData.value = nextStep() if (navState.maneuverType in 39..42 && routeCalculator.leftStepDistance() < DESTINATION_ARRIVAL_DISTANCE) { // stopNavigation() - navState.copy(arrived = true) + navState = navState.copy(arrived = true) routeData.value = "" } } } - val zoom = calculateZoom(location.speed) + //val zoom = calculateZoom(location.speed) + val zoom = 16.0 cameraPosition.postValue( cameraPosition.value!!.copy( zoom = zoom, target = location.position, bearing = bearing @@ -331,7 +345,7 @@ class MainActivity : ComponentActivity() { val latitude = routeModel.curRoute.waypoints[0][1] val longitude = routeModel.curRoute.waypoints[0][0] closeSheet() - routeModel.stopNavigation() + routeModel.stopNavigation(applicationContext) if (useMock) { mock.setMockLocation(latitude, longitude) } @@ -370,7 +384,7 @@ class MainActivity : ComponentActivity() { val deviation = 0.0 if (index in 0..routeModel.curRoute.waypoints.size) { mock.setMockLocation(waypoint[1], waypoint[0]) - Thread.sleep(500) + Thread.sleep(1000) } } } @@ -381,7 +395,7 @@ class MainActivity : ComponentActivity() { for ((index, step) in routeModel.curLeg.steps.withIndex()) { //if (index in 3..3) { for ((windex, waypoint) in step.maneuver.waypoints.withIndex()) { - routeModel.updateLocation( + routeModel.updateLocation(applicationContext, location(waypoint[0], waypoint[1]), navigationViewModel ) val step = routeModel.currentStep() @@ -402,7 +416,7 @@ class MainActivity : ComponentActivity() { if (1 == 1) { mock.setMockLocation(latitude, longitude) } else { - routeModel.updateLocation( + routeModel.updateLocation(applicationContext, location(longitude, latitude), navigationViewModel ) } diff --git a/app/src/main/java/com/kouros/navigation/ui/MapView.kt b/app/src/main/java/com/kouros/navigation/ui/MapView.kt index 6b79535..822d3fc 100644 --- a/app/src/main/java/com/kouros/navigation/ui/MapView.kt +++ b/app/src/main/java/com/kouros/navigation/ui/MapView.kt @@ -5,18 +5,24 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.unit.dp import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.compose.viewModel import androidx.window.layout.WindowMetricsCalculator import com.kouros.navigation.car.ViewStyle import com.kouros.navigation.car.map.MapLibre import com.kouros.navigation.car.map.NavigationImage import com.kouros.navigation.car.map.rememberBaseStyle import com.kouros.navigation.data.StepData -import com.kouros.navigation.data.tomtom.TrafficData +import com.kouros.navigation.ui.app.AppViewModel +import com.kouros.navigation.ui.app.appViewModel import org.maplibre.compose.camera.CameraPosition import org.maplibre.compose.camera.rememberCameraState import org.maplibre.compose.location.LocationTrackingEffect @@ -57,7 +63,11 @@ fun MapView( ) ) - val rememberBaseStyle = rememberBaseStyle( baseStyle) + val rememberBaseStyle = rememberBaseStyle(baseStyle) + + val appViewModel: AppViewModel = appViewModel() + val showBuildings by appViewModel.threedBuilding.collectAsState() + Column { NavigationInfo(step, nextStep) Box(contentAlignment = Alignment.Center) { @@ -67,7 +77,9 @@ fun MapView( rememberBaseStyle, route, emptyMap(), - ViewStyle.VIEW + ViewStyle.VIEW, + speedCameras = "", + showBuildings ) LocationTrackingEffect( locationState = userLocationState, @@ -87,6 +99,3 @@ fun MapView( } } } - - - diff --git a/app/src/main/java/com/kouros/navigation/ui/NavigationScreen.kt b/app/src/main/java/com/kouros/navigation/ui/NavigationScreen.kt index d67894e..abeb3c7 100644 --- a/app/src/main/java/com/kouros/navigation/ui/NavigationScreen.kt +++ b/app/src/main/java/com/kouros/navigation/ui/NavigationScreen.kt @@ -2,10 +2,15 @@ package com.kouros.navigation.ui import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ElevatedCard import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -17,39 +22,43 @@ import com.kouros.data.R import com.kouros.navigation.data.StepData import com.kouros.navigation.utils.round + @Composable fun NavigationInfo(step: StepData?, nextStep: StepData?) { if (step != null && step.instruction.isNotEmpty()) { - Card(modifier = Modifier.padding(top = 60.dp)) { - Column() { + ElevatedCard( + elevation = CardDefaults.cardElevation( + defaultElevation = 6.dp + + ), modifier = Modifier + .padding(top = 60.dp) + .fillMaxWidth() + ) { + Column { + Icon( + painter = painterResource(step.icon), + contentDescription = stringResource(id = R.string.accept_action_title), + modifier = Modifier.size(48.dp, 48.dp), + ) + if (step.currentManeuverType == 46 + || step.currentManeuverType == 45 + ) { + Text(text = "Exit ${step.exitNumber}", fontSize = 18.sp) + } Row { - Icon( - painter = painterResource(step.icon), - contentDescription = stringResource(id = R.string.accept_action_title), - modifier = Modifier.size(48.dp, 48.dp), - ) - if (step.currentManeuverType == 46 - || step.currentManeuverType == 45) { - Text(text ="Exit ${step.exitNumber}", fontSize = 20.sp) - } - Column { - if (step.leftStepDistance < 1000) { - Text(text = "${step.leftStepDistance.toInt()} m", fontSize = 25.sp) - } else { - Text( - text = "${(step.leftStepDistance / 1000).round(1)} km", - fontSize = 25.sp - ) - } - Text(text = step.instruction, fontSize = 20.sp) - } - if (nextStep != null && step.icon != nextStep.icon) { - Icon( - painter = painterResource(nextStep.icon), - contentDescription = stringResource(id = R.string.accept_action_title), - modifier = Modifier.size(48.dp, 48.dp), + if (step.leftStepDistance < 1000) { + Text(text = "${step.leftStepDistance.toInt()} m", fontSize = 24.sp, color = MaterialTheme.colorScheme.primary) + } else { + Text( + text = "${(step.leftStepDistance / 1000).round(1)} km", + fontSize = 24.sp, + color = MaterialTheme.colorScheme.primary ) } + Spacer( + modifier = Modifier.padding(5.dp) + ) + Text(text = step.instruction, fontSize = 24.sp, color = MaterialTheme.colorScheme.primary) } } } diff --git a/app/src/main/java/com/kouros/navigation/ui/NavigationSheet.kt b/app/src/main/java/com/kouros/navigation/ui/NavigationSheet.kt index 798925a..193981a 100755 --- a/app/src/main/java/com/kouros/navigation/ui/NavigationSheet.kt +++ b/app/src/main/java/com/kouros/navigation/ui/NavigationSheet.kt @@ -34,7 +34,7 @@ fun NavigationSheet( val distance = (step.leftDistance / 1000).round(1) if (step.lane.isNotEmpty()) { - routeModel.navState.iconMapper.addLanes( step) + // routeModel.navState.iconMapper.addLanes( step) } Column { diff --git a/app/src/main/java/com/kouros/navigation/ui/SearchSheet.kt b/app/src/main/java/com/kouros/navigation/ui/SearchSheet.kt index e0e137b..a6a50ed 100644 --- a/app/src/main/java/com/kouros/navigation/ui/SearchSheet.kt +++ b/app/src/main/java/com/kouros/navigation/ui/SearchSheet.kt @@ -4,10 +4,8 @@ import android.content.Context import android.location.Location import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -29,25 +27,21 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource -import androidx.compose.ui.semantics.isTraversalGroup -import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.semantics.traversalIndex import androidx.compose.ui.unit.dp import com.kouros.data.R import com.kouros.navigation.data.Place import com.kouros.navigation.data.PlaceColor import com.kouros.navigation.data.nominatim.SearchResult -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel import com.kouros.navigation.utils.location @Composable fun SearchSheet( applicationContext: Context, - viewModel: ViewModel, + viewModel: NavigationViewModel, location: Location, closeSheet: () -> Unit ) { @@ -88,7 +82,7 @@ fun SearchSheet( @Composable fun Home( applicationContext: Context, - viewModel: ViewModel, + viewModel: NavigationViewModel, location: Location, closeSheet: () -> Unit ) { @@ -125,7 +119,7 @@ fun SearchBar( searchPlaces: List, searchResults: List, modifier: Modifier = Modifier, - viewModel: ViewModel, + viewModel: NavigationViewModel, context: Context, location: Location, closeSheet: () -> Unit @@ -166,14 +160,14 @@ fun SearchBar( } } -private fun searchPlaces(viewModel: ViewModel, location: Location, it: String) { +private fun searchPlaces(viewModel: NavigationViewModel, location: Location, it: String) { viewModel.searchPlaces(it, location) } @Composable private fun SearchPlaces( searchResults: List, - viewModel: ViewModel, + viewModel: NavigationViewModel, context: Context, location: Location, closeSheet: () -> Unit @@ -222,7 +216,7 @@ private fun SearchPlaces( @Composable private fun RecentPlaces( recentPlaces: List, - viewModel: ViewModel, + viewModel: NavigationViewModel, context: Context, location: Location, closeSheet: () -> Unit diff --git a/app/src/main/java/com/kouros/navigation/ui/SettingsScreen.kt b/app/src/main/java/com/kouros/navigation/ui/SettingsScreen.kt index 33b151c..926bd73 100644 --- a/app/src/main/java/com/kouros/navigation/ui/SettingsScreen.kt +++ b/app/src/main/java/com/kouros/navigation/ui/SettingsScreen.kt @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Button import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @@ -19,7 +20,6 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController -import com.alorma.compose.settings.ui.SettingsMenuLink import com.kouros.data.R @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @@ -53,34 +53,16 @@ fun SettingsScreen(navController: NavHostController, navigateBack: () -> Unit) { .verticalScroll(scrollState) .padding(top = padding.calculateTopPadding()), ) { - SettingsMenuLink( - title = { Text(text = stringResource(R.string.display_settings)) }, - modifier = Modifier, - enabled = true, - onClick = { navController.navigate("display_settings")}, - icon = { - Icon( - painter = painterResource(R.drawable.ic_place_white_24dp), - contentDescription = stringResource(id = R.string.display_settings), - modifier = Modifier.size(48.dp, 48.dp), - ) + Column(modifier = Modifier.padding(16.dp)) { + + Button(onClick = { navController.navigate("display_settings") }) { + Text(stringResource(R.string.display_settings)) } - ) - SettingsMenuLink( - title = { Text(text = stringResource(R.string.navigation_settings)) }, - modifier = Modifier, - enabled = true, - onClick = { navController.navigate("nav_settings")}, - icon = { - Icon( - painter = painterResource(R.drawable.navigation_24px), - contentDescription = stringResource(id = R.string.navigation_settings), - modifier = Modifier.size(48.dp, 48.dp), - ) + Button(onClick = { navController.navigate("nav_settings") }) { + Text(stringResource(R.string.navigation_settings)) } - ) + } } } } - diff --git a/app/src/main/java/com/kouros/navigation/ui/app/AppViewModel.kt b/app/src/main/java/com/kouros/navigation/ui/app/AppViewModel.kt new file mode 100644 index 0000000..8f30888 --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/app/AppViewModel.kt @@ -0,0 +1,27 @@ +package com.kouros.navigation.ui.app + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.kouros.navigation.repository.SettingsRepository +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.stateIn + + +class AppViewModel( + settingsRepository: SettingsRepository +) : ViewModel() { + + val darkMode = settingsRepository.darkModeFlow + .stateIn( + viewModelScope, + SharingStarted.Eagerly, + 0 + ) + + val threedBuilding = settingsRepository.threedBuildingFlow + .stateIn( + viewModelScope, + SharingStarted.Eagerly, + false + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/ui/app/AppViewModelProvider.kt b/app/src/main/java/com/kouros/navigation/ui/app/AppViewModelProvider.kt new file mode 100644 index 0000000..29dcff5 --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/app/AppViewModelProvider.kt @@ -0,0 +1,29 @@ +package com.kouros.navigation.ui.app + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.compose.viewModel +import com.kouros.navigation.data.datastore.DataStoreManager +import com.kouros.navigation.repository.SettingsRepository + + +@Composable +fun appViewModel(): AppViewModel { + + val context = LocalContext.current + + val dataStoreManager = remember { DataStoreManager(context) } + val repository = remember { SettingsRepository(dataStoreManager) } + + return viewModel( + factory = object : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + @Suppress("UNCHECKED_CAST") + return AppViewModel(repository) as T + } + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/ui/components/RadioButtonSingleSelection.kt b/app/src/main/java/com/kouros/navigation/ui/components/RadioButtonSingleSelection.kt new file mode 100644 index 0000000..0c1e8ab --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/components/RadioButtonSingleSelection.kt @@ -0,0 +1,59 @@ +package com.kouros.navigation.ui.components + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.selection.selectable +import androidx.compose.foundation.selection.selectableGroup +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.RadioButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.unit.dp + + +@Composable +fun RadioButtonSingleSelection( + modifier: Modifier = Modifier, + selectedOption: Int, + radioOptions: List, + onClick: (Int) -> Unit, +) { + Column(modifier.selectableGroup()) { + for ((index, text) in radioOptions.withIndex()) { + Row( + Modifier + .fillMaxWidth() + .height(56.dp) + .selectable( + selected = (index == selectedOption), + onClick = { + onClick(index) + }, + role = Role.RadioButton + ) + .padding(horizontal = 16.dp), + verticalAlignment = Alignment.CenterVertically + ) { + RadioButton( + selected = (index == selectedOption), + onClick = null + ) + Text( + text = text, + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier.padding(start = 16.dp) + ) + } + } + } +} + diff --git a/app/src/main/java/com/kouros/navigation/ui/components/SectionTitle.kt b/app/src/main/java/com/kouros/navigation/ui/components/SectionTitle.kt new file mode 100644 index 0000000..eccdec7 --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/components/SectionTitle.kt @@ -0,0 +1,17 @@ +package com.kouros.navigation.ui.components + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun SectionTitle(title: String) { + Text( + text = title, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(top = 24.dp, bottom = 8.dp) + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/ui/components/SettingItem.kt b/app/src/main/java/com/kouros/navigation/ui/components/SettingItem.kt new file mode 100644 index 0000000..ba8edec --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/components/SettingItem.kt @@ -0,0 +1,29 @@ +package com.kouros.navigation.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun SettingItem( + title: String, + value: String? = null +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 12.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = title) + value?.let { + Text(text = it, color = MaterialTheme.colorScheme.primary) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/ui/components/SettingSwitch.kt b/app/src/main/java/com/kouros/navigation/ui/components/SettingSwitch.kt new file mode 100644 index 0000000..56e75ca --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/components/SettingSwitch.kt @@ -0,0 +1,37 @@ +package com.kouros.navigation.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp + +@Composable +fun SettingSwitch( + title: String, + checked: Boolean, + onCheckedChange: (Boolean) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 12.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text(text = title) + Switch( + checked = checked, + onCheckedChange = onCheckedChange, + colors = SwitchDefaults.colors( + checkedThumbColor = Color.White, + uncheckedThumbColor = Color.White + ) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/ui/components/ThemeColorPicker.kt b/app/src/main/java/com/kouros/navigation/ui/components/ThemeColorPicker.kt new file mode 100644 index 0000000..0ca8354 --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/components/ThemeColorPicker.kt @@ -0,0 +1,52 @@ +package com.kouros.navigation.ui.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.kouros.navigation.data.NavigationThemeColor + +@Composable +fun ThemeColorPicker( + selectedColor: Long, + onColorSelected: (Long) -> Unit +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + NavigationThemeColor.entries.forEach { themeColor -> + + val isSelected = selectedColor == themeColor.color + + Box( + modifier = Modifier + .size(36.dp) + .clip(CircleShape) + .background(Color(themeColor.color)) + .border( + width = if (isSelected) 3.dp else 0.dp, + color = if (isSelected) MaterialTheme.colorScheme.onSurface else Color.Transparent, + shape = CircleShape + ) + .clickable { + onColorSelected(themeColor.color) + } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/kouros/navigation/ui/navigation/AppNavGraph.kt b/app/src/main/java/com/kouros/navigation/ui/navigation/AppNavGraph.kt new file mode 100644 index 0000000..7657e69 --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/navigation/AppNavGraph.kt @@ -0,0 +1,34 @@ +package com.kouros.navigation.ui.navigation + +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.kouros.navigation.ui.MainActivity +import com.kouros.navigation.ui.settings.NavigationScreenSettings +import com.kouros.navigation.ui.SettingsScreen +import com.kouros.navigation.ui.settings.DisplaySettings +import com.kouros.navigation.ui.settings.SettingsRoute + + +@Composable +fun AppNavGraph(applicationContext: Context, mainActivity: MainActivity) { + + val navController = rememberNavController() + NavHost(navController = navController, startDestination = "startScreen") { + composable("startScreen") { mainActivity.StartScreen(navController) } + composable("settings") { SettingsScreen(navController) { navController.popBackStack() } } + composable("settingsxx") { + SettingsRoute("display_settings", navController) { navController.popBackStack() } + } + // old + //composable("display_settings") { DisplaySettings(applicationContext) { navController.popBackStack() } } + //composable("nav_settings") { NavigationScreenSettings(applicationContext) { navController.popBackStack() } } + + // new + composable("display_settings") { SettingsRoute("display_settings", navController) { navController.popBackStack() } } + composable("nav_settings") { SettingsRoute("nav_settings", navController) { navController.popBackStack() } } + + } +} diff --git a/app/src/main/java/com/kouros/navigation/ui/DisplayScreenSettings.kt b/app/src/main/java/com/kouros/navigation/ui/settings/DisplaySettings.kt similarity index 86% rename from app/src/main/java/com/kouros/navigation/ui/DisplayScreenSettings.kt rename to app/src/main/java/com/kouros/navigation/ui/settings/DisplaySettings.kt index 7aaa75f..9e6bd30 100644 --- a/app/src/main/java/com/kouros/navigation/ui/DisplayScreenSettings.kt +++ b/app/src/main/java/com/kouros/navigation/ui/settings/DisplaySettings.kt @@ -1,4 +1,4 @@ -package com.kouros.navigation.ui +package com.kouros.navigation.ui.settings import android.content.Context import androidx.compose.foundation.layout.Arrangement @@ -32,13 +32,11 @@ import com.alorma.compose.settings.ui.SettingsRadioButton import com.alorma.compose.settings.ui.base.internal.LocalSettingsTileColors import com.alorma.compose.settings.ui.base.internal.SettingsTileDefaults import com.kouros.data.R -import com.kouros.navigation.data.Constants.DARK_MODE_SETTINGS -import com.kouros.navigation.data.Constants.SHOW_THREED_BUILDING -import com.kouros.navigation.utils.NavigationUtils +import com.kouros.navigation.utils.getSettingsViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable -fun DisplayScreenSettings(context: Context, navigateBack: () -> Unit) { +fun DisplaySettings(context: Context, navigateBack: () -> Unit) { Scaffold( topBar = { CenterAlignedTopAppBar( @@ -75,13 +73,11 @@ fun DisplayScreenSettings(context: Context, navigateBack: () -> Unit) { @Composable private fun DisplaySettings(context: Context) { + val settingsViewModel = getSettingsViewModel(context) Section(title = "Anzeige") { val state = remember { mutableStateOf( - NavigationUtils.getBooleanKeyValue( - context, - SHOW_THREED_BUILDING - ) + settingsViewModel.threedBuilding.value ) } SettingsCheckbox( @@ -89,17 +85,14 @@ private fun DisplaySettings(context: Context) { title = { Text(text = stringResource(R.string.threed_building)) }, onCheckedChange = { state.value = it - NavigationUtils.setBooleanKeyValue(context, it, SHOW_THREED_BUILDING) + settingsViewModel.onThreedBuildingChanged(it) }, ) } Section(title = "Dunkles Design") { val state = remember { mutableIntStateOf( - NavigationUtils.getIntKeyValue( - context, - DARK_MODE_SETTINGS - ) + settingsViewModel.darkMode.value ) } DarkModeData(context).darkDesign.forEach { sampleItem -> @@ -108,7 +101,7 @@ private fun DisplaySettings(context: Context) { title = { Text(text = sampleItem.title) }, onClick = { state.intValue = sampleItem.key - NavigationUtils.setIntKeyValue(context, state.intValue, DARK_MODE_SETTINGS) + settingsViewModel.onDarkModeChanged(state.intValue) }, ) } diff --git a/app/src/main/java/com/kouros/navigation/ui/NavigationScreenSettings.kt b/app/src/main/java/com/kouros/navigation/ui/settings/NavigationScreenSettings.kt similarity index 82% rename from app/src/main/java/com/kouros/navigation/ui/NavigationScreenSettings.kt rename to app/src/main/java/com/kouros/navigation/ui/settings/NavigationScreenSettings.kt index f2ec4cb..7867917 100644 --- a/app/src/main/java/com/kouros/navigation/ui/NavigationScreenSettings.kt +++ b/app/src/main/java/com/kouros/navigation/ui/settings/NavigationScreenSettings.kt @@ -1,4 +1,4 @@ -package com.kouros.navigation.ui +package com.kouros.navigation.ui.settings import android.content.Context import androidx.compose.foundation.layout.Column @@ -25,10 +25,10 @@ import com.alorma.compose.settings.ui.SettingsCheckbox import com.alorma.compose.settings.ui.SettingsRadioButton import com.kouros.data.R import com.kouros.navigation.data.Constants -import com.kouros.navigation.data.Constants.DARK_MODE_SETTINGS import com.kouros.navigation.data.Constants.ROUTING_ENGINE import com.kouros.navigation.data.RouteEngine import com.kouros.navigation.utils.NavigationUtils +import com.kouros.navigation.utils.getSettingsViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -68,13 +68,11 @@ fun NavigationScreenSettings(context: Context, navigateBack: () -> Unit) { @Composable private fun NavigationSettings(context: Context) { + val settingsViewModel = getSettingsViewModel(context) Section(title = stringResource(id = R.string.options)) { val avoidMotorwayState = remember { mutableStateOf( - NavigationUtils.getBooleanKeyValue( - context, - Constants.AVOID_MOTORWAY - ) + settingsViewModel.avoidMotorway.value ) } SettingsCheckbox( @@ -82,16 +80,13 @@ private fun NavigationSettings(context: Context) { title = { Text(text = stringResource(id = R.string.avoid_highways_row_title)) }, onCheckedChange = { avoidMotorwayState.value = it - NavigationUtils.setBooleanKeyValue(context, it, Constants.AVOID_MOTORWAY) + settingsViewModel.onAvoidMotorway(it) }, ) val avoidTollwayState = remember { mutableStateOf( - NavigationUtils.getBooleanKeyValue( - context, - Constants.AVOID_TOLLWAY - ) + settingsViewModel.avoidTollway.value ) } SettingsCheckbox( @@ -99,16 +94,13 @@ private fun NavigationSettings(context: Context) { title = { Text(text = stringResource(id = R.string.avoid_tolls_row_title)) }, onCheckedChange = { avoidTollwayState.value = it - NavigationUtils.setBooleanKeyValue(context, it, Constants.AVOID_TOLLWAY) + settingsViewModel.onAvoidTollway(it) }, ) val carLocationState = remember { mutableStateOf( - NavigationUtils.getBooleanKeyValue( - context, - Constants.CAR_LOCATION - ) + settingsViewModel.carLocation.value ) } SettingsCheckbox( @@ -116,7 +108,7 @@ private fun NavigationSettings(context: Context) { title = { Text(text = stringResource(id = R.string.use_car_location)) }, onCheckedChange = { carLocationState.value = it - NavigationUtils.setBooleanKeyValue(context, it, Constants.CAR_LOCATION) + settingsViewModel.onCarLocation(it) }, ) } @@ -124,10 +116,7 @@ private fun NavigationSettings(context: Context) { Section(title = stringResource(id = R.string.routing_engine)) { val state = remember { mutableIntStateOf( - NavigationUtils.getIntKeyValue( - context, - ROUTING_ENGINE - ) + settingsViewModel.routingEngine.value ) } RoutingEngineData.engines.forEach { sampleItem -> @@ -136,7 +125,7 @@ private fun NavigationSettings(context: Context) { title = { Text(text = sampleItem.title) }, onClick = { state.intValue = sampleItem.key - NavigationUtils.setIntKeyValue(context, state.intValue, ROUTING_ENGINE) + settingsViewModel.onRoutingEngineChanged(state.intValue) }, ) } diff --git a/app/src/main/java/com/kouros/navigation/ui/settings/SettingsRoute.kt b/app/src/main/java/com/kouros/navigation/ui/settings/SettingsRoute.kt new file mode 100644 index 0000000..c3fc435 --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/settings/SettingsRoute.kt @@ -0,0 +1,37 @@ +package com.kouros.navigation.ui.settings + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation.NavHostController +import com.kouros.navigation.data.datastore.DataStoreManager +import com.kouros.navigation.model.SettingsViewModel +import com.kouros.navigation.repository.SettingsRepository + +@Composable +fun SettingsRoute(route: String, navController: NavHostController, function: () -> Boolean) { + + val context = LocalContext.current + + val dataStoreManager = remember { DataStoreManager(context) } + val repository = remember { SettingsRepository(dataStoreManager) } + + val viewModel: SettingsViewModel = viewModel( + factory = object : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + @Suppress("UNCHECKED_CAST") + return SettingsViewModel(repository) as T + } + } + ) + if (route == "display_settings") { + SettingsScreen(viewModel = viewModel) + } + if (route == "nav_settings") { + SettingsScreen(viewModel = viewModel) + } + ///DisplaySettings(context, viewModel, navController.popBackStack()) +} diff --git a/app/src/main/java/com/kouros/navigation/ui/settings/SettingsScreen.kt b/app/src/main/java/com/kouros/navigation/ui/settings/SettingsScreen.kt new file mode 100644 index 0000000..6f26d1d --- /dev/null +++ b/app/src/main/java/com/kouros/navigation/ui/settings/SettingsScreen.kt @@ -0,0 +1,151 @@ +package com.kouros.navigation.ui.settings + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import com.kouros.data.R +import com.kouros.navigation.model.SettingsViewModel +import com.kouros.navigation.ui.components.RadioButtonSingleSelection +import com.kouros.navigation.ui.components.SectionTitle +import com.kouros.navigation.ui.components.SettingSwitch + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SettingsScreen(viewModel: SettingsViewModel) { + + val darkMode by viewModel.darkMode.collectAsState() + val threedBuilding by viewModel.threedBuilding.collectAsState() + val avoidMotorway by viewModel.avoidMotorway.collectAsState() + val avoidTollway by viewModel.avoidTollway.collectAsState() + val carLocation by viewModel.carLocation.collectAsState() + val routingEngine by viewModel.routingEngine.collectAsState() + + Scaffold( + topBar = { + CenterAlignedTopAppBar( + title = { + Text( + stringResource(id = R.string.display_settings), + ) + }, + navigationIcon = { +// IconButton(onClick = navigateBack) { +// Icon( +// painter = painterResource(R.drawable.arrow_back_24px), +// contentDescription = stringResource(id = R.string.accept_action_title), +// modifier = Modifier.size(48.dp, 48.dp), +// ) +// } + }, + ) + }, + ) + { padding -> + val scrollState = rememberScrollState() + Column( + modifier = Modifier + .fillMaxSize() + .padding(top = 20.dp) + .verticalScroll(scrollState) + ) { + + Text( + text = stringResource(R.string.settings_action_title), + style = MaterialTheme.typography.headlineMedium + ) + + Spacer(modifier = Modifier.height(24.dp)) + + // Appearance + SectionTitle(stringResource(R.string.threed_building)) + + SettingSwitch( + title = stringResource(R.string.threed_building), + checked = threedBuilding, + onCheckedChange = viewModel::onThreedBuildingChanged + ) + + SectionTitle(stringResource(R.string.dark_mode)) + + val radioOptions = listOf( + stringResource(R.string.off_action_title), + stringResource(R.string.on_action_title), + stringResource(R.string.use_telephon_settings) + ) + RadioButtonSingleSelection( + modifier = Modifier.padding(), + selectedOption = darkMode, + radioOptions = radioOptions, + onClick = viewModel::onDarkModeChanged + ) + + // Appearance + SectionTitle(stringResource(R.string.navigation_settings)) + + SettingSwitch( + title = stringResource(R.string.avoid_highways_row_title), + checked = avoidMotorway, + onCheckedChange = viewModel::onAvoidMotorway + ) + + SettingSwitch( + title = stringResource(R.string.avoid_tolls_row_title), + checked = avoidTollway, + onCheckedChange = viewModel::onAvoidTollway + ) + + SettingSwitch( + title = stringResource(R.string.use_car_location), + checked = carLocation, + onCheckedChange = viewModel::onCarLocation + ) + + SectionTitle(stringResource(R.string.routing_engine)) + + val routingEngineOptions = listOf( + stringResource(R.string.valhalla), + stringResource(R.string.osrm), + stringResource(R.string.tomtom) + ) + RadioButtonSingleSelection( + modifier = Modifier.padding(), + selectedOption = routingEngine, + radioOptions = routingEngineOptions, + onClick = viewModel::onRoutingEngineChanged + ) + } + } +} + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/kouros/navigation/ui/theme/Theme.kt b/app/src/main/java/com/kouros/navigation/ui/theme/Theme.kt index 20a2cfe..1319608 100644 --- a/app/src/main/java/com/kouros/navigation/ui/theme/Theme.kt +++ b/app/src/main/java/com/kouros/navigation/ui/theme/Theme.kt @@ -102,7 +102,7 @@ fun NavigationTheme( } MaterialTheme( - colorScheme = colorScheme, + colorScheme = if (useDarkTheme) darkColorScheme() else colorScheme, typography = typography, content = content, shapes = shapes, diff --git a/common/car/build.gradle.kts b/common/car/build.gradle.kts index 655b4c7..c865cac 100644 --- a/common/car/build.gradle.kts +++ b/common/car/build.gradle.kts @@ -56,6 +56,7 @@ dependencies { implementation(libs.androidx.material3) implementation(libs.androidx.compose.ui.text) implementation(libs.play.services.location) + implementation(libs.androidx.datastore.core) androidTestImplementation(libs.androidx.junit) testImplementation(libs.junit) } \ No newline at end of file diff --git a/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt b/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt index 7930831..7a09590 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/NavigationSession.kt @@ -2,6 +2,7 @@ package com.kouros.navigation.car import android.Manifest import android.annotation.SuppressLint +import android.app.Application import android.content.Context import android.content.Intent import android.content.pm.PackageManager @@ -26,6 +27,9 @@ import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ViewModelStore +import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.lifecycleScope import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.car.screen.NavigationScreen import com.kouros.navigation.car.screen.RequestPermissionScreen @@ -35,13 +39,20 @@ import com.kouros.navigation.data.Constants.MAXIMAL_ROUTE_DEVIATION import com.kouros.navigation.data.Constants.MAXIMAL_SNAP_CORRECTION import com.kouros.navigation.data.Constants.TAG import com.kouros.navigation.data.RouteEngine +import com.kouros.navigation.data.datastore.DataStoreManager import com.kouros.navigation.data.osrm.OsrmRepository import com.kouros.navigation.data.tomtom.TomTomRepository import com.kouros.navigation.data.valhalla.ValhallaRepository -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel import com.kouros.navigation.utils.GeoUtils.snapLocation -import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue import com.kouros.navigation.utils.NavigationUtils.getViewModel +import com.kouros.navigation.utils.getSettingsRepository +import com.kouros.navigation.utils.getSettingsViewModel +import kotlinx.coroutines.awaitCancellation +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking + class NavigationSession : Session(), NavigationScreen.Listener { @@ -54,7 +65,8 @@ class NavigationSession : Session(), NavigationScreen.Listener { lateinit var surfaceRenderer: SurfaceRenderer var mLocationListener: LocationListenerCompat = LocationListenerCompat { location: Location? -> - val useCarLocation = getBooleanKeyValue(carContext, CAR_LOCATION) + val repository = getSettingsRepository(carContext) + val useCarLocation = runBlocking { repository.carLocationFlow.first() } if (!useCarLocation) { updateLocation(location!!) } @@ -75,7 +87,8 @@ class NavigationSession : Session(), NavigationScreen.Listener { override fun onDestroy(owner: LifecycleOwner) { val carInfo = carContext.getCarService(CarHardwareManager::class.java).carInfo - val useCarLocation = getBooleanKeyValue(carContext, CAR_LOCATION) + val repository = getSettingsRepository(carContext) + val useCarLocation = runBlocking { repository.carLocationFlow.first() } if (useCarLocation) { val carSensors = carContext.getCarService(CarHardwareManager::class.java).carSensors carSensors.removeCarHardwareLocationListener(carLocationListener) @@ -88,8 +101,9 @@ class NavigationSession : Session(), NavigationScreen.Listener { } } - lateinit var navigationViewModel: ViewModel + lateinit var navigationViewModel: NavigationViewModel + lateinit var viewModelStoreOwner : ViewModelStoreOwner val carLocationListener: OnCarDataAvailableListener = OnCarDataAvailableListener { data -> if (data.location.status == CarValue.STATUS_SUCCESS) { @@ -123,22 +137,39 @@ class NavigationSession : Session(), NavigationScreen.Listener { fun onRoutingEngineStateUpdated(routeEngine : Int) { navigationViewModel = when (routeEngine) { - RouteEngine.VALHALLA.ordinal -> ViewModel(ValhallaRepository()) - RouteEngine.OSRM.ordinal -> ViewModel(OsrmRepository()) - else -> ViewModel(TomTomRepository()) + RouteEngine.VALHALLA.ordinal -> NavigationViewModel(ValhallaRepository()) + RouteEngine.OSRM.ordinal -> NavigationViewModel(OsrmRepository()) + else -> NavigationViewModel(TomTomRepository()) } } override fun onCreateScreen(intent: Intent): Screen { + viewModelStoreOwner = object : ViewModelStoreOwner { + override val viewModelStore = ViewModelStore() + } + lifecycleScope.launch { + try { + awaitCancellation() + } finally { + viewModelStoreOwner.viewModelStore.clear() + } + } + + // lifecycleScope.launch { + + + //} + + navigationViewModel = getViewModel(carContext) navigationViewModel.routingEngine.observe(this, ::onRoutingEngineStateUpdated) routeModel = RouteCarModel() - surfaceRenderer = SurfaceRenderer(carContext, lifecycle, routeModel) + surfaceRenderer = SurfaceRenderer(carContext, lifecycle, routeModel, viewModelStoreOwner) navigationScreen = NavigationScreen(carContext, surfaceRenderer, routeModel, this, navigationViewModel) @@ -175,7 +206,8 @@ class NavigationSession : Session(), NavigationScreen.Listener { fun addSensors() { val carInfo = carContext.getCarService(CarHardwareManager::class.java).carInfo - val useCarLocation = getBooleanKeyValue(carContext, CAR_LOCATION) + val repository = getSettingsRepository(carContext) + val useCarLocation = runBlocking { repository.carLocationFlow.first() } if (useCarLocation) { val carSensors = carContext.getCarService(CarHardwareManager::class.java).carSensors carSensors.addCompassListener(CarSensors.UPDATE_RATE_NORMAL, @@ -269,8 +301,8 @@ class NavigationSession : Session(), NavigationScreen.Listener { } } - override fun stopNavigation() { - routeModel.stopNavigation() + override fun stopNavigation(context: CarContext) { + routeModel.stopNavigation(context) } diff --git a/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt b/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt index 6dd882e..806021a 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/SurfaceRenderer.kt @@ -14,6 +14,7 @@ import androidx.car.app.connection.CarConnection import androidx.compose.foundation.layout.PaddingValues import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.platform.ComposeView @@ -21,6 +22,7 @@ import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModelStoreOwner import androidx.lifecycle.setViewTreeLifecycleOwner import androidx.savedstate.setViewTreeSavedStateRegistryOwner import com.kouros.navigation.car.map.DrawNavigationImages @@ -29,21 +31,23 @@ import com.kouros.navigation.car.map.cameraState import com.kouros.navigation.car.map.getPaddingValues import com.kouros.navigation.car.map.rememberBaseStyle import com.kouros.navigation.car.navigation.RouteCarModel -import com.kouros.navigation.data.Constants import com.kouros.navigation.data.Constants.ROUTING_ENGINE import com.kouros.navigation.data.Constants.homeVogelhart import com.kouros.navigation.data.ObjectBox import com.kouros.navigation.data.RouteEngine -import com.kouros.navigation.data.tomtom.TrafficData import com.kouros.navigation.model.BaseStyleModel import com.kouros.navigation.model.RouteModel -import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue import com.kouros.navigation.utils.bearing import com.kouros.navigation.utils.calculateTilt import com.kouros.navigation.utils.calculateZoom import com.kouros.navigation.utils.duration +import com.kouros.navigation.utils.getSettingsRepository +import com.kouros.navigation.utils.getSettingsViewModel import com.kouros.navigation.utils.location import com.kouros.navigation.utils.previewZoom +import com.kouros.navigation.utils.settingsViewModel +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking import org.maplibre.compose.camera.CameraPosition import org.maplibre.compose.camera.CameraState import org.maplibre.compose.style.BaseStyle @@ -52,7 +56,8 @@ import org.maplibre.spatialk.geojson.Position class SurfaceRenderer( private var carContext: CarContext, lifecycle: Lifecycle, - private var routeModel: RouteCarModel + private var routeModel: RouteCarModel, + private var viewModelStoreOwner: ViewModelStoreOwner ) : DefaultLifecycleObserver { var lastLocation = location(0.0, 0.0) @@ -187,9 +192,12 @@ class SurfaceRenderer( @Composable fun MapView() { - val darkMode = getIntKeyValue(carContext, Constants.DARK_MODE_SETTINGS) - val baseStyle = BaseStyleModel().readStyle(carContext, darkMode, carContext.isDarkMode) + //val appViewModel: AppViewModel = appViewModel(viewModelStoreOwner) + //val darkMode by appViewModel.darkMode.collectAsState() + val darkMode = settingsViewModel(carContext, viewModelStoreOwner).darkMode.collectAsState().value + + val baseStyle = BaseStyleModel().readStyle(carContext, darkMode, carContext.isDarkMode) val position: CameraPosition? by cameraPosition.observeAsState() val route: String? by routeData.observeAsState() val traffic: Map ? by trafficData.observeAsState() @@ -197,7 +205,17 @@ class SurfaceRenderer( val paddingValues = getPaddingValues(height, viewStyle) val cameraState = cameraState(paddingValues, position, tilt) val rememberBaseStyle = rememberBaseStyle(baseStyle) - MapLibre(carContext, cameraState, rememberBaseStyle, route, traffic, viewStyle, speedCameras) + + MapLibre( + carContext, + cameraState, + rememberBaseStyle, + route, + traffic, + viewStyle, + speedCameras, + false + ) ShowPosition(cameraState, position, paddingValues) } @@ -339,7 +357,8 @@ class SurfaceRenderer( } fun updateCarLocation(location: Location) { - val routingEngine = getIntKeyValue(carContext, ROUTING_ENGINE) + val repository = getSettingsRepository(carContext) + val routingEngine = runBlocking { repository.routingEngineFlow.first() } if (routingEngine == RouteEngine.OSRM.ordinal) { updateLocation(location) } diff --git a/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt b/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt index 6340255..96c97cb 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/map/MapView.kt @@ -26,15 +26,18 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.rememberTextMeasurer import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider import com.kouros.data.R import com.kouros.navigation.car.ViewStyle import com.kouros.navigation.data.Constants -import com.kouros.navigation.data.Constants.SHOW_THREED_BUILDING import com.kouros.navigation.data.NavigationColor import com.kouros.navigation.data.RouteColor import com.kouros.navigation.data.SpeedColor +import com.kouros.navigation.data.datastore.DataStoreManager import com.kouros.navigation.model.RouteModel -import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue +import com.kouros.navigation.model.SettingsViewModel +import com.kouros.navigation.repository.SettingsRepository import org.maplibre.compose.camera.CameraPosition import org.maplibre.compose.camera.CameraState import org.maplibre.compose.camera.rememberCameraState @@ -92,7 +95,8 @@ fun MapLibre( route: String?, traffic: Map?, viewStyle: ViewStyle, - speedCameras: String? = "" + speedCameras: String? = "", + showBuildings: Boolean ) { MaplibreMap( options = MapOptions( @@ -103,7 +107,7 @@ fun MapLibre( baseStyle = baseStyle ) { getBaseSource(id = "openmaptiles")?.let { tiles -> - if (!getBooleanKeyValue(context = context, SHOW_THREED_BUILDING)) { + if (!showBuildings) { BuildingLayer(tiles) } if (viewStyle == ViewStyle.AMENITY_VIEW) { @@ -553,3 +557,4 @@ fun PuckState(cameraState: CameraState, userLocationState: UserLocationState) { ) } + diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/CategoriesScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/CategoriesScreen.kt index eab6cd5..4bd3281 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/CategoriesScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/CategoriesScreen.kt @@ -1,6 +1,5 @@ package com.kouros.navigation.car.screen -import android.location.Location import androidx.car.app.CarContext import androidx.car.app.Screen import androidx.car.app.model.Action @@ -14,17 +13,16 @@ import androidx.core.graphics.drawable.IconCompat import com.kouros.data.R import com.kouros.navigation.car.SurfaceRenderer import com.kouros.navigation.car.ViewStyle -import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.data.Category import com.kouros.navigation.data.Constants.CHARGING_STATION import com.kouros.navigation.data.Constants.FUEL_STATION import com.kouros.navigation.data.Constants.PHARMACY -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel class CategoriesScreen( private val carContext: CarContext, private val surfaceRenderer: SurfaceRenderer, - private val viewModel: ViewModel, + private val navigationViewModel: NavigationViewModel, ) : Screen(carContext) { var categories: List = listOf( @@ -48,7 +46,7 @@ class CategoriesScreen( carContext, surfaceRenderer, it.id, - viewModel + navigationViewModel ) ) { obj: Any? -> if (obj != null) { diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/CategoryScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/CategoryScreen.kt index 53bcd12..a5dcdb8 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/CategoryScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/CategoryScreen.kt @@ -1,6 +1,5 @@ package com.kouros.navigation.car.screen -import android.location.Location import androidx.annotation.DrawableRes import androidx.car.app.CarContext import androidx.car.app.Screen @@ -19,11 +18,10 @@ import androidx.lifecycle.Observer import com.kouros.data.R import com.kouros.navigation.car.SurfaceRenderer import com.kouros.navigation.car.navigation.NavigationMessage -import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.data.Constants import com.kouros.navigation.data.Place import com.kouros.navigation.data.overpass.Elements -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel import com.kouros.navigation.utils.GeoUtils.createPointCollection import com.kouros.navigation.utils.location import com.kouros.navigation.utils.round @@ -33,7 +31,7 @@ class CategoryScreen( private val carContext: CarContext, private val surfaceRenderer: SurfaceRenderer, private val category: String, - private val viewModel: ViewModel, + private val navigationViewModel: NavigationViewModel, ) : Screen(carContext) { var elements = listOf() @@ -57,8 +55,8 @@ class CategoryScreen( } init { - viewModel.elements.observe(this, observer) - viewModel.getAmenities(category, surfaceRenderer.lastLocation) + navigationViewModel.elements.observe(this, observer) + navigationViewModel.getAmenities(category, surfaceRenderer.lastLocation) } @@ -130,7 +128,7 @@ class CategoryScreen( row.addAction( Action.Builder() .setOnClickListener { - viewModel.loadRoute( + navigationViewModel.loadRoute( carContext, currentLocation = surfaceRenderer.lastLocation, location(it.lon!!, it.lat!!), diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/DarkModeSettings.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/DarkModeSettings.kt index 2e95394..e46122f 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/DarkModeSettings.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/DarkModeSettings.kt @@ -10,23 +10,27 @@ import androidx.car.app.model.ListTemplate import androidx.car.app.model.Row import androidx.car.app.model.SectionedItemList import androidx.car.app.model.Template +import androidx.lifecycle.lifecycleScope import com.kouros.data.R -import com.kouros.navigation.data.Constants.DARK_MODE_SETTINGS -import com.kouros.navigation.data.Constants.SHOW_THREED_BUILDING -import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue -import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue -import com.kouros.navigation.utils.NavigationUtils.setBooleanKeyValue -import com.kouros.navigation.utils.NavigationUtils.setIntKeyValue +import com.kouros.navigation.utils.getSettingsViewModel +import kotlinx.coroutines.launch class DarkModeSettings(private val carContext: CarContext) : Screen(carContext) { private var darkModeSettings = 0 + val settingsViewModel = getSettingsViewModel(carContext) + init { - darkModeSettings = getIntKeyValue(carContext, DARK_MODE_SETTINGS) + lifecycleScope.launch { + settingsViewModel.darkMode.collect { + invalidate() + } + } } override fun onGetTemplate(): Template { + darkModeSettings = settingsViewModel.darkMode.value val templateBuilder = ListTemplate.Builder() val radioList = ItemList.Builder() @@ -52,10 +56,12 @@ class DarkModeSettings(private val carContext: CarContext) : Screen(carContext) .build() return templateBuilder - .addSectionedList(SectionedItemList.create( - radioList, - carContext.getString(R.string.dark_mode) - )) + .addSectionedList( + SectionedItemList.create( + radioList, + carContext.getString(R.string.dark_mode) + ) + ) .setHeader( Header.Builder() .setTitle(carContext.getString(R.string.dark_mode)) @@ -67,7 +73,7 @@ class DarkModeSettings(private val carContext: CarContext) : Screen(carContext) private fun onSelected(index: Int) { - setIntKeyValue(carContext, index, DARK_MODE_SETTINGS) + settingsViewModel.onDarkModeChanged(index) CarToast.makeText( carContext, (carContext diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/DisplaySettings.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/DisplaySettings.kt index c6966de..6d0fde0 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/DisplaySettings.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/DisplaySettings.kt @@ -6,33 +6,34 @@ import androidx.car.app.model.Action import androidx.car.app.model.Header import androidx.car.app.model.ItemList import androidx.car.app.model.ListTemplate -import androidx.car.app.model.OnClickListener import androidx.car.app.model.Row import androidx.car.app.model.Template import androidx.car.app.model.Toggle +import androidx.lifecycle.lifecycleScope import com.kouros.data.R -import com.kouros.navigation.data.Constants.SHOW_THREED_BUILDING -import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue -import com.kouros.navigation.utils.NavigationUtils.setBooleanKeyValue +import com.kouros.navigation.utils.getSettingsViewModel +import kotlinx.coroutines.launch class DisplaySettings(private val carContext: CarContext) : Screen(carContext) { private var buildingToggleState = false + val settingsViewModel = getSettingsViewModel(carContext) init { - buildingToggleState = getBooleanKeyValue(carContext, SHOW_THREED_BUILDING) + lifecycleScope.launch { + settingsViewModel.threedBuilding.collect { + invalidate() + } + } } override fun onGetTemplate(): Template { + buildingToggleState = settingsViewModel.threedBuilding.value val listBuilder = ItemList.Builder() val buildingToggle: Toggle = Toggle.Builder { checked: Boolean -> - if (checked) { - setBooleanKeyValue(carContext, true, SHOW_THREED_BUILDING) - } else { - setBooleanKeyValue(carContext, false, SHOW_THREED_BUILDING) - } + settingsViewModel.onThreedBuildingChanged(checked) buildingToggleState = !buildingToggleState }.setChecked(buildingToggleState).build() listBuilder.addItem(buildRowForTemplate(R.string.threed_building, buildingToggle)) diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt index afc2220..e23c390 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationScreen.kt @@ -22,6 +22,7 @@ import androidx.car.app.navigation.model.NavigationTemplate import androidx.car.app.navigation.model.RoutingInfo import androidx.core.graphics.drawable.IconCompat import androidx.lifecycle.Observer +import androidx.lifecycle.lifecycleScope import com.kouros.data.R import com.kouros.navigation.car.SurfaceRenderer import com.kouros.navigation.car.ViewStyle @@ -29,11 +30,18 @@ import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.data.Constants import com.kouros.navigation.data.Constants.DESTINATION_ARRIVAL_DISTANCE import com.kouros.navigation.data.Place +import com.kouros.navigation.data.datastore.DataStoreManager import com.kouros.navigation.data.nominatim.SearchResult import com.kouros.navigation.data.overpass.Elements -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel +import com.kouros.navigation.repository.SettingsRepository import com.kouros.navigation.utils.GeoUtils +import com.kouros.navigation.utils.getSettingsViewModel import com.kouros.navigation.utils.location +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import java.time.Duration import java.time.LocalDateTime import java.time.ZoneOffset import kotlin.math.absoluteValue @@ -43,21 +51,21 @@ class NavigationScreen( private var surfaceRenderer: SurfaceRenderer, private var routeModel: RouteCarModel, private var listener: Listener, - private val viewModel: ViewModel + private val navigationViewModel: NavigationViewModel ) : Screen(carContext) { /** A listener for navigation start and stop signals. */ interface Listener { /** Stops navigation. */ - fun stopNavigation() + fun stopNavigation(context: CarContext) } var currentNavigationLocation = Location(LocationManager.GPS_PROVIDER) var recentPlace = Place() var navigationType = NavigationType.VIEW - var lastTrafficDate = LocalDateTime.of(1960, 6, 21, 0, 0) + var lastTrafficDate: LocalDateTime? = LocalDateTime.of(1960, 6, 21, 0, 0) val observer = Observer { route -> if (route.isNotEmpty()) { navigationType = NavigationType.NAVIGATION @@ -99,7 +107,7 @@ class NavigationScreen( speedCameras = cameras val coordinates = mutableListOf>() cameras.forEach { - coordinates.add(listOf(it.lon!!, it.lat!!)) + coordinates.add(listOf(it.lon, it.lat)) } val speedData = GeoUtils.createPointCollection(coordinates, "radar") surfaceRenderer.speedCamerasData.value = speedData @@ -107,11 +115,15 @@ class NavigationScreen( init { - viewModel.route.observe(this, observer) - viewModel.traffic.observe(this, trafficObserver); - viewModel.recentPlace.observe(this, recentObserver) - viewModel.placeLocation.observe(this, placeObserver) - viewModel.speedCameras.observe(this, speedObserver) + navigationViewModel.route.observe(this, observer) + navigationViewModel.traffic.observe(this, trafficObserver); + navigationViewModel.recentPlace.observe(this, recentObserver) + navigationViewModel.placeLocation.observe(this, placeObserver) + navigationViewModel.speedCameras.observe(this, speedObserver) + lifecycleScope.launch { + getSettingsViewModel(carContext).routingEngine.collect { + } + } } override fun onGetTemplate(): Template { @@ -306,7 +318,7 @@ class NavigationScreen( ) .setOnClickListener { val navigateTo = location(recentPlace.longitude, recentPlace.latitude) - viewModel.loadRoute( + navigationViewModel.loadRoute( carContext, surfaceRenderer.lastLocation, navigateTo, @@ -349,7 +361,7 @@ class NavigationScreen( return Action.Builder() .setIcon(routeModel.createCarIcon(carContext, R.drawable.settings_48px)) .setOnClickListener { - screenManager.push(SettingsScreen(carContext, viewModel)) + screenManager.push(SettingsScreen(carContext, navigationViewModel)) } .build() } @@ -411,13 +423,13 @@ class NavigationScreen( SearchScreen( carContext, surfaceRenderer, - viewModel + navigationViewModel ) ) { obj: Any? -> if (obj != null) { val place = obj as Place if (place.longitude == 0.0) { - viewModel.findAddress( + navigationViewModel.findAddress( "${obj.city} ${obj.street}},", currentNavigationLocation ) @@ -432,9 +444,9 @@ class NavigationScreen( fun navigateToPlace(place: Place) { navigationType = NavigationType.VIEW val location = location(place.longitude, place.latitude) - viewModel.saveRecent(place) + navigationViewModel.saveRecent(place) currentNavigationLocation = location - viewModel.loadRoute( + navigationViewModel.loadRoute( carContext, surfaceRenderer.lastLocation, location, @@ -446,7 +458,7 @@ class NavigationScreen( fun stopNavigation() { navigationType = NavigationType.VIEW - listener.stopNavigation() + listener.stopNavigation(carContext) surfaceRenderer.routeData.value = "" lastCameraSearch = 0 invalidate() @@ -470,7 +482,7 @@ class NavigationScreen( fun reRoute(destination: Place) { val dest = location(destination.longitude, destination.latitude) - viewModel.loadRoute( + navigationViewModel.loadRoute( carContext, surfaceRenderer.lastLocation, dest, @@ -480,14 +492,14 @@ class NavigationScreen( fun updateTrip(location: Location) { val current = LocalDateTime.now(ZoneOffset.UTC) - val duration = java.time.Duration.between(current, lastTrafficDate) + val duration = Duration.between(current, lastTrafficDate) if (duration.abs().seconds > 360) { lastTrafficDate = current - viewModel.loadTraffic(carContext, location, surfaceRenderer.carOrientation) + navigationViewModel.loadTraffic(carContext, location, surfaceRenderer.carOrientation) } updateSpeedCamera(location) with(routeModel) { - updateLocation(location, viewModel) + updateLocation(carContext,location, navigationViewModel) if ((navState.maneuverType == Maneuver.TYPE_DESTINATION || navState.maneuverType == Maneuver.TYPE_DESTINATION_LEFT || navState.maneuverType == Maneuver.TYPE_DESTINATION_RIGHT @@ -506,7 +518,7 @@ class NavigationScreen( private fun updateSpeedCamera(location: Location) { if (lastCameraSearch++ % 100 == 0) { - viewModel.getSpeedCameras(location, 5.0) + navigationViewModel.getSpeedCameras(location, 5.0) } if (speedCameras.isNotEmpty()) { updateDistance(location) diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationSettings.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationSettings.kt index f1ea209..2e036fb 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationSettings.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/NavigationSettings.kt @@ -9,16 +9,14 @@ 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 androidx.lifecycle.lifecycleScope import com.kouros.data.R -import com.kouros.navigation.data.Constants.AVOID_MOTORWAY -import com.kouros.navigation.data.Constants.AVOID_TOLLWAY -import com.kouros.navigation.data.Constants.CAR_LOCATION -import com.kouros.navigation.model.ViewModel -import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue -import com.kouros.navigation.utils.NavigationUtils.setBooleanKeyValue +import com.kouros.navigation.model.NavigationViewModel +import com.kouros.navigation.utils.getSettingsViewModel +import kotlinx.coroutines.launch -class NavigationSettings(private val carContext: CarContext, private var viewModel: ViewModel) : +class NavigationSettings(private val carContext: CarContext, private var navigationViewModel: NavigationViewModel) : Screen(carContext) { private var motorWayToggleState = false @@ -27,25 +25,25 @@ class NavigationSettings(private val carContext: CarContext, private var viewMod private var carLocationToggleState = false + val settingsViewModel = getSettingsViewModel(carContext) init { - motorWayToggleState = getBooleanKeyValue(carContext, AVOID_MOTORWAY) - - tollWayToggleState = getBooleanKeyValue(carContext, AVOID_MOTORWAY) - - carLocationToggleState = getBooleanKeyValue(carContext, CAR_LOCATION) - + lifecycleScope.launch { + settingsViewModel.avoidTollway.collect { + invalidate() + } + } } override fun onGetTemplate(): Template { + motorWayToggleState = settingsViewModel.avoidMotorway.value + tollWayToggleState = settingsViewModel.avoidTollway.value + carLocationToggleState = settingsViewModel.carLocation.value + val listBuilder = ItemList.Builder() val highwayToggle: Toggle = Toggle.Builder { checked: Boolean -> - if (checked) { - setBooleanKeyValue(carContext, true, AVOID_MOTORWAY) - } else { - setBooleanKeyValue(carContext, false, AVOID_MOTORWAY) - } + settingsViewModel.onAvoidMotorway(checked) motorWayToggleState = !motorWayToggleState }.setChecked(motorWayToggleState).build() listBuilder.addItem(buildRowForTemplate(R.string.avoid_highways_row_title, highwayToggle)) @@ -53,22 +51,14 @@ class NavigationSettings(private val carContext: CarContext, private var viewMod // Tollway val tollwayToggle: Toggle = Toggle.Builder { checked: Boolean -> - if (checked) { - setBooleanKeyValue(carContext, true, AVOID_TOLLWAY) - } else { - setBooleanKeyValue(carContext, false, AVOID_TOLLWAY) - } + settingsViewModel.onAvoidTollway(checked) tollWayToggleState = !tollWayToggleState }.setChecked(tollWayToggleState).build() listBuilder.addItem(buildRowForTemplate(R.string.avoid_tolls_row_title, tollwayToggle)) val carLocationToggle: Toggle = Toggle.Builder { checked: Boolean -> - if (checked) { - setBooleanKeyValue(carContext, true, CAR_LOCATION) - } else { - setBooleanKeyValue(carContext, false, CAR_LOCATION) - } + settingsViewModel.onCarLocation(checked) carLocationToggleState = !carLocationToggleState }.setChecked(carLocationToggleState).build() @@ -81,7 +71,7 @@ class NavigationSettings(private val carContext: CarContext, private var viewMod listBuilder.addItem( buildRowForScreenTemplate( - RoutingSettings(carContext, viewModel), + RoutingSettings(carContext, navigationViewModel), R.string.routing_engine ) ) diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/PlaceListScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/PlaceListScreen.kt index 3965270..ee4c544 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/PlaceListScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/PlaceListScreen.kt @@ -1,6 +1,5 @@ package com.kouros.navigation.car.screen -import android.location.Location import android.net.Uri import android.text.Spannable import android.text.SpannableString @@ -25,14 +24,14 @@ import com.kouros.navigation.data.Constants.CONTACTS import com.kouros.navigation.data.Constants.FAVORITES import com.kouros.navigation.data.Constants.RECENT import com.kouros.navigation.data.Place -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel class PlaceListScreen( private val carContext: CarContext, private val surfaceRenderer: SurfaceRenderer, private val category: String, - private val viewModel: ViewModel + private val navigationViewModel: NavigationViewModel ) : Screen(carContext) { var places = listOf() @@ -49,30 +48,30 @@ class PlaceListScreen( init { if (category == RECENT) { - viewModel.places.observe(this, observer) + navigationViewModel.places.observe(this, observer) } if (category == CONTACTS) { - viewModel.contactAddress.observe(this, observerAddress) + navigationViewModel.contactAddress.observe(this, observerAddress) } if (category == FAVORITES) { - viewModel.favorites.observe(this, observer) + navigationViewModel.favorites.observe(this, observer) } loadPlaces() } fun loadPlaces() { if (category == RECENT) { - viewModel.loadRecentPlaces( + navigationViewModel.loadRecentPlaces( carContext, surfaceRenderer.lastLocation, surfaceRenderer.carOrientation ) } if (category == CONTACTS) { - viewModel.loadContacts(carContext) + navigationViewModel.loadContacts(carContext) } if (category == FAVORITES) { - viewModel.loadFavorites( + navigationViewModel.loadFavorites( carContext, surfaceRenderer.lastLocation, surfaceRenderer.carOrientation @@ -110,7 +109,7 @@ class PlaceListScreen( carContext, surfaceRenderer, place, - viewModel + navigationViewModel ) ) { obj: Any? -> if (obj != null) { @@ -163,7 +162,7 @@ class PlaceListScreen( ) ) .setOnClickListener { - viewModel.deletePlace(place) + navigationViewModel.deletePlace(place) CarToast.makeText( carContext, R.string.recent_Item_deleted, CarToast.LENGTH_LONG diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/RoutePreviewScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/RoutePreviewScreen.kt index 822dc52..be05f27 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/RoutePreviewScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/RoutePreviewScreen.kt @@ -6,7 +6,6 @@ import androidx.annotation.DrawableRes import androidx.car.app.CarContext import androidx.car.app.CarToast import androidx.car.app.Screen -import androidx.car.app.constraints.ConstraintManager import androidx.car.app.model.Action import androidx.car.app.model.Action.FLAG_DEFAULT import androidx.car.app.model.ActionStrip @@ -29,7 +28,7 @@ import com.kouros.navigation.car.SurfaceRenderer import com.kouros.navigation.car.navigation.NavigationMessage import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.data.Place -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel import com.kouros.navigation.utils.location import java.math.BigDecimal import java.math.RoundingMode @@ -39,7 +38,7 @@ class RoutePreviewScreen( carContext: CarContext, private var surfaceRenderer: SurfaceRenderer, private var destination: Place, - private val viewModel: ViewModel + private val navigationViewModel: NavigationViewModel ) : Screen(carContext) { private var isFavorite = false @@ -56,9 +55,9 @@ class RoutePreviewScreen( } init { - viewModel.previewRoute.observe(this, observer) + navigationViewModel.previewRoute.observe(this, observer) val location = location(destination.longitude, destination.latitude) - viewModel.loadPreviewRoute( + navigationViewModel.loadPreviewRoute( carContext, surfaceRenderer.lastLocation, location, @@ -164,7 +163,7 @@ class RoutePreviewScreen( CarToast.LENGTH_SHORT ) .show() - viewModel.saveFavorite(destination) + navigationViewModel.saveFavorite(destination) invalidate() } .build() @@ -172,7 +171,7 @@ class RoutePreviewScreen( private fun deleteFavoriteAction(): Action = Action.Builder() .setOnClickListener { if (isFavorite) { - viewModel.deleteFavorite(destination) + navigationViewModel.deleteFavorite(destination) } isFavorite = !isFavorite finish() diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/RoutingSettings.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/RoutingSettings.kt index f39ac10..f139963 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/RoutingSettings.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/RoutingSettings.kt @@ -10,28 +10,28 @@ import androidx.car.app.model.ListTemplate import androidx.car.app.model.Row import androidx.car.app.model.SectionedItemList import androidx.car.app.model.Template -import androidx.car.app.model.Toggle +import androidx.lifecycle.lifecycleScope import com.kouros.data.R -import com.kouros.navigation.data.Constants.AVOID_MOTORWAY -import com.kouros.navigation.data.Constants.CAR_LOCATION -import com.kouros.navigation.data.Constants.ROUTING_ENGINE import com.kouros.navigation.data.RouteEngine -import com.kouros.navigation.model.ViewModel -import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue -import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue -import com.kouros.navigation.utils.NavigationUtils.setBooleanKeyValue -import com.kouros.navigation.utils.NavigationUtils.setIntKeyValue +import com.kouros.navigation.model.NavigationViewModel +import com.kouros.navigation.utils.getSettingsViewModel +import kotlinx.coroutines.launch -class RoutingSettings(private val carContext: CarContext, private var viewModel: ViewModel) : Screen(carContext) { +class RoutingSettings(private val carContext: CarContext, private var navigationViewModel: NavigationViewModel) : Screen(carContext) { private var routingEngine = RouteEngine.OSRM.ordinal + val settingsViewModel = getSettingsViewModel(carContext) init { - routingEngine = getIntKeyValue(carContext, ROUTING_ENGINE) - + lifecycleScope.launch { + settingsViewModel.routingEngine.collect { + invalidate() + } + } } override fun onGetTemplate(): Template { + routingEngine = settingsViewModel.routingEngine.value val templateBuilder = ListTemplate.Builder() val radioList = ItemList.Builder() @@ -71,8 +71,8 @@ class RoutingSettings(private val carContext: CarContext, private var viewModel: } private fun onSelected(index: Int) { - setIntKeyValue(carContext, index, ROUTING_ENGINE) - viewModel.routingEngine.value = index + settingsViewModel.onRoutingEngineChanged(index) + navigationViewModel.routingEngine.value = index CarToast.makeText( carContext, (carContext diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/SearchScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/SearchScreen.kt index 4b6ffc9..5c60089 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/SearchScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/SearchScreen.kt @@ -1,7 +1,6 @@ package com.kouros.navigation.car.screen import android.annotation.SuppressLint -import android.location.Location import androidx.car.app.CarContext import androidx.car.app.Screen import androidx.car.app.model.Action @@ -16,18 +15,17 @@ import androidx.lifecycle.Observer import com.kouros.data.R import com.kouros.navigation.car.SurfaceRenderer import com.kouros.navigation.car.ViewStyle -import com.kouros.navigation.car.navigation.RouteCarModel import com.kouros.navigation.data.Category import com.kouros.navigation.data.Constants import com.kouros.navigation.data.Place import com.kouros.navigation.data.nominatim.SearchResult -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel class SearchScreen( carContext: CarContext, private var surfaceRenderer: SurfaceRenderer, - private val viewModel: ViewModel, + private val navigationViewModel: NavigationViewModel, ) : Screen(carContext) { var isSearchComplete: Boolean = false @@ -47,7 +45,7 @@ class SearchScreen( } init { - viewModel.searchPlaces.observe(this, observer) + navigationViewModel.searchPlaces.observe(this, observer) } override fun onGetTemplate(): Template { @@ -71,7 +69,7 @@ class SearchScreen( CategoriesScreen( carContext, surfaceRenderer, - viewModel + navigationViewModel ) ) { obj: Any? -> surfaceRenderer.viewStyle = ViewStyle.VIEW @@ -87,7 +85,7 @@ class SearchScreen( carContext, surfaceRenderer, it.id, - viewModel + navigationViewModel ) ) { obj: Any? -> if (obj != null) { @@ -115,7 +113,7 @@ class SearchScreen( object : SearchCallback { override fun onSearchSubmitted(searchTerm: String) { isSearchComplete = true - viewModel.searchPlaces(searchTerm, surfaceRenderer.lastLocation) + navigationViewModel.searchPlaces(searchTerm, surfaceRenderer.lastLocation) } }) .setHeaderAction(Action.BACK) diff --git a/common/car/src/main/java/com/kouros/navigation/car/screen/SettingsScreen.kt b/common/car/src/main/java/com/kouros/navigation/car/screen/SettingsScreen.kt index 7c2be97..742e104 100644 --- a/common/car/src/main/java/com/kouros/navigation/car/screen/SettingsScreen.kt +++ b/common/car/src/main/java/com/kouros/navigation/car/screen/SettingsScreen.kt @@ -24,12 +24,12 @@ import androidx.car.app.model.ListTemplate import androidx.car.app.model.Row import androidx.car.app.model.Template import com.kouros.data.R -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel /** A screen demonstrating selectable lists. */ class SettingsScreen( carContext: CarContext, - private var viewModel: ViewModel, + private var navigationViewModel: NavigationViewModel, ) : Screen(carContext) { override fun onGetTemplate(): Template { @@ -42,7 +42,7 @@ class SettingsScreen( ) listBuilder.addItem( buildRowForTemplate( - NavigationSettings(carContext, viewModel), + NavigationSettings(carContext, navigationViewModel), R.string.navigation_settings ) ) diff --git a/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt b/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt index 0775d3f..8020d3b 100644 --- a/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt +++ b/common/car/src/test/java/com/kouros/navigation/car/UnitTest.kt @@ -2,7 +2,7 @@ package com.kouros.navigation.car import com.kouros.navigation.data.valhalla.ValhallaRepository import com.kouros.navigation.model.RouteModel -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel import org.junit.Test /** @@ -12,7 +12,7 @@ import org.junit.Test class ViewModelTest { val repo = ValhallaRepository() - val viewModel = ViewModel(repo) + val navigationViewModel = NavigationViewModel(repo) val model = RouteModel() @Test diff --git a/common/data/build.gradle.kts b/common/data/build.gradle.kts index 0954e5b..a6b9b65 100644 --- a/common/data/build.gradle.kts +++ b/common/data/build.gradle.kts @@ -5,6 +5,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) kotlin("plugin.serialization") version "2.2.21" kotlin("kapt") } @@ -19,6 +20,10 @@ android { consumerProguardFiles("consumer-rules.pro") } + buildFeatures { + compose = true + } + buildTypes { release { isMinifyEnabled = false @@ -40,6 +45,10 @@ android { } dependencies { + val composeBom = platform(libs.androidx.compose.bom) + implementation(composeBom) + androidTestImplementation(composeBom) + implementation(libs.androidx.core.ktx) implementation(libs.androidx.appcompat) implementation(libs.material) @@ -49,6 +58,7 @@ dependencies { implementation(libs.koin.compose.viewmodel) implementation(libs.androidx.car.app) implementation(libs.android.sdk.turf) + implementation(libs.androidx.compose.runtime) // objectbox @@ -56,6 +66,8 @@ dependencies { implementation(libs.androidx.material3) annotationProcessor(libs.objectbox.processor) + implementation(libs.androidx.datastore.preferences) + implementation(libs.kotlinx.serialization.json) implementation(libs.maplibre.compose) implementation("androidx.compose.material:material-icons-extended:1.7.8") diff --git a/common/data/src/main/java/com/kouros/navigation/data/Data.kt b/common/data/src/main/java/com/kouros/navigation/data/Data.kt index f445df8..7c2ba06 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/Data.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/Data.kt @@ -139,7 +139,9 @@ object Constants { const val CAR_LOCATION = "CarLocation" const val ROUTING_ENGINE = "RoutingEngine" - const val NEXT_STEP_THRESHOLD = 120.0 + const val LAST_ROUTE = "LastRoute" + + const val NEXT_STEP_THRESHOLD = 500.0 const val MAXIMAL_SNAP_CORRECTION = 50.0 @@ -157,3 +159,12 @@ object Constants { enum class RouteEngine { VALHALLA, OSRM, TOMTOM, GRAPHHOPPER } + +enum class NavigationThemeColor(val color: Long) { + RED(0xFFD32F2F), + ORANGE(0xFFF57C00), + YELLOW(0xFFFBC02D), + GREEN(0xFF388E3C), + BLUE(0xFF1976D2), + PURPLE(0xFF7B1FA2) +} diff --git a/common/data/src/main/java/com/kouros/navigation/data/NavigationRepository.kt b/common/data/src/main/java/com/kouros/navigation/data/NavigationRepository.kt index e00f061..7d9ed5e 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/NavigationRepository.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/NavigationRepository.kt @@ -18,7 +18,11 @@ package com.kouros.navigation.data import android.content.Context import android.location.Location +import com.google.gson.GsonBuilder import com.kouros.data.R +import com.kouros.navigation.data.osrm.OsrmRepository +import com.kouros.navigation.data.osrm.OsrmResponse +import com.kouros.navigation.data.osrm.OsrmRoute import com.kouros.navigation.model.RouteModel import com.kouros.navigation.utils.GeoUtils.calculateSquareRadius import java.net.Authenticator @@ -50,10 +54,18 @@ abstract class NavigationRepository { searchFilter: SearchFilter, context: Context ): Double { - val route = getRoute(context, currentLocation, location, carOrientation, searchFilter) - val routeModel = RouteModel() - routeModel.startNavigation(route, context) - return routeModel.curRoute.summary.distance + val osrm = OsrmRepository() + val route = osrm.getRoute(context, currentLocation, location, carOrientation, searchFilter) + val gson = GsonBuilder().serializeNulls().create() + val osrmJson = gson.fromJson(route, OsrmResponse::class.java) + if (osrmJson.routes.isEmpty()) { + return 0.0 + } + return osrmJson.routes.first().distance + // return osrmJson.destinations.first().distance?.toDouble() ?: 0.0 + ///val routeModel = RouteModel() + //routeModel.startNavigation(route, context) + //return routeModel.curRoute.summary.distance } fun searchPlaces(search: String, location: Location): String { diff --git a/common/data/src/main/java/com/kouros/navigation/data/Route.kt b/common/data/src/main/java/com/kouros/navigation/data/Route.kt index 8879603..69887da 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/Route.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/Route.kt @@ -99,8 +99,8 @@ data class Route( } } - fun nextStep(steps : Int): Step { - val nextIndex = currentStepIndex + steps + fun nextStep(add: Int): Step { + val nextIndex = currentStepIndex + add return if (isRouteValid() && nextIndex < legs().first().steps.size) { legs().first().steps[nextIndex] } else { diff --git a/common/data/src/main/java/com/kouros/navigation/data/datastore/DataStoreManager.kt b/common/data/src/main/java/com/kouros/navigation/data/datastore/DataStoreManager.kt new file mode 100644 index 0000000..1ae65ba --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/data/datastore/DataStoreManager.kt @@ -0,0 +1,111 @@ +package com.kouros.navigation.data.datastore + +import android.content.Context +import androidx.datastore.core.DataStore +import androidx.datastore.preferences.core.Preferences +import androidx.datastore.preferences.core.booleanPreferencesKey +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.intPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map + +private const val DATASTORE_NAME = "navigation_settings" + + +/** + * Central manager for app settings using DataStore + */ +class DataStoreManager(private val context: Context) { + + companion object { + private val Context.dataStore: DataStore by preferencesDataStore(name = DATASTORE_NAME) + } + + // Keys + private object PreferencesKeys { + + val THREED_BUILDING = booleanPreferencesKey("Show3D") + + val DARK_MODE = intPreferencesKey("DarkMode") + + val AVOID_MOTORWAY = booleanPreferencesKey("AvoidMotorway") + + val AVOID_TOLLWAY = booleanPreferencesKey("AvoidTollway") + + val CAR_LOCATION = booleanPreferencesKey("CarLocation") + + val ROUTING_ENGINE = intPreferencesKey("RoutingEngine") + } + + // Read values + + val threeDBuildingFlow: Flow = + context.dataStore.data.map { preferences -> + preferences[PreferencesKeys.THREED_BUILDING] == true + } + val darkModeFlow: Flow = + context.dataStore.data.map { preferences -> + preferences[PreferencesKeys.DARK_MODE] + ?: 0 + } + + val avoidMotorwayFlow: Flow = + context.dataStore.data.map { preferences -> + preferences[PreferencesKeys.AVOID_MOTORWAY] == true + } + + val avoidTollwayFlow: Flow = + context.dataStore.data.map { preferences -> + preferences[PreferencesKeys.AVOID_TOLLWAY] == true + } + + val useCarLocationFlow: Flow = + context.dataStore.data.map { preferences -> + preferences[PreferencesKeys.CAR_LOCATION] == true + } + + val routingEngineFlow: Flow = + context.dataStore.data.map { preferences -> + preferences[PreferencesKeys.ROUTING_ENGINE] + ?: 0 + } + + // Save values + suspend fun setThreedBuilding(enabled: Boolean) { + context.dataStore.edit { preferences -> + preferences[PreferencesKeys.THREED_BUILDING] = enabled + } + } + + suspend fun setDarkMode(mode: Int) { + context.dataStore.edit { prefs -> + prefs[PreferencesKeys.DARK_MODE] = mode + } + } + + suspend fun setAvoidMotorway(enabled: Boolean) { + context.dataStore.edit { preferences -> + preferences[PreferencesKeys.AVOID_MOTORWAY] = enabled + } + } + + suspend fun setAvoidTollway(enabled: Boolean) { + context.dataStore.edit { preferences -> + preferences[PreferencesKeys.AVOID_TOLLWAY] = enabled + } + } + + suspend fun setCarLocation(enabled: Boolean) { + context.dataStore.edit { preferences -> + preferences[PreferencesKeys.CAR_LOCATION] = enabled + } + } + + suspend fun setRoutingEngine(mode: Int) { + context.dataStore.edit { prefs -> + prefs[PreferencesKeys.ROUTING_ENGINE] = mode + } + } +} diff --git a/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt b/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt index 5eaac6b..9ef717e 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/osrm/OsrmRepository.kt @@ -5,7 +5,9 @@ import android.location.Location import com.kouros.navigation.data.NavigationRepository import com.kouros.navigation.data.SearchFilter -private const val routeUrl = "https://kouros-online.de/osrm/route/v1/driving/" +//private const val routeUrl = "https://kouros-online.de/osrm/route/v1/driving/" + +private const val routeUrl = "https://router.project-osrm.org/route/v1/driving/" class OsrmRepository : NavigationRepository() { override fun getRoute( @@ -23,7 +25,7 @@ class OsrmRepository : NavigationRepository() { if (searchFilter.avoidTollway) { exclude = "$exclude&exclude=toll" } - val routeLocation = "${currentLocation.longitude},${currentLocation.latitude};${location.longitude},${location.latitude}?steps=true&alternatives=0" + val routeLocation = "${currentLocation.longitude},${currentLocation.latitude};${location.longitude},${location.latitude}?steps=true&alternatives=false" return fetchUrl(routeUrl + routeLocation + exclude, true) } diff --git a/common/data/src/main/java/com/kouros/navigation/data/overpass/Overpass.kt b/common/data/src/main/java/com/kouros/navigation/data/overpass/Overpass.kt index 59012a0..7190ea2 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/overpass/Overpass.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/overpass/Overpass.kt @@ -10,6 +10,7 @@ import java.net.URL class Overpass { //val overpassUrl = "https://overpass.kumi.systems/api/interpreter" + //val overpassUrl = "https://overpass-api.de/api" val overpassUrl = "https://kouros-online.de/overpass/interpreter" @@ -43,13 +44,13 @@ class Overpass { val boundingBox = getBoundingBox(location.latitude, location.longitude, radius) val httpURLConnection = URL(overpassUrl).openConnection() as HttpURLConnection httpURLConnection.requestMethod = "POST" + // node["highway"="speed_camera"] + // node[amenity=$category] + httpURLConnection.setDoOutput(true); httpURLConnection.setRequestProperty( "Accept", "application/json" ) - // node["highway"="speed_camera"] - // node[amenity=$category] - httpURLConnection.setDoOutput(true); // define search query val searchQuery = """ |[out:json]; @@ -79,7 +80,7 @@ class Overpass { } } catch (e: Exception) { - + println("Speed $e") } return emptyList() } diff --git a/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRepository.kt b/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRepository.kt index 0501d6c..c29f449 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRepository.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRepository.kt @@ -10,15 +10,14 @@ import com.kouros.navigation.utils.GeoUtils.calculateSquareRadius private const val routeUrl = "https://api.tomtom.com/routing/1/calculateRoute/" -val tomtomApiKey = "678k5v6940cSXXIS5oD92qIrDgW3RBZ3" +const val tomtomApiKey = "678k5v6940cSXXIS5oD92qIrDgW3RBZ3" -val tomtomTrafficUrl = "https://api.tomtom.com/traffic/services/5/incidentDetails" +const val tomtomTrafficUrl = "https://api.tomtom.com/traffic/services/5/incidentDetails" - -private val tomtomFields = +private const val tomtomFields = "{incidents{type,geometry{type,coordinates},properties{iconCategory,events{description}}}}" -const val useAsset = false +const val useAsset = true class TomTomRepository : NavigationRepository() { override fun getRoute( diff --git a/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRoute.kt b/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRoute.kt index 3646081..d68b87e 100644 --- a/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRoute.kt +++ b/common/data/src/main/java/com/kouros/navigation/data/tomtom/TomTomRoute.kt @@ -61,9 +61,7 @@ class TomTomRoute { route.sections?.forEach { section -> val lanes = mutableListOf() var startIndex = 0 - if (section.startPointIndex <= instruction.pointIndex - 3 - && instruction.pointIndex <= section.endPointIndex - ) { + section.lanes?.forEach { itLane -> val lane = Lane( location( @@ -77,7 +75,7 @@ class TomTomRoute { lanes.add(lane) } intersections.add(Intersection(waypoints[startIndex], lanes)) - } + } allIntersections.addAll(intersections) stepDistance = route.guidance.instructions[index].routeOffsetInMeters - stepDistance @@ -166,13 +164,23 @@ class TomTomRoute { newType = androidx.car.app.navigation.model.Maneuver.TYPE_TURN_SHARP_RIGHT } - "ROUNDABOUT_RIGHT" -> { + "ROUNDABOUT_RIGHT", "ROUNDABOUT_CROSS" -> { newType = androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_CCW } "ROUNDABOUT_LEFT" -> { newType = androidx.car.app.navigation.model.Maneuver.TYPE_ROUNDABOUT_ENTER_CW } + "MAKE_UTURN" -> { + newType = androidx.car.app.navigation.model.Maneuver.TYPE_U_TURN_LEFT + } + "ENTER_MOTORWAY" -> { + newType = androidx.car.app.navigation.model.Maneuver.TYPE_MERGE_LEFT + } + "TAKE_EXIT" -> { + newType = androidx.car.app.navigation.model.Maneuver.TYPE_TURN_SHARP_RIGHT + + } } return newType } diff --git a/common/data/src/main/java/com/kouros/navigation/model/IconMapper.kt b/common/data/src/main/java/com/kouros/navigation/model/IconMapper.kt index 250b911..96cafa4 100644 --- a/common/data/src/main/java/com/kouros/navigation/model/IconMapper.kt +++ b/common/data/src/main/java/com/kouros/navigation/model/IconMapper.kt @@ -66,28 +66,17 @@ class IconMapper() { currentTurnIcon = R.drawable.ic_roundabout_ccw } - } - return currentTurnIcon - } - - - fun addLanes(stepData: StepData) : Int { - stepData.lane.forEach { - if (it.indications.isNotEmpty() && it.valid) { - Collections.sort(it.indications) - var direction = "" - it.indications.forEach { it2 -> - direction = if (direction.isEmpty()) { - it2.trim() - } else { - "${direction}_${it2.trim()}" - } - } - val laneDirection = addLanes(direction, stepData) - return laneDirection + Maneuver.TYPE_U_TURN_LEFT -> { + currentTurnIcon = R.drawable.ic_turn_u_turn_left + } + Maneuver.TYPE_U_TURN_RIGHT -> { + currentTurnIcon = R.drawable.ic_turn_u_turn_right + } + Maneuver.TYPE_MERGE_LEFT -> { + currentTurnIcon = R.drawable.ic_turn_merge_symmetrical } } - return 0 + return currentTurnIcon } fun addLanes(direction: String, stepData: StepData): Int { @@ -112,6 +101,8 @@ class IconMapper() { "straight" -> { when (stepData.currentManeuverType) { Maneuver.TYPE_STRAIGHT -> LaneDirection.SHAPE_STRAIGHT + Maneuver.TYPE_KEEP_LEFT -> LaneDirection.SHAPE_STRAIGHT + Maneuver.TYPE_KEEP_RIGHT -> LaneDirection.SHAPE_STRAIGHT else -> LaneDirection.SHAPE_UNKNOWN } @@ -136,7 +127,8 @@ class IconMapper() { "left_slight", "slight_left" -> { when (stepData.currentManeuverType) { - Maneuver.TYPE_TURN_SLIGHT_LEFT -> LaneDirection.SHAPE_SLIGHT_LEFT + Maneuver.TYPE_TURN_NORMAL_LEFT -> LaneDirection.SHAPE_SLIGHT_LEFT + Maneuver.TYPE_KEEP_LEFT -> LaneDirection.SHAPE_SLIGHT_LEFT else -> LaneDirection.SHAPE_UNKNOWN } diff --git a/common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt b/common/data/src/main/java/com/kouros/navigation/model/NavigationViewModel.kt similarity index 96% rename from common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt rename to common/data/src/main/java/com/kouros/navigation/model/NavigationViewModel.kt index 92582e9..5dfa7e9 100644 --- a/common/data/src/main/java/com/kouros/navigation/model/ViewModel.kt +++ b/common/data/src/main/java/com/kouros/navigation/model/NavigationViewModel.kt @@ -2,6 +2,7 @@ package com.kouros.navigation.model import android.content.Context import android.location.Location +import androidx.car.app.CarContext import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.runtime.toMutableStateList import androidx.lifecycle.MutableLiveData @@ -18,21 +19,21 @@ import com.kouros.navigation.data.nominatim.Search import com.kouros.navigation.data.nominatim.SearchResult import com.kouros.navigation.data.overpass.Elements import com.kouros.navigation.data.overpass.Overpass -import com.kouros.navigation.data.tomtom.Features -import com.kouros.navigation.data.tomtom.Traffic -import com.kouros.navigation.data.tomtom.TrafficData -import com.kouros.navigation.utils.GeoUtils.createPointCollection import com.kouros.navigation.utils.Levenshtein import com.kouros.navigation.utils.NavigationUtils +import com.kouros.navigation.utils.getSettingsRepository +import com.kouros.navigation.utils.getSettingsViewModel import com.kouros.navigation.utils.location import io.objectbox.kotlin.boxFor import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import org.maplibre.geojson.FeatureCollection import java.time.LocalDateTime import java.time.ZoneOffset -class ViewModel(private val repository: NavigationRepository) : ViewModel() { +class NavigationViewModel(private val repository: NavigationRepository) : ViewModel() { val route: MutableLiveData by lazy { MutableLiveData() @@ -457,14 +458,9 @@ class ViewModel(private val repository: NavigationRepository) : ViewModel() { } fun getSearchFilter(context: Context): SearchFilter { - val avoidMotorway = NavigationUtils.getBooleanKeyValue( - context = context, - Constants.AVOID_MOTORWAY - ) - val avoidTollway = NavigationUtils.getBooleanKeyValue( - context = context, - Constants.AVOID_TOLLWAY - ) + val repository = getSettingsRepository(context) + val avoidMotorway = runBlocking { repository.avoidMotorwayFlow.first() } + val avoidTollway = runBlocking { repository.avoidTollwayFlow.first() } return SearchFilter(avoidMotorway, avoidTollway) } diff --git a/common/data/src/main/java/com/kouros/navigation/model/RouteCalculator.kt b/common/data/src/main/java/com/kouros/navigation/model/RouteCalculator.kt index b7efa2a..625c5ef 100644 --- a/common/data/src/main/java/com/kouros/navigation/model/RouteCalculator.kt +++ b/common/data/src/main/java/com/kouros/navigation/model/RouteCalculator.kt @@ -90,7 +90,7 @@ class RouteCalculator(var routeModel: RouteModel) { return nowUtcMillis + timeToDestinationMillis } - fun updateSpeedLimit(location: Location, viewModel: ViewModel) { + fun updateSpeedLimit(location: Location, viewModel: NavigationViewModel) { if (routeModel.isNavigating()) { // speed limit val distance = lastSpeedLocation.distanceTo(location) diff --git a/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt b/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt index a479d2e..7945c00 100644 --- a/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt +++ b/common/data/src/main/java/com/kouros/navigation/model/RouteModel.kt @@ -4,15 +4,19 @@ import android.content.Context import android.location.Location import androidx.car.app.navigation.model.Maneuver import com.kouros.navigation.data.Constants.NEXT_STEP_THRESHOLD -import com.kouros.navigation.data.Constants.ROUTING_ENGINE import com.kouros.navigation.data.Place import com.kouros.navigation.data.Route import com.kouros.navigation.data.StepData +import com.kouros.navigation.data.datastore.DataStoreManager import com.kouros.navigation.data.route.Lane import com.kouros.navigation.data.route.Leg import com.kouros.navigation.data.route.Routes -import com.kouros.navigation.utils.NavigationUtils.getIntKeyValue +import com.kouros.navigation.repository.SettingsRepository +import com.kouros.navigation.utils.getSettingsRepository +import com.kouros.navigation.utils.getSettingsViewModel import com.kouros.navigation.utils.location +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking import kotlin.math.absoluteValue open class RouteModel { @@ -20,7 +24,7 @@ open class RouteModel { // Immutable Data Class data class NavigationState( val route: Route = Route.Builder().buildEmpty(), - val iconMapper : IconMapper = IconMapper(), + val iconMapper: IconMapper = IconMapper(), val navigating: Boolean = false, val arrived: Boolean = false, val travelMessage: String = "", @@ -37,7 +41,7 @@ open class RouteModel { val route: Route get() = navState.route - val routeCalculator : RouteCalculator = RouteCalculator(this) + val routeCalculator: RouteCalculator = RouteCalculator(this) val curRoute: Routes get() = navState.route.routes[navState.currentRouteIndex] @@ -46,38 +50,98 @@ open class RouteModel { get() = navState.route.routes[navState.currentRouteIndex].legs.first() fun startNavigation(routeString: String, context: Context) { - val routeEngine = getIntKeyValue(context = context, ROUTING_ENGINE) + val repository = getSettingsRepository(context) + val routingEngine = runBlocking { repository.routingEngineFlow.first() } navState = navState.copy( route = Route.Builder() - .routeEngine(routeEngine) + .routeEngine(routingEngine) .route(routeString) .build() ) if (hasLegs()) { navState = navState.copy(navigating = true) + //NavigationUtils.setStringKeyValue(context, routeString, LAST_ROUTE) } } private fun hasLegs(): Boolean { - return navState.route.routes.isNotEmpty() && navState.route.routes[0].legs.isNotEmpty() + return navState.route.routes.isNotEmpty() && navState.route.routes[0].legs.isNotEmpty() } - fun stopNavigation() { + fun stopNavigation(context: Context) { navState = navState.copy( route = Route.Builder().buildEmpty(), navigating = false, arrived = false, maneuverType = Maneuver.TYPE_UNKNOWN ) + //NavigationUtils.setStringKeyValue(context, "", LAST_ROUTE) } - fun updateLocation(curLocation: Location, viewModel: ViewModel) { + fun updateLocation(context: Context, curLocation: Location, viewModel: NavigationViewModel) { navState = navState.copy(currentLocation = curLocation) routeCalculator.findStep(curLocation) - routeCalculator.updateSpeedLimit(curLocation, viewModel) + val repository = getSettingsRepository(context) + val carLocation = runBlocking { repository.carLocationFlow.first() } + if (carLocation) { + routeCalculator.updateSpeedLimit(curLocation, viewModel) + } navState = navState.copy(lastLocation = navState.currentLocation) } + fun currentStep(): StepData { + val distanceToNextStep = routeCalculator.leftStepDistance() + // Determine the maneuver type and corresponding icon + val currentStep = navState.route.nextStep(0) + val streetName = if (distanceToNextStep > NEXT_STEP_THRESHOLD) { + currentStep.street + } else { + currentStep.maneuver.street + } + val curManeuverType = if (distanceToNextStep > NEXT_STEP_THRESHOLD) { + Maneuver.TYPE_STRAIGHT + } else { + currentStep.maneuver.type + } + val exitNumber = currentStep.maneuver.exit + val maneuverIcon = navState.iconMapper.maneuverIcon(curManeuverType) + navState = navState.copy(maneuverType = curManeuverType) + // Construct and return the final StepData object + return StepData( + instruction = streetName, + leftStepDistance = distanceToNextStep, + currentManeuverType = navState.maneuverType, + icon = maneuverIcon, + arrivalTime = routeCalculator.arrivalTime(), + leftDistance = routeCalculator.travelLeftDistance(), + lane = currentLanes(), + exitNumber = exitNumber + ) + } + + fun nextStep(): StepData { + val distanceToNextStep = routeCalculator.leftStepDistance() + val step = navState.route.nextStep(1) + val streetName = if (distanceToNextStep < NEXT_STEP_THRESHOLD) { + step.maneuver.street + } else { + step.street + } + val maneuverType = step.maneuver.type + + val maneuverIcon = navState.iconMapper.maneuverIcon(maneuverType) + // Construct and return the final StepData object + return StepData( + instruction = streetName, + leftStepDistance = distanceToNextStep, + currentManeuverType = maneuverType, + icon = maneuverIcon, + arrivalTime = routeCalculator.arrivalTime(), + leftDistance = routeCalculator.travelLeftDistance(), + exitNumber = step.maneuver.exit + ) + } + private fun currentLanes(): List { var lanes = emptyList() if (navState.route.legs().isNotEmpty()) { @@ -87,7 +151,7 @@ open class RouteModel { navState.lastLocation.distanceTo(location(it.location[0], it.location[1])) val sectionBearing = navState.lastLocation.bearingTo(location(it.location[0], it.location[1])) - if (distance < 500 && (navState.routeBearing.absoluteValue - sectionBearing.absoluteValue).absoluteValue < 10) { + if (distance < NEXT_STEP_THRESHOLD && (navState.routeBearing.absoluteValue - sectionBearing.absoluteValue).absoluteValue < 10) { lanes = it.lane } } @@ -96,61 +160,6 @@ open class RouteModel { return lanes } - fun currentStep(): StepData { - val distanceToNextStep = routeCalculator.leftStepDistance() - // Determine the maneuver type and corresponding icon - val currentStep = navState.route.nextStep(0) - // Safely get the street name from the maneuver - val streetName = currentStep.maneuver.street - val curManeuverType = currentStep.maneuver.type - val exitNumber = currentStep.maneuver.exit - val maneuverIcon = navState.iconMapper.maneuverIcon(curManeuverType) - navState = navState.copy(maneuverType = curManeuverType) - - val lanes = currentLanes() - - // Construct and return the final StepData object - return StepData( - streetName, - distanceToNextStep, - navState.maneuverType, - maneuverIcon, - routeCalculator.arrivalTime(), - routeCalculator.travelLeftDistance(), - lanes, - exitNumber - ) - } - - fun nextStep(): StepData { - val step = navState.route.nextStep(1) - val maneuverType = step.maneuver.type - val distanceLeft = routeCalculator.leftStepDistance() - var text = "" - when (distanceLeft) { - in 0.0..NEXT_STEP_THRESHOLD -> { - } - else -> { - if (step.street.isNotEmpty()) { - text = step.street - } - } - } - - val maneuverIcon = navState.iconMapper.maneuverIcon(maneuverType) - // Construct and return the final StepData object - return StepData( - text, - distanceLeft, - maneuverType, - maneuverIcon, - routeCalculator.arrivalTime(), - routeCalculator.travelLeftDistance(), - listOf(Lane(location(0.0, 0.0), valid = false, indications = emptyList())), - step.maneuver.exit - ) - } - fun isNavigating(): Boolean { return navState.navigating } diff --git a/common/data/src/main/java/com/kouros/navigation/model/SettingsViewModel.kt b/common/data/src/main/java/com/kouros/navigation/model/SettingsViewModel.kt new file mode 100644 index 0000000..dbb5286 --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/model/SettingsViewModel.kt @@ -0,0 +1,72 @@ +package com.kouros.navigation.model + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.kouros.navigation.repository.SettingsRepository +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch + +class SettingsViewModel(private val repository: SettingsRepository) : ViewModel() { + + val threedBuilding = repository.threedBuildingFlow.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000), + false + ) + + val darkMode = repository.darkModeFlow.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000), + 0 + ) + + val avoidMotorway = repository.avoidMotorwayFlow.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000), + false + ) + + val avoidTollway = repository.avoidTollwayFlow.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000), + false + ) + + val carLocation = repository.carLocationFlow.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000), + false + ) + + val routingEngine = repository.routingEngineFlow.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(5_000), + 0 + ) + + fun onThreedBuildingChanged(enabled: Boolean) { + viewModelScope.launch { repository.setThreedBuilding(enabled) } + } + + + fun onDarkModeChanged(mode: Int) { + viewModelScope.launch { repository.setDarkMode(mode) } + } + + fun onAvoidMotorway(enabled: Boolean) { + viewModelScope.launch { repository.setAvoidMotorway(enabled) } + } + + fun onAvoidTollway(enabled: Boolean) { + viewModelScope.launch { repository.setAvoidTollway(enabled) } + } + + fun onCarLocation(enabled: Boolean) { + viewModelScope.launch { repository.setCarLocation(enabled) } + } + + fun onRoutingEngineChanged(mode: Int) { + viewModelScope.launch { repository.setRoutingEngine(mode) } + } +} diff --git a/common/data/src/main/java/com/kouros/navigation/repository/SettingsRepository.kt b/common/data/src/main/java/com/kouros/navigation/repository/SettingsRepository.kt new file mode 100644 index 0000000..234ff08 --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/repository/SettingsRepository.kt @@ -0,0 +1,52 @@ +package com.kouros.navigation.repository + +import com.kouros.navigation.data.datastore.DataStoreManager +import kotlinx.coroutines.flow.Flow + +class SettingsRepository( + private val dataStoreManager: DataStoreManager +) { + + val threedBuildingFlow: Flow = + dataStoreManager.threeDBuildingFlow + val darkModeFlow: Flow = + dataStoreManager.darkModeFlow + + val avoidMotorwayFlow: Flow = + dataStoreManager.avoidMotorwayFlow + + val avoidTollwayFlow: Flow = + dataStoreManager.avoidTollwayFlow + + val carLocationFlow: Flow = + dataStoreManager.useCarLocationFlow + + val routingEngineFlow: Flow = + dataStoreManager.routingEngineFlow + + + suspend fun setThreedBuilding(enabled: Boolean) { + dataStoreManager.setThreedBuilding(enabled) + } + + suspend fun setDarkMode(mode: Int) { + dataStoreManager.setDarkMode(mode) + } + + suspend fun setAvoidMotorway(enabled: Boolean) { + dataStoreManager.setAvoidMotorway(enabled) + } + + suspend fun setAvoidTollway(enabled: Boolean) { + dataStoreManager.setAvoidTollway(enabled) + } + + suspend fun setCarLocation(enabled: Boolean) { + dataStoreManager.setCarLocation(enabled) + } + + suspend fun setRoutingEngine(mode: Int) { + dataStoreManager.setRoutingEngine(mode) + } + +} \ No newline at end of file diff --git a/common/data/src/main/java/com/kouros/navigation/utils/NavigationUtils.kt b/common/data/src/main/java/com/kouros/navigation/utils/NavigationUtils.kt index bce75b9..e381e02 100644 --- a/common/data/src/main/java/com/kouros/navigation/utils/NavigationUtils.kt +++ b/common/data/src/main/java/com/kouros/navigation/utils/NavigationUtils.kt @@ -3,14 +3,20 @@ package com.kouros.navigation.utils import android.content.Context import android.location.Location import android.location.LocationManager +import androidx.car.app.CarContext import androidx.core.content.edit import com.kouros.navigation.data.Constants.ROUTING_ENGINE import com.kouros.navigation.data.Constants.SHARED_PREF_KEY import com.kouros.navigation.data.RouteEngine +import com.kouros.navigation.data.datastore.DataStoreManager import com.kouros.navigation.data.osrm.OsrmRepository import com.kouros.navigation.data.tomtom.TomTomRepository import com.kouros.navigation.data.valhalla.ValhallaRepository -import com.kouros.navigation.model.ViewModel +import com.kouros.navigation.model.NavigationViewModel +import com.kouros.navigation.model.SettingsViewModel +import com.kouros.navigation.repository.SettingsRepository +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking import java.time.LocalDateTime import java.time.ZoneId import java.time.ZoneOffset @@ -26,60 +32,15 @@ import kotlin.time.Duration.Companion.seconds object NavigationUtils { - fun getViewModel(context: Context): ViewModel { - val routeEngine = getIntKeyValue(context = context, ROUTING_ENGINE) + fun getViewModel(context: Context): NavigationViewModel { + val repository = getSettingsRepository(context) + val routeEngine = runBlocking { repository.routingEngineFlow.first() } return when (routeEngine) { - RouteEngine.VALHALLA.ordinal -> ViewModel(ValhallaRepository()) - RouteEngine.OSRM.ordinal -> ViewModel(OsrmRepository()) - else -> ViewModel(TomTomRepository()) + RouteEngine.VALHALLA.ordinal -> NavigationViewModel(ValhallaRepository()) + RouteEngine.OSRM.ordinal -> NavigationViewModel(OsrmRepository()) + else -> NavigationViewModel(TomTomRepository()) } } - - fun getBooleanKeyValue(context: Context, key: String): Boolean { - return context - .getSharedPreferences( - SHARED_PREF_KEY, - Context.MODE_PRIVATE - ) - .getBoolean(key, false) - } - - fun setBooleanKeyValue(context: Context, `val`: Boolean, key: String) { - context - .getSharedPreferences( - SHARED_PREF_KEY, - Context.MODE_PRIVATE - ) - .edit { - putBoolean( - key, `val` - ) - apply() - } - } - - fun getIntKeyValue(context: Context, key: String, default: Int = 0): Int { - return context - .getSharedPreferences( - SHARED_PREF_KEY, - Context.MODE_PRIVATE - ) - .getInt(key, default) - } - - fun setIntKeyValue(context: Context, `val`: Int, key: String) { - context - .getSharedPreferences( - SHARED_PREF_KEY, - Context.MODE_PRIVATE - ) - .edit { - putInt( - key, `val` - ) - apply() - } - } } fun calculateZoom(speed: Double?): Double { @@ -90,8 +51,8 @@ fun calculateZoom(speed: Double?): Double { val zoom = when (speedKmh) { in 0..10 -> 18.0 in 11..30 -> 17.5 - in 31..50 -> 17.0 - in 61..70 -> 16.5 + in 31..65 -> 17.0 + in 66..70 -> 16.5 else -> 16.0 } return zoom diff --git a/common/data/src/main/java/com/kouros/navigation/utils/Settings.kt b/common/data/src/main/java/com/kouros/navigation/utils/Settings.kt new file mode 100644 index 0000000..32531d2 --- /dev/null +++ b/common/data/src/main/java/com/kouros/navigation/utils/Settings.kt @@ -0,0 +1,45 @@ +package com.kouros.navigation.utils + +import android.content.Context +import androidx.car.app.CarContext +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.lifecycle.ViewModel +import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.ViewModelStoreOwner +import androidx.lifecycle.viewmodel.compose.viewModel +import com.kouros.navigation.data.datastore.DataStoreManager +import com.kouros.navigation.model.SettingsViewModel +import com.kouros.navigation.repository.SettingsRepository +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking + + +@Composable +fun settingsViewModel(context: CarContext, viewModelStoreOwner: ViewModelStoreOwner) : SettingsViewModel { + val dataStoreManager = remember { DataStoreManager(context) } + val repository = remember { SettingsRepository(dataStoreManager) } + val settingsViewModel: SettingsViewModel = viewModel( + viewModelStoreOwner, + factory = object : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + @Suppress("UNCHECKED_CAST") + return SettingsViewModel(repository) as T + } + } + ) + return settingsViewModel +} + +fun getSettingsViewModel(context: Context) : SettingsViewModel { + val dataStoreManager = DataStoreManager(context) + val repository = SettingsRepository(dataStoreManager) + return SettingsViewModel( repository) +} + +fun getSettingsRepository(context: Context) : SettingsRepository { + val dataStore = DataStoreManager(context) + return SettingsRepository(dataStore) +} + + diff --git a/common/data/src/main/res/drawable/ic_turn_merge_symmetrical.png b/common/data/src/main/res/drawable/ic_turn_merge_symmetrical.png new file mode 100644 index 0000000..5925a8c Binary files /dev/null and b/common/data/src/main/res/drawable/ic_turn_merge_symmetrical.png differ diff --git a/common/data/src/main/res/drawable/ic_turn_sharp_left.png b/common/data/src/main/res/drawable/ic_turn_sharp_left.png new file mode 100644 index 0000000..8b29193 Binary files /dev/null and b/common/data/src/main/res/drawable/ic_turn_sharp_left.png differ diff --git a/common/data/src/main/res/drawable/ic_turn_sharp_right.png b/common/data/src/main/res/drawable/ic_turn_sharp_right.png new file mode 100644 index 0000000..f9adbb6 Binary files /dev/null and b/common/data/src/main/res/drawable/ic_turn_sharp_right.png differ diff --git a/common/data/src/main/res/drawable/ic_turn_u_turn_left.png b/common/data/src/main/res/drawable/ic_turn_u_turn_left.png new file mode 100644 index 0000000..e37bbbe Binary files /dev/null and b/common/data/src/main/res/drawable/ic_turn_u_turn_left.png differ diff --git a/common/data/src/main/res/drawable/ic_turn_u_turn_right.png b/common/data/src/main/res/drawable/ic_turn_u_turn_right.png new file mode 100644 index 0000000..9f26af1 Binary files /dev/null and b/common/data/src/main/res/drawable/ic_turn_u_turn_right.png differ diff --git a/common/data/src/main/res/raw/osrm_hv.json b/common/data/src/main/res/raw/osrm_hv.json deleted file mode 100644 index c5629d4..0000000 --- a/common/data/src/main/res/raw/osrm_hv.json +++ /dev/null @@ -1,1313 +0,0 @@ -{ - "code": "Ok", - "routes": [ - { - "legs": [ - { - "steps": [ - { - "intersections": [ - { - "out": 0, - "entry": [true], - "bearings": [183], - "location": [11.594216, 48.116506] - } - ], - "driving_side": "right", - "geometry": "ewtdH{nweAH@H?`@B", - "maneuver": { - "bearing_after": 183, - "bearing_before": 0, - "location": [11.594216, 48.116506], - "type": "depart" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 6.5, - "duration": 6.5, - "distance": 30 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 180, 270], - "location": [11.594192, 48.116237] - } - ], - "driving_side": "right", - "geometry": "outdHunweAClCCfB?P", - "maneuver": { - "bearing_after": 271, - "bearing_before": 182, - "location": [11.594192, 48.116237], - "modifier": "right", - "type": "turn" - }, - "name": "Maxlrainstraße", - "mode": "driving", - "weight": 17, - "duration": 17, - "distance": 98.8 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.592867, 48.11628] - } - ], - "driving_side": "right", - "geometry": "wutdHmfweAuG_@I@I@MF", - "maneuver": { - "bearing_after": 4, - "bearing_before": 272, - "location": [11.592867, 48.11628], - "modifier": "right", - "type": "turn" - }, - "name": "Schlierseestraße", - "mode": "driving", - "weight": 28.2, - "duration": 28.2, - "distance": 175 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false, true], - "bearings": [75, 165, 255], - "location": [11.592971, 48.117844] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.594178, 48.118127] - }, - { - "out": 1, - "in": 3, - "entry": [true, true, true, false], - "bearings": [15, 75, 165, 240], - "location": [11.595294, 48.118425] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.598066, 48.119071] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false, false], - "bearings": [75, 165, 255, 345], - "location": [11.60013, 48.119533] - }, - { - "out": 0, - "in": 1, - "entry": [true, false, true], - "bearings": [75, 255, 345], - "location": [11.602518, 48.120034] - } - ], - "driving_side": "right", - "geometry": "o_udHagweAEYG[k@{Da@eCYwAQeAOgAm@mEMy@Is@EWEWKq@Ig@Ig@Gc@WeBM_ACUM{@AOE_@EYCSKy@E[E_@Ig@Ge@Io@_@uC?GCOAMG[?IWuBSeBKcAE[Iq@Is@EeAUmBCUEe@", - "maneuver": { - "bearing_after": 70, - "bearing_before": 340, - "location": [11.592971, 48.117844], - "modifier": "right", - "type": "turn" - }, - "name": "Sankt-Martin-Straße", - "mode": "driving", - "weight": 103.6, - "duration": 103.6, - "distance": 1020.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false, false], - "bearings": [75, 150, 255, 330], - "location": [11.605995, 48.120672] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, false, false, true], - "bearings": [75, 135, 255, 315], - "location": [11.606356, 48.12074] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [90, 180, 270], - "location": [11.608668, 48.120937] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [90, 180, 270], - "location": [11.610114, 48.120959] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [90, 180, 270], - "location": [11.611401, 48.120909] - } - ], - "driving_side": "right", - "geometry": "equdHoxyeAIo@CWE[CSGy@CkAGgBEcBCkA?SCkB?_D?]BuBDmBBy@FyAFsA@S@c@", - "maneuver": { - "bearing_after": 73, - "bearing_before": 73, - "location": [11.605995, 48.120672], - "modifier": "straight", - "type": "new name" - }, - "name": "Anzinger Straße", - "mode": "driving", - "weight": 48.1, - "duration": 48.1, - "distance": 513.7 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "none" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [0, 90, 180, 285], - "location": [11.612843, 48.120788] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "none" - ] - } - ], - "out": 0, - "in": 3, - "entry": [true, true, false, false], - "bearings": [0, 90, 180, 270], - "location": [11.613019, 48.120777] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, false, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.613021, 48.120881] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [0, 105, 180], - "location": [11.613013, 48.121358] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 180, 270], - "location": [11.613011, 48.122299] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.613026, 48.122579] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false, true], - "bearings": [0, 90, 180, 285], - "location": [11.613096, 48.123372] - } - ], - "driving_side": "right", - "geometry": "}qudHgc{eA@c@S?W?gA@c@?M?c@?gA@]Aw@CsAEa@Cg@CkCOwAIE?OAKA", - "maneuver": { - "bearing_after": 94, - "bearing_before": 97, - "location": [11.612843, 48.120788], - "modifier": "left", - "type": "turn" - }, - "name": "Aschheimer Straße", - "mode": "driving", - "weight": 48.1, - "duration": 48.1, - "distance": 448 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.613248, 48.124682] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false, true], - "bearings": [15, 105, 195, 285], - "location": [11.61377, 48.127083] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [15, 105, 210], - "location": [11.614651, 48.128776] - }, - { - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [0, 30, 165, 210], - "location": [11.615108, 48.129439] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [15, 180, 195], - "location": [11.615514, 48.130011] - } - ], - "driving_side": "right", - "geometry": "gjvdHye{eAQAoDWoAO{@OaAQOCe@MICICEAOEGA[Iq@Qe@Qg@U_DcBm@[u@e@WQGGw@m@y@a@k@QWGq@S[KKCKC", - "maneuver": { - "bearing_after": 4, - "bearing_before": 4, - "location": [11.613248, 48.124682], - "modifier": "straight", - "type": "new name" - }, - "name": "Ampfingstraße", - "mode": "driving", - "weight": 68.5, - "duration": 68.5, - "distance": 719.1 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false, false], - "bearings": [15, 105, 195, 285], - "location": [11.615844, 48.130857] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, false, false, true], - "bearings": [15, 105, 195, 285], - "location": [11.61591, 48.131023] - } - ], - "driving_side": "right", - "geometry": "{pwdH_v{eAKEEAMEIC]KkEoAaB_@]C", - "maneuver": { - "bearing_after": 14, - "bearing_before": 14, - "location": [11.615844, 48.130857], - "modifier": "straight", - "type": "new name" - }, - "name": "Leuchtenbergring", - "mode": "driving", - "weight": 20.9, - "duration": 20.9, - "distance": 231.3 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [0, 180], - "location": [11.616572, 48.132878] - } - ], - "driving_side": "right", - "geometry": "o}wdHqz{eAQCS?SBSH", - "maneuver": { - "bearing_after": 5, - "bearing_before": 5, - "location": [11.616572, 48.132878], - "modifier": "straight", - "type": "on ramp" - }, - "name": "Leuchtenbergring", - "mode": "driving", - "weight": 4, - "duration": 4, - "distance": 44.6 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [165, 180, 345], - "location": [11.616516, 48.133271] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [165, 345], - "location": [11.61641, 48.133598] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 347, - "bearing_before": 351, - "location": [11.616516, 48.133271], - "modifier": "slight left", - "type": "merge" - }, - "geometry": "}_xdHgz{eA]Fc@LyGlC", - "ref": "B 2R", - "name": "Leuchtenbergring", - "mode": "driving", - "weight": 15.2, - "duration": 15.2, - "distance": 202.3 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true], - "bearings": [165, 345], - "location": [11.615702, 48.135005] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "slight right" - ] - } - ], - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 165, 345], - "location": [11.615677, 48.135053] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [165, 345], - "location": [11.615072, 48.136438] - }, - { - "out": 0, - "classes": [ - "tunnel" - ], - "in": 1, - "entry": [true, false, false], - "bearings": [0, 165, 180], - "location": [11.614753, 48.137979] - }, - { - "out": 0, - "classes": [ - "tunnel" - ], - "in": 2, - "entry": [true, true, false], - "bearings": [0, 15, 195], - "location": [11.615982, 48.146211] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 340, - "bearing_before": 340, - "location": [11.615702, 48.135005], - "modifier": "straight", - "type": "new name" - }, - "geometry": "yjxdHcu{eAGBcA`@SJw@Xk@RyA\\kARq@J[DyCXuCIcAIia@gDiBOi@E}@KwBWmGs@sCW_CGkC@S?O@", - "ref": "B 2R", - "name": "Richard-Strauss-Tunnel", - "mode": "driving", - "weight": 124.7, - "duration": 124.7, - "distance": 1662.2 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [0, 180], - "location": [11.616382, 48.149817] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [165, 330, 345], - "location": [11.616037, 48.150923] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [135, 315], - "location": [11.614825, 48.152297] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 354, - "bearing_before": 357, - "location": [11.616382, 48.149817], - "modifier": "straight", - "type": "new name" - }, - "geometry": "kg{dHky{eAc@B_@FYDUFc@JG@WHc@P]NWN_@TULcAz@KHMJMNIJIJORMPIL{@xAcAfB", - "ref": "B 2R", - "name": "Richard-Strauss-Straße", - "mode": "driving", - "weight": 30.6, - "duration": 30.6, - "distance": 405.8 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true], - "bearings": [135, 315], - "location": [11.613863, 48.152938] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [118, 127, 306], - "location": [11.611642, 48.154187] - }, - { - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 150, 330], - "location": [11.602503, 48.158477] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [135, 150, 330], - "location": [11.601414, 48.159873] - }, - { - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 150, 315], - "location": [11.600912, 48.160375] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [90, 135, 315], - "location": [11.600524, 48.160681] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": false, - "indications": [ - "slight right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [135, 315, 330], - "location": [11.597368, 48.162513] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [165, 345], - "location": [11.596156, 48.163886] - }, - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [30, 210], - "location": [11.597027, 48.166529] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [30, 195, 210], - "location": [11.598404, 48.168486] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [23, 34, 204], - "location": [11.599562, 48.170168] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [120, 300], - "location": [11.597687, 48.17329] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "slight right" - ] - } - ], - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true, true], - "bearings": [120, 300, 315], - "location": [11.597462, 48.173404] - }, - { - "out": 1, - "in": 0, - "entry": [false, true], - "bearings": [120, 300], - "location": [11.596723, 48.173776] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [105, 120, 300], - "location": [11.593114, 48.175507] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [105, 120, 300], - "location": [11.591949, 48.176025] - }, - { - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 120, 300], - "location": [11.590249, 48.176722] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "slight right" - ] - }, - { - "valid": true, - "indications": [ - "slight right" - ] - } - ], - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [60, 120, 300], - "location": [11.589926, 48.176844] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 313, - "bearing_before": 313, - "location": [11.613863, 48.152938], - "modifier": "straight", - "type": "new name" - }, - "geometry": "{z{dHsi{eAkAvBo@lAg@hAuAjDk@zAu@pB]fA_@lA_AvC[`Ac@xAcAdDYbAKX{@vC{BpHK\\Wx@Yx@[v@[l@]l@S\\]b@QT]\\ONQP}@v@e@XuBxA{@l@OLq@n@c@d@[d@_@f@a@n@QXIP]n@}AbDaBtDi@jAg@bA]p@i@r@e@d@u@j@_@Rm@Xa@Jk@JwAB}AUaDiAkC}AoG{DcAq@s@c@OKcCyAMKGCw@g@u@c@w@e@OGOI]Ui@YSKc@QSEQEOAOAS?OBQ@YHQF_@RYTQPSVYf@[n@_A`CqA~CUl@kArC{@tB{@tB[r@iAvCe@tA[~@a@nAWr@Mb@g@|A[`AUb@w@dCo@rBa@xAW~@GPWdA", - "ref": "B 2R", - "name": "Isarring", - "mode": "driving", - "weight": 295.5, - "duration": 295.5, - "distance": 3753.6 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "slight right" - ] - }, - { - "valid": true, - "indications": [ - "slight right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [119, 297, 299], - "location": [11.589491, 48.177003] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [90, 150, 270], - "location": [11.58617, 48.177694] - } - ], - "driving_side": "right", - "geometry": "gq`eHiqveASZWdAET_@hBU`BSrBGdAExA?~@?tAAJ@`@", - "maneuver": { - "bearing_after": 298, - "bearing_before": 298, - "location": [11.589491, 48.177003], - "modifier": "slight right", - "type": "off ramp" - }, - "destinations": "Ingolstadt, Zentrum, Euro-Industrie-Park", - "name": "Schenkendorfstraße", - "mode": "driving", - "weight": 31.8, - "duration": 31.8, - "distance": 312.2 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 1, - "entry": [true, false, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.585509, 48.177692] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [0, 90, 180], - "location": [11.585277, 48.178525] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.585108, 48.180153] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false, false], - "bearings": [0, 90, 180, 270], - "location": [11.584977, 48.18174] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 352, - "bearing_before": 268, - "location": [11.585509, 48.177692], - "modifier": "right", - "type": "turn" - }, - "geometry": "qu`eHmxueAUBI@IDKFKHIDI@MBi@@Y@qDPQ@MDqAF_@?Y?uBHI@K?cAFw@BI?Q@S@u@Dq@B_@BO?yBJ}@Du@B}@DK@a@@", - "ref": "B 13", - "name": "Leopoldstraße", - "mode": "driving", - "weight": 78.8, - "duration": 78.8, - "distance": 742.1 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 3, - "in": 2, - "entry": [true, true, false, true], - "bearings": [0, 90, 180, 255], - "location": [11.584735, 48.184328] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 3, - "in": 1, - "entry": [false, false, true, true], - "bearings": [0, 75, 180, 270], - "location": [11.58458, 48.184313] - } - ], - "driving_side": "right", - "geometry": "a_beHssueAB^@^?N@p@?H?d@?v@@n@BfA", - "maneuver": { - "bearing_after": 261, - "bearing_before": 355, - "location": [11.584735, 48.184328], - "modifier": "left", - "type": "turn" - }, - "name": "Milbertshofener Straße", - "mode": "driving", - "weight": 23.3, - "duration": 23.3, - "distance": 131.3 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.582974, 48.184264] - } - ], - "driving_side": "right", - "geometry": "s~aeHqhueAK?S@O@]A]?QAI?I?A?G?KAg@AUA", - "maneuver": { - "bearing_after": 358, - "bearing_before": 265, - "location": [11.582974, 48.184264], - "modifier": "right", - "type": "turn" - }, - "name": "Bad-Soden-Straße", - "mode": "driving", - "weight": 24.6, - "duration": 24.6, - "distance": 128 - }, - { - "intersections": [ - { - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 180, 270], - "location": [11.583, 48.185414] - }, - { - "out": 3, - "in": 1, - "entry": [false, false, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.580736, 48.185499] - } - ], - "driving_side": "right", - "geometry": "yebeHwhueACt@Ar@Ar@ChCCv@Ar@?n@Az@Aj@?h@AJ?l@AN?X?L?RAL", - "maneuver": { - "bearing_after": 274, - "bearing_before": 2, - "location": [11.583, 48.185414], - "modifier": "left", - "type": "turn" - }, - "name": "Vogelhartstraße", - "mode": "driving", - "weight": 41.6, - "duration": 41.6, - "distance": 277.7 - }, - { - "intersections": [ - { - "in": 0, - "entry": [true], - "bearings": [92], - "location": [11.579272, 48.185546] - } - ], - "driving_side": "right", - "geometry": "ufbeHmqteA", - "maneuver": { - "bearing_after": 0, - "bearing_before": 272, - "location": [11.579272, 48.185546], - "modifier": "right", - "type": "arrive" - }, - "name": "Vogelhartstraße", - "mode": "driving", - "weight": 0, - "duration": 0, - "distance": 0 - } - ], - "weight": 1011, - "summary": "Richard-Strauss-Tunnel, Isarring", - "duration": 1011, - "distance": 10896 - } - ], - "weight_name": "routability", - "geometry": "ewtdH{nweAl@lGwHSwHug@}Gim@Hie@{c@yBif@oQi^nJcjAaIgOjKu^`cA}ObOmQzZqIr@ac@oVeG^g^f`AuB~Voh@xCL`JeFE[hV", - "weight": 1011, - "duration": 1011, - "distance": 10896 - } - ], - "waypoints": [ - { - "hint": "hL-3gP___39UAAAAXAAAALsAAAAlAAAANGViQmDZnEC7evlCiIDIQVQAAABcAAAAuwAAACUAAACYEgAA6OmwABoz3gLh6bAAGjPeAhAAfwsAAAAA", - "location": [11.594216, 48.116506], - "name": "Hohenwaldeckstraße", - "distance": 0.52111432 - }, - { - "hint": "77u6gP___38IAAAAFwAAACoAAABPAAAAkoCrQO2zH0HxL95ByfNUQggAAAAXAAAAKgAAAE8AAACYEgAAiK-wAMpA3wKQr7AAN0HfAggADxEAAAAA", - "location": [11.579272, 48.185546], - "name": "Vogelhartstraße", - "distance": 12.13471123 - } - ] -} \ No newline at end of file diff --git a/common/data/src/main/res/raw/osrm_vh.json b/common/data/src/main/res/raw/osrm_vh.json deleted file mode 100644 index 18c3e7a..0000000 --- a/common/data/src/main/res/raw/osrm_vh.json +++ /dev/null @@ -1,4706 +0,0 @@ -{ - "code": "Ok", - "routes": [ - { - "legs": [ - { - "steps": [ - { - "intersections": [ - { - "out": 0, - "entry": [true], - "bearings": [273], - "location": [11.579345, 48.185544] - } - ], - "driving_side": "right", - "geometry": "sfbeH{qteAAf@Af@?f@Aj@?R", - "maneuver": { - "bearing_after": 273, - "bearing_before": 0, - "location": [11.579345, 48.185544], - "modifier": "right", - "type": "depart" - }, - "name": "Vogelhartstraße", - "mode": "driving", - "weight": 12.6, - "duration": 12.6, - "distance": 68.7 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false, false, true], - "bearings": [0, 90, 195, 270], - "location": [11.578423, 48.185574] - } - ], - "driving_side": "right", - "geometry": "yfbeHclteAk@EYCkAGa@Cc@CC?y@A", - "maneuver": { - "bearing_after": 4, - "bearing_before": 271, - "location": [11.578423, 48.185574], - "modifier": "right", - "type": "turn" - }, - "name": "Silcherstraße", - "mode": "driving", - "weight": 25.2, - "duration": 25.2, - "distance": 154.2 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false, true], - "bearings": [90, 180, 270], - "location": [11.578564, 48.186957] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [90, 195, 270], - "location": [11.58106, 48.18689] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [90, 180, 270], - "location": [11.583158, 48.186877] - } - ], - "driving_side": "right", - "geometry": "oobeH_mteA@cADmC@uABkE@wA@gDAsB?Y?U?I?q@?_@@g@?IAiAAY", - "maneuver": { - "bearing_after": 91, - "bearing_before": 1, - "location": [11.578564, 48.186957], - "modifier": "right", - "type": "turn" - }, - "name": "Schmalkaldener Straße", - "mode": "driving", - "weight": 67, - "duration": 67, - "distance": 432.1 - }, - { - "intersections": [ - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [0, 180, 270], - "location": [11.584371, 48.186885] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [0, 150, 180], - "location": [11.584381, 48.186715] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 180, 270], - "location": [11.584506, 48.185225] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 75, 180, 270], - "location": [11.58458, 48.184313] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.584821, 48.181732] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 90, 180], - "location": [11.584973, 48.18015] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, false], - "bearings": [0, 180, 270], - "location": [11.585106, 48.178587] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [15, 90, 195, 270], - "location": [11.585104, 48.177692] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 177, - "bearing_before": 87, - "location": [11.584371, 48.186885], - "modifier": "right", - "type": "end of road" - }, - "geometry": "aobeHiqueA`@A\\ChDMd@Az@ElCIHA^A^Cp@CF?fFUz@EhBIF?RANAh@CbCMbAETAJAV?lCIhDQ`AE\\C\\AZ@F@HDFBJDJBXDPB", - "ref": "B 13", - "name": "Ingolstädter Straße", - "mode": "driving", - "weight": 112.1, - "duration": 112.1, - "distance": 1063.9 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, true, true, true, false], - "bearings": [15, 75, 90, 180, 270], - "location": [11.585001, 48.177346] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, false, false], - "bearings": [15, 75, 180, 270], - "location": [11.585474, 48.177353] - }, - { - "out": 0, - "in": 1, - "entry": [true, false, false], - "bearings": [90, 255, 315], - "location": [11.586131, 48.177456] - }, - { - "out": 0, - "classes": [ - "tunnel" - ], - "in": 1, - "entry": [true, false], - "bearings": [105, 285], - "location": [11.58707, 48.17739] - }, - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [120, 300], - "location": [11.589463, 48.176823] - } - ], - "driving_side": "right", - "geometry": "ms`eHguueAD]?O?OE_@Kk@Ca@Eu@D_BF{AHkALqALgAPgAHe@Ha@Ps@Rs@Jc@J_@", - "maneuver": { - "bearing_after": 90, - "bearing_before": 191, - "location": [11.585001, 48.177346], - "modifier": "left", - "type": "on ramp" - }, - "name": "Schenkendorfstraße", - "mode": "driving", - "weight": 35.8, - "duration": 35.8, - "distance": 375.2 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "slight right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [120, 135, 300], - "location": [11.589803, 48.176704] - } - ], - "driving_side": "right", - "geometry": "ko`eHgsveAF[XaAZiA^mALe@@Y", - "maneuver": { - "bearing_after": 118, - "bearing_before": 116, - "location": [11.589803, 48.176704], - "modifier": "slight left", - "type": "fork" - }, - "name": "Schenkendorfstraße", - "mode": "driving", - "weight": 11.8, - "duration": 11.8, - "distance": 131.4 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false, false], - "bearings": [122, 297, 302], - "location": [11.591352, 48.176148] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [120, 285, 300], - "location": [11.592029, 48.17586] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "slight right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [120, 135, 300], - "location": [11.594022, 48.174977] - }, - { - "out": 0, - "classes": [ - "tunnel" - ], - "in": 1, - "entry": [true, false], - "bearings": [120, 315], - "location": [11.596646, 48.173717] - }, - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [120, 300], - "location": [11.597609, 48.173233] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [14, 21, 205], - "location": [11.599736, 48.170666] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [30, 210, 225], - "location": [11.598911, 48.169478] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [15, 30, 210], - "location": [11.597915, 48.168028] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [30, 210], - "location": [11.59692, 48.166605] - }, - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [165, 345], - "location": [11.596001, 48.163978] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [135, 300, 315], - "location": [11.597365, 48.162396] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 150, 315], - "location": [11.599799, 48.161034] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [135, 240, 315], - "location": [11.600215, 48.160767] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 165, 330], - "location": [11.602935, 48.15794] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [120, 285, 300], - "location": [11.60442, 48.157119] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [120, 135, 300], - "location": [11.611708, 48.154071] - }, - { - "out": 0, - "classes": [ - "tunnel" - ], - "in": 1, - "entry": [true, false], - "bearings": [135, 315], - "location": [11.613781, 48.152885] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 122, - "bearing_before": 115, - "location": [11.591352, 48.176148], - "modifier": "slight left", - "type": "merge" - }, - "geometry": "}k`eH}|veAx@gCfAcDrA{DRm@Pw@l@aBdAkCz@uBx@qBjAsCTk@jCuG^w@Ve@JOHKNOLMPMTKNGXINAPAP?N@VB\\Jz@`@v@f@~A~@tA|@r@`@LHNJnElChFbDp@b@rC`BdDjA~ATvAEZEREf@Mh@Wb@Wv@o@d@c@d@q@l@gAhAaC~AsDfBoDr@sA|@sA\\a@Z_@p@q@HIbAu@rBwAd@[`Ay@b@a@X[TYLQRWNW\\m@Xo@^}@Xy@La@FSL_@xBoHz@qCZaALa@`AeDb@wA\\kAx@oCb@qA\\cAt@sBt@sBfAoCh@iAl@mAjAuBdAiBz@uA", - "ref": "B 2R", - "name": "Schenkendorfstraße", - "mode": "driving", - "weight": 285.8, - "duration": 285.8, - "distance": 3685.4 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [135, 315], - "location": [11.614743, 48.152244] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [165, 330, 345], - "location": [11.615995, 48.150723] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 135, - "bearing_before": 135, - "location": [11.614743, 48.152244], - "modifier": "straight", - "type": "new name" - }, - "geometry": "ov{dHco{eAHONULQLONQLM^[j@e@XQ\\QZQ\\M\\MXKf@Kn@Kd@E^E", - "ref": "B 2R", - "name": "Richard-Strauss-Straße", - "mode": "driving", - "weight": 22.3, - "duration": 22.3, - "distance": 299.5 - }, - { - "intersections": [ - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [0, 180], - "location": [11.61624, 48.1498] - }, - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true, true], - "bearings": [0, 165, 180], - "location": [11.614595, 48.137999] - }, - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [165, 345], - "location": [11.614951, 48.136421] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 180, - "bearing_before": 172, - "location": [11.61624, 48.1498], - "modifier": "straight", - "type": "new name" - }, - "geometry": "gg{dHox{eA`@?rA?~@@X?T?Z@lADfCTjJdA|@Jj@DfBPp[rCjDXnAJvBFZCzHeAxA_@l@Qt@[pAi@", - "ref": "B 2R", - "name": "Richard-Strauss-Tunnel", - "mode": "driving", - "weight": 124.1, - "duration": 124.1, - "distance": 1653.9 - }, - { - "intersections": [ - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [165, 315, 345], - "location": [11.615548, 48.135064] - }, - { - "out": 0, - "classes": [ - "tunnel" - ], - "in": 1, - "entry": [true, false], - "bearings": [165, 345], - "location": [11.615591, 48.134991] - }, - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [165, 345], - "location": [11.616284, 48.13357] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [180, 195, 345], - "location": [11.616365, 48.133153] - }, - { - "out": 1, - "in": 0, - "entry": [false, true], - "bearings": [15, 195], - "location": [11.615923, 48.131602] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 157, - "bearing_before": 160, - "location": [11.615548, 48.135064], - "modifier": "straight", - "type": "new name" - }, - "geometry": "ckxdHet{eALGzGiCRGVERCR?TAD?`@BH@xBh@rBj@lA^", - "ref": "B 2R", - "name": "Leuchtenbergring", - "mode": "driving", - "weight": 33.4, - "duration": 33.4, - "distance": 443.8 - }, - { - "intersections": [ - { - "out": 1, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true], - "bearings": [15, 195], - "location": [11.615761, 48.131208] - } - ], - "driving_side": "right", - "maneuver": { - "bearing_after": 194, - "bearing_before": 194, - "location": [11.615761, 48.131208], - "modifier": "straight", - "type": "new name" - }, - "geometry": "aswdHou{eA|ErAf@J", - "ref": "B 2R", - "name": "Innsbrucker-Ring-Tunnel", - "mode": "driving", - "weight": 11.2, - "duration": 11.2, - "distance": 149.6 - }, - { - "intersections": [ - { - "out": 2, - "classes": [ - "tunnel" - ], - "in": 0, - "entry": [false, true, true], - "bearings": [15, 180, 210], - "location": [11.615282, 48.129902] - }, - { - "out": 1, - "in": 0, - "entry": [false, true], - "bearings": [30, 210], - "location": [11.614931, 48.129418] - } - ], - "driving_side": "right", - "geometry": "{jwdHor{eA~AdAhCvAnCxA`Ab@t@X", - "maneuver": { - "bearing_after": 205, - "bearing_before": 192, - "location": [11.615282, 48.129902], - "modifier": "slight right", - "type": "off ramp" - }, - "name": "", - "mode": "driving", - "weight": 27, - "duration": 27, - "distance": 300.1 - }, - { - "intersections": [ - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [0, 15, 195], - "location": [11.613727, 48.127414] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.613613, 48.127108] - } - ], - "driving_side": "right", - "geometry": "i{vdHyh{eA^JD@JDHBJBD@d@NvA\\|@Lf@FF@\\Bh@Dh@BtAHJ@P@", - "maneuver": { - "bearing_after": 194, - "bearing_before": 198, - "location": [11.613727, 48.127414], - "modifier": "straight", - "type": "turn" - }, - "name": "Ampfingstraße", - "mode": "driving", - "weight": 31.4, - "duration": 31.4, - "distance": 307.5 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.613091, 48.124689] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 105, 180], - "location": [11.612954, 48.123397] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 180, 270], - "location": [11.612939, 48.123269] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.612878, 48.122584] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.612861, 48.122308] - } - ], - "driving_side": "right", - "geometry": "ijvdHyd{eAJ@r@B`ETX@P@t@D`ABX@Z@\\?b@?b@Ad@@T?z@?T?L?X@", - "maneuver": { - "bearing_after": 182, - "bearing_before": 184, - "location": [11.613091, 48.124689], - "modifier": "straight", - "type": "new name" - }, - "name": "Aschheimer Straße", - "mode": "driving", - "weight": 44.9, - "duration": 44.9, - "distance": 422.8 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "none" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - } - ], - "out": 3, - "in": 0, - "entry": [false, false, true, true], - "bearings": [0, 90, 180, 285], - "location": [11.612849, 48.120892] - } - ], - "driving_side": "right", - "geometry": "qrudHic{eAC`@IhBGvBGfCC`C?ZAfBB~CJbEFvBFnC@VD^", - "maneuver": { - "bearing_after": 277, - "bearing_before": 180, - "location": [11.612849, 48.120892], - "modifier": "right", - "type": "turn" - }, - "name": "Anzinger Straße", - "mode": "driving", - "weight": 46.8, - "duration": 46.8, - "distance": 498.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [90, 135, 255, 315], - "location": [11.606184, 48.120874] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [75, 150, 240, 315], - "location": [11.605843, 48.120813] - }, - { - "out": 2, - "in": 1, - "entry": [false, false, true], - "bearings": [45, 60, 240], - "location": [11.605401, 48.120687] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [75, 255, 345], - "location": [11.602518, 48.120034] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [75, 165, 255, 345], - "location": [11.60013, 48.119533] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [75, 165, 255], - "location": [11.598066, 48.119071] - }, - { - "out": 3, - "in": 1, - "entry": [true, false, true, true], - "bearings": [15, 75, 165, 240], - "location": [11.595294, 48.118425] - } - ], - "driving_side": "right", - "geometry": "mrudHsyyeABTFl@DZPz@R~@Tv@Hr@Hp@DZJbARdBVtB?HFZ@LBN?F^tCHn@Fd@Hf@D^DZJx@BRDXD^@NLz@BTL~@VdBFb@Hf@Hf@Jp@DVDVHr@Lx@l@lENfAPdAXvA`@dC", - "maneuver": { - "bearing_after": 254, - "bearing_before": 262, - "location": [11.606184, 48.120874], - "modifier": "straight", - "type": "new name" - }, - "name": "Sankt-Martin-Straße", - "mode": "driving", - "weight": 94.8, - "duration": 94.8, - "distance": 945.8 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [75, 165, 255], - "location": [11.594178, 48.118127] - } - ], - "driving_side": "right", - "geometry": "iaudHsnweAPCJCRETELCh@Al@Bp@DxAF", - "maneuver": { - "bearing_after": 168, - "bearing_before": 247, - "location": [11.594178, 48.118127], - "modifier": "left", - "type": "turn" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 26.3, - "duration": 26.3, - "distance": 175.9 - }, - { - "intersections": [ - { - "in": 0, - "entry": [true], - "bearings": [4], - "location": [11.594221, 48.116555] - } - ], - "driving_side": "right", - "geometry": "owtdH{nweA", - "maneuver": { - "bearing_after": 0, - "bearing_before": 184, - "location": [11.594221, 48.116555], - "modifier": "left", - "type": "arrive" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 0, - "duration": 0, - "distance": 0 - } - ], - "weight": 1012.5, - "summary": "Isarring, Richard-Strauss-Tunnel", - "duration": 1012.5, - "distance": 11107.8 - } - ], - "weight_name": "routability", - "geometry": "sfbeH{qteAEvDuG[Lic@rz@}BN{P~EyTfZkt@bDC`d@bWtKiB|NkXxPiPt^ccA|MuJ`jA~H`_@gJjh@|Qja@bBAtg@jMr_A|AjJxHG", - "weight": 1012.5, - "duration": 1012.5, - "distance": 11107.8 - }, - { - "legs": [ - { - "steps": [ - { - "intersections": [ - { - "out": 0, - "entry": [true], - "bearings": [273], - "location": [11.579345, 48.185544] - }, - { - "out": 3, - "in": 1, - "entry": [true, false, false, true], - "bearings": [0, 90, 195, 270], - "location": [11.578423, 48.185574] - } - ], - "driving_side": "right", - "geometry": "sfbeH{qteAAf@Af@?f@Aj@?RA^A\\?XAf@Ab@?LAb@At@?n@Ad@A`@AZ", - "maneuver": { - "bearing_after": 273, - "bearing_before": 0, - "location": [11.579345, 48.185544], - "modifier": "right", - "type": "depart" - }, - "name": "Vogelhartstraße", - "mode": "driving", - "weight": 33.6, - "duration": 33.6, - "distance": 224.1 - }, - { - "intersections": [ - { - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 90, 255], - "location": [11.576336, 48.185655] - } - ], - "driving_side": "right", - "geometry": "kgbeHc_teA@RHJXBX@T@X@f@@b@@d@@X@F@", - "maneuver": { - "bearing_after": 251, - "bearing_before": 272, - "location": [11.576336, 48.185655], - "modifier": "slight left", - "type": "new name" - }, - "name": "Bad-Kreuznacher-Straße", - "mode": "driving", - "weight": 25.2, - "duration": 25.2, - "distance": 152.4 - }, - { - "intersections": [ - { - "out": 3, - "in": 0, - "entry": [false, true, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.576084, 48.184359] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [90, 180, 270], - "location": [11.575007, 48.184411] - } - ], - "driving_side": "right", - "geometry": "g_beHo}seACbA?N?NA`@AN?NAn@E~CEnCAlA?N?\\", - "maneuver": { - "bearing_after": 272, - "bearing_before": 181, - "location": [11.576084, 48.184359], - "modifier": "right", - "type": "turn" - }, - "name": "Milbertshofener Straße", - "mode": "driving", - "weight": 45.8, - "duration": 45.8, - "distance": 239.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "none" - ] - } - ], - "out": 2, - "in": 1, - "entry": [true, false, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.572872, 48.184483] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 255], - "location": [11.572942, 48.183552] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.573003, 48.182772] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.573079, 48.18177] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [0, 90, 180, 270], - "location": [11.573147, 48.180878] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [0, 105, 180, 270], - "location": [11.573231, 48.180056] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, false], - "bearings": [0, 90, 180, 255], - "location": [11.573286, 48.179045] - } - ], - "driving_side": "right", - "geometry": "_`beHmiseARAH?fAEh@Ch@AzCKnBIJ?r@CD?PARAD?b@AZAvAGlCMTA`BGn@Cv@?TJXDj@JLBNBf@LFBPDHF", - "maneuver": { - "bearing_after": 175, - "bearing_before": 271, - "location": [11.572872, 48.184483], - "modifier": "left", - "type": "turn" - }, - "name": "Knorrstraße", - "mode": "driving", - "weight": 68.5, - "duration": 68.5, - "distance": 718.2 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [15, 75, 195, 255], - "location": [11.572944, 48.17806] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [15, 90, 195, 270], - "location": [11.572835, 48.177874] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 90, 180], - "location": [11.572602, 48.177193] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [0, 90, 180], - "location": [11.572588, 48.177029] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [0, 45, 180], - "location": [11.573155, 48.172476] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 90, 180], - "location": [11.573465, 48.170274] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.573891, 48.167151] - }, - { - "out": 1, - "in": 3, - "entry": [true, true, true, true], - "bearings": [90, 180, 285, 345], - "location": [11.574364, 48.1645] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 105, 180, 285], - "location": [11.574558, 48.163462] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 285], - "location": [11.574729, 48.162487] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 90, 180], - "location": [11.574842, 48.161829] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 255], - "location": [11.574958, 48.161138] - }, - { - "out": 3, - "in": 0, - "entry": [false, false, false, true, false, true], - "bearings": [0, 105, 135, 225, 255, 285], - "location": [11.575051, 48.160346] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, false], - "bearings": [45, 195, 315], - "location": [11.574875, 48.160201] - } - ], - "driving_side": "right", - "geometry": "{w`eH{iseAd@RPHPFTFND`@HZDRBJAp@AxAG~BMH?b@CLAVApBKVC~BS|AM`CS`@E`@EPANAZCnAKpAIn@Eh@GN?dAID?DAPCJAPA@?z@KfEY~Fc@L?f@CDAF?RANAJAZAbAI\\Gp@EX@PA`@IfE[`@IHKBCZEd@GtBUVCNCzBS^ETCRAVCvAOhCW`@EtAMBAD?B?B?F@J@@@BFDD@BBBBDFBDBFBF@JBL@J@F?F@NA", - "maneuver": { - "bearing_after": 201, - "bearing_before": 194, - "location": [11.572944, 48.17806], - "modifier": "straight", - "type": "new name" - }, - "name": "Belgradstraße", - "mode": "driving", - "weight": 205.5, - "duration": 205.5, - "distance": 2058 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 135, 180], - "location": [11.574788, 48.15974] - } - ], - "driving_side": "right", - "geometry": "ke}dHmuseAj@CPA", - "maneuver": { - "bearing_after": 175, - "bearing_before": 177, - "location": [11.574788, 48.15974], - "modifier": "straight", - "type": "continue" - }, - "name": "Kurfürstenplatz", - "mode": "driving", - "weight": 3.1, - "duration": 3.1, - "distance": 34.1 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 30, 180], - "location": [11.574816, 48.159434] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 180, 270], - "location": [11.574864, 48.158798] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.574991, 48.157644] - } - ], - "driving_side": "right", - "geometry": "mc}dHsuseAJ?j@CF?D?B?r@Cx@E|@ED?FAPAXCRARALALAHA^CdAGTCf@GdCSnBMLAPCD?XC", - "maneuver": { - "bearing_after": 177, - "bearing_before": 175, - "location": [11.574816, 48.159434], - "modifier": "straight", - "type": "turn" - }, - "name": "Nordendstraße", - "mode": "driving", - "weight": 49.7, - "duration": 49.7, - "distance": 477.9 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true, false, true], - "bearings": [0, 105, 180, 300], - "location": [11.575353, 48.155152] - } - ], - "driving_side": "right", - "geometry": "uh|dH}xseA?EBOTaC?K", - "maneuver": { - "bearing_after": 104, - "bearing_before": 172, - "location": [11.575353, 48.155152], - "modifier": "left", - "type": "turn" - }, - "name": "Georgenstraße", - "mode": "driving", - "weight": 12.1, - "duration": 12.1, - "distance": 62.7 - }, - { - "intersections": [ - { - "out": 2, - "in": 3, - "entry": [true, true, true, false], - "bearings": [0, 105, 180, 285], - "location": [11.576172, 48.155019] - } - ], - "driving_side": "right", - "geometry": "{g|dHa~seAJ?|BWz@ILA", - "maneuver": { - "bearing_after": 172, - "bearing_before": 102, - "location": [11.576172, 48.155019], - "modifier": "right", - "type": "turn" - }, - "name": "Kurfürstenstraße", - "mode": "driving", - "weight": 20.6, - "duration": 20.6, - "distance": 118.5 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 105, 180], - "location": [11.576346, 48.153961] - } - ], - "driving_side": "right", - "geometry": "ga|dHe_teAVqDP_CBW?IB[", - "maneuver": { - "bearing_after": 101, - "bearing_before": 172, - "location": [11.576346, 48.153961], - "modifier": "left", - "type": "turn" - }, - "name": "Rambergstraße", - "mode": "driving", - "weight": 24.3, - "duration": 24.3, - "distance": 140 - }, - { - "intersections": [ - { - "out": 1, - "in": 2, - "entry": [true, true, false], - "bearings": [30, 210, 285], - "location": [11.578189, 48.153706] - } - ], - "driving_side": "right", - "geometry": "u_|dHujteArBfA", - "maneuver": { - "bearing_after": 202, - "bearing_before": 101, - "location": [11.578189, 48.153706], - "modifier": "right", - "type": "turn" - }, - "name": "Türkenstraße", - "mode": "driving", - "weight": 16.3, - "duration": 16.3, - "distance": 69.9 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true, false], - "bearings": [30, 105, 210], - "location": [11.577828, 48.153126] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [105, 210, 285], - "location": [11.579981, 48.152661] - } - ], - "driving_side": "right", - "geometry": "a|{dHmhteADS|@_HXyB@M\\iCd@wDB_@@Q", - "maneuver": { - "bearing_after": 106, - "bearing_before": 202, - "location": [11.577828, 48.153126], - "modifier": "left", - "type": "turn" - }, - "name": "Akademiestraße", - "mode": "driving", - "weight": 29.7, - "duration": 29.7, - "distance": 317.5 - }, - { - "intersections": [ - { - "out": 2, - "in": 3, - "entry": [false, true, true, false], - "bearings": [0, 135, 180, 285], - "location": [11.581905, 48.152284] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [15, 105, 195, 300], - "location": [11.581605, 48.151325] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.581491, 48.15108] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 300], - "location": [11.581094, 48.150116] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 195, 285], - "location": [11.580564, 48.148984] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.579556, 48.146828] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [15, 105, 195, 285], - "location": [11.579183, 48.146027] - } - ], - "driving_side": "right", - "geometry": "wv{dH}aueAXAR?L@JDj@Rl@TZJVJLDJDnAf@b@BjAb@zAh@FBZJ\\Lr@XPFPFVJf@Pz@Z~Aj@z@ZfBp@FBRFVJFBjAb@r@Vt@Vn@TVHFB", - "maneuver": { - "bearing_after": 175, - "bearing_before": 98, - "location": [11.581905, 48.152284], - "modifier": "right", - "type": "turn" - }, - "name": "Ludwigstraße", - "mode": "driving", - "weight": 78.2, - "duration": 78.2, - "distance": 804.2 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.578883, 48.145359] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true, false], - "bearings": [15, 105, 195, 285], - "location": [11.57884, 48.145266] - }, - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [30, 105, 285], - "location": [11.580835, 48.144831] - } - ], - "driving_side": "right", - "geometry": "okzdH_oteAF@HDDWRyAt@wFFe@TqBl@gFBK@M?G?G@G@w@?K?I@KBOL_A@MFc@BG@GBEDGFIBEFCDEHCDARE", - "maneuver": { - "bearing_after": 196, - "bearing_before": 195, - "location": [11.578883, 48.145359], - "modifier": "left", - "type": "turn" - }, - "name": "Von-der-Tann-Straße", - "mode": "driving", - "weight": 48.2, - "duration": 48.2, - "distance": 457.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "slight right" - ] - } - ], - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [60, 180, 345], - "location": [11.584255, 48.143901] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 105, 195], - "location": [11.584265, 48.143795] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [15, 180, 210], - "location": [11.583243, 48.141711] - } - ], - "driving_side": "right", - "geometry": "kbzdHspueAF?D?DATHd@RxBz@^NjEbBRPPH^NLDJDFBHD", - "maneuver": { - "bearing_after": 175, - "bearing_before": 170, - "location": [11.584255, 48.143901], - "modifier": "straight", - "type": "new name" - }, - "name": "Franz-Josef-Strauß-Ring", - "mode": "driving", - "weight": 33.4, - "duration": 33.4, - "distance": 323.9 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, false, true, false, false], - "bearings": [15, 90, 165, 285, 345], - "location": [11.582909, 48.141144] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [150, 240, 330], - "location": [11.584163, 48.139822] - }, - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [90, 180, 345], - "location": [11.584713, 48.139135] - } - ], - "driving_side": "right", - "geometry": "cqydHehueAPENGLIRS|AeBdBgBnAsAFIDAJELEFAF?P?n@N~@THBB@\\B@?", - "maneuver": { - "bearing_after": 165, - "bearing_before": 198, - "location": [11.582909, 48.141144], - "modifier": "slight left", - "type": "new name" - }, - "name": "Karl-Scharnagl-Ring", - "mode": "driving", - "weight": 36.7, - "duration": 36.7, - "distance": 362.9 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 105, 195, 285], - "location": [11.584468, 48.138257] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 105, 195], - "location": [11.584335, 48.137682] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 195, 285], - "location": [11.584247, 48.137292] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [45, 150, 225], - "location": [11.583118, 48.135491] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [60, 165, 240, 315], - "location": [11.582272, 48.13505] - } - ], - "driving_side": "right", - "geometry": "c_ydH}queAB?^DPB|@N`@FL@\\FXFL@^Hh@Nf@N`@Pb@TRJPLVRPNJLFDRZDFHNR^f@bANd@HX@DXz@", - "maneuver": { - "bearing_after": 188, - "bearing_before": 185, - "location": [11.584468, 48.138257], - "modifier": "straight", - "type": "new name" - }, - "name": "Thomas-Wimmer-Ring", - "mode": "driving", - "weight": 43.6, - "duration": 43.6, - "distance": 436.2 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [60, 195, 240], - "location": [11.581974, 48.134923] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, false, false], - "bearings": [15, 60, 120, 255, 300], - "location": [11.581908, 48.134752] - } - ], - "driving_side": "right", - "geometry": "gjxdHibueAHFHBL?HSFQPUHINMv@k@ZUHENI@A", - "maneuver": { - "bearing_after": 194, - "bearing_before": 236, - "location": [11.581974, 48.134923], - "modifier": "left", - "type": "turn" - }, - "name": "Isartorplatz", - "mode": "driving", - "weight": 16.8, - "duration": 16.8, - "distance": 137.6 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, true, false], - "bearings": [60, 150, 240, 330], - "location": [11.582753, 48.133875] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 210, 330], - "location": [11.583437, 48.132997] - } - ], - "driving_side": "right", - "geometry": "wcxdHegueABA@AFEd@[jBqAHGDITa@Vk@nAcDDKH[", - "maneuver": { - "bearing_after": 153, - "bearing_before": 151, - "location": [11.582753, 48.133875], - "modifier": "straight", - "type": "new name" - }, - "name": "Zweibrückenstraße", - "mode": "driving", - "weight": 30.5, - "duration": 30.5, - "distance": 242.1 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 3, - "entry": [false, true, true, false], - "bearings": [30, 120, 225, 300], - "location": [11.58485, 48.132287] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [60, 150, 225, 315], - "location": [11.582394, 48.130967] - } - ], - "driving_side": "right", - "geometry": "yywdHitueAHHFLfA|AR^`@z@z@bCn@rBBLFRLX^t@HPR\\\\v@dCbG~@|BJTBFLV", - "maneuver": { - "bearing_after": 220, - "bearing_before": 123, - "location": [11.58485, 48.132287], - "modifier": "right", - "type": "turn" - }, - "name": "Erhardtstraße", - "mode": "driving", - "weight": 57.5, - "duration": 57.5, - "distance": 533.7 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "none" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true, false], - "bearings": [45, 135, 240, 315], - "location": [11.579267, 48.129304] - } - ], - "driving_side": "right", - "geometry": "cgwdHmqteANQFKLO|@gA@ANQNQ@ApBgC`@g@HO", - "maneuver": { - "bearing_after": 140, - "bearing_before": 232, - "location": [11.579267, 48.129304], - "modifier": "left", - "type": "turn" - }, - "name": "Corneliusbrücke", - "mode": "driving", - "weight": 20.9, - "duration": 20.9, - "distance": 210 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [75, 135, 240, 315], - "location": [11.581024, 48.127827] - }, - { - "out": 1, - "in": 3, - "entry": [true, true, true, false], - "bearings": [45, 120, 225, 315], - "location": [11.582517, 48.126939] - } - ], - "driving_side": "right", - "geometry": "}}vdHk|teANSVc@Ve@JS\\s@h@iAN[L_@HSDQDMBIV_AFU@GPm@", - "maneuver": { - "bearing_after": 135, - "bearing_before": 136, - "location": [11.581024, 48.127827], - "modifier": "straight", - "type": "new name" - }, - "name": "Schweigerstraße", - "mode": "driving", - "weight": 26.7, - "duration": 26.7, - "distance": 236 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 3, - "entry": [true, true, true, false], - "bearings": [60, 120, 225, 300], - "location": [11.583528, 48.126548] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [30, 210, 315], - "location": [11.582694, 48.125792] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [30, 120, 210], - "location": [11.581824, 48.124994] - } - ], - "driving_side": "right", - "geometry": "}uvdHalueAT^JJ|@~@v@z@jCvCRTr@v@PRNRDNHLHN", - "maneuver": { - "bearing_after": 220, - "bearing_before": 118, - "location": [11.583528, 48.126548], - "modifier": "right", - "type": "turn" - }, - "name": "Mariahilfplatz", - "mode": "driving", - "weight": 28.8, - "duration": 28.8, - "distance": 297.7 - }, - { - "intersections": [ - { - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [45, 135, 225, 315], - "location": [11.58111, 48.124427] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true, false], - "bearings": [45, 150, 225, 330], - "location": [11.580961, 48.124328] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, false, false], - "bearings": [45, 150, 225, 330], - "location": [11.581024, 48.124247] - } - ], - "driving_side": "right", - "geometry": "uhvdH}|teAHL@BFJNKPMJIPOJIRQJMNSZUb@Yx@e@LMDCTMLGRGTAJAH@", - "maneuver": { - "bearing_after": 225, - "bearing_before": 229, - "location": [11.58111, 48.124427], - "modifier": "left", - "type": "turn" - }, - "name": "Ohlmüllerstraße", - "mode": "driving", - "weight": 24.7, - "duration": 24.7, - "distance": 242.7 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 195, 270], - "location": [11.582208, 48.122495] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [30, 210, 255], - "location": [11.581825, 48.121758] - }, - { - "out": 1, - "in": 2, - "entry": [true, true, true], - "bearings": [45, 150, 330], - "location": [11.581815, 48.120441] - }, - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [75, 165, 345], - "location": [11.582101, 48.12006] - } - ], - "driving_side": "right", - "geometry": "s|udHycueAF@F?F@D@HBFBFBD@HDHB`@V^Tf@\\RLJDHDFDHBJBHBH?J@H?HAJAHAHEHCHEHGHGFGHIBEDKHIDGDCBCDEFEDCFCHCJELCr@U", - "maneuver": { - "bearing_after": 191, - "bearing_before": 181, - "location": [11.582208, 48.122495], - "modifier": "straight", - "type": "new name" - }, - "name": "Am Nockherberg", - "mode": "driving", - "weight": 29.9, - "duration": 29.9, - "distance": 332.5 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [165, 345], - "location": [11.582225, 48.119731] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 210, 330], - "location": [11.58229, 48.119635] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [45, 120, 225, 300], - "location": [11.583557, 48.119082] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, false, false], - "bearings": [45, 135, 210, 300], - "location": [11.583658, 48.118975] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [105, 210, 300], - "location": [11.585411, 48.118397] - } - ], - "driving_side": "right", - "geometry": "ikudH}cueADADCDEFIDEBEBIBGXkABMH]FQJW@EJW@A@CFOBCBCBCFGFIBGHYZ_BRiARaAXeALm@BSRm@\\gAL]N_@h@oAt@cB", - "maneuver": { - "bearing_after": 163, - "bearing_before": 164, - "location": [11.582225, 48.119731], - "modifier": "straight", - "type": "new name" - }, - "name": "Sankt-Bonifatius-Straße", - "mode": "driving", - "weight": 45.2, - "duration": 45.2, - "distance": 477.6 - }, - { - "intersections": [ - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [120, 135, 315], - "location": [11.58754, 48.117431] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [105, 195, 300], - "location": [11.587974, 48.117196] - }, - { - "out": 1, - "in": 3, - "entry": [true, true, true, false], - "bearings": [0, 90, 195, 285], - "location": [11.588754, 48.117105] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [105, 180, 285], - "location": [11.589582, 48.117035] - } - ], - "driving_side": "right", - "geometry": "}|tdHceveALSHOJYDKBKBQDs@Bq@@I@Y?YJiB@W?IDo@?G", - "maneuver": { - "bearing_after": 135, - "bearing_before": 127, - "location": [11.58754, 48.117431], - "modifier": "straight", - "type": "new name" - }, - "name": "Sankt-Martins-Platz", - "mode": "driving", - "weight": 23, - "duration": 23, - "distance": 184.1 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [60, 105, 285], - "location": [11.589863, 48.117007] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 3, - "entry": [true, false, false, false, false], - "bearings": [30, 120, 165, 240, 285], - "location": [11.590072, 48.117089] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.591309, 48.117459] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.592971, 48.117844] - } - ], - "driving_side": "right", - "geometry": "iztdHssveAESAIGKIGGGCEEYKq@E][wBeAmHE]EYG[k@{D", - "maneuver": { - "bearing_after": 59, - "bearing_before": 98, - "location": [11.589863, 48.117007], - "modifier": "left", - "type": "turn" - }, - "name": "Sankt-Martin-Straße", - "mode": "driving", - "weight": 34.4, - "duration": 34.4, - "distance": 347.9 - }, - { - "intersections": [ - { - "out": 1, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.594178, 48.118127] - } - ], - "driving_side": "right", - "geometry": "iaudHsnweAPCJCRETELCh@Al@Bp@DxAF", - "maneuver": { - "bearing_after": 168, - "bearing_before": 70, - "location": [11.594178, 48.118127], - "modifier": "right", - "type": "turn" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 26.3, - "duration": 26.3, - "distance": 175.9 - }, - { - "intersections": [ - { - "in": 0, - "entry": [true], - "bearings": [4], - "location": [11.594221, 48.116555] - } - ], - "driving_side": "right", - "geometry": "owtdH{nweA", - "maneuver": { - "bearing_after": 0, - "bearing_before": 184, - "location": [11.594221, 48.116555], - "modifier": "left", - "type": "arrive" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 0, - "duration": 0, - "distance": 0 - } - ], - "weight": 1139.2, - "summary": "Belgradstraße, Ludwigstraße", - "duration": 1139.2, - "distance": 10414.8 - } - ], - "weight_name": "routability", - "geometry": "sfbeH{qteAUjR`G^W`S|`@sAfKlCbhCiPXcDrEc@p@oJrBfAhDoXxj@dRbEw^tAcA~OlG`LgJ~PvDzGvJvIgHrCcHtQza@dPsYzL`O`IwFxItClGgDjNac@`@gJ_F_ZxHG", - "weight": 1139.2, - "duration": 1139.2, - "distance": 10414.8 - }, - { - "legs": [ - { - "steps": [ - { - "intersections": [ - { - "out": 0, - "entry": [true], - "bearings": [273], - "location": [11.579345, 48.185544] - }, - { - "out": 3, - "in": 1, - "entry": [true, false, false, true], - "bearings": [0, 90, 195, 270], - "location": [11.578423, 48.185574] - } - ], - "driving_side": "right", - "geometry": "sfbeH{qteAAf@Af@?f@Aj@?RA^A\\?XAf@Ab@?LAb@At@?n@Ad@A`@AZ", - "maneuver": { - "bearing_after": 273, - "bearing_before": 0, - "location": [11.579345, 48.185544], - "modifier": "right", - "type": "depart" - }, - "name": "Vogelhartstraße", - "mode": "driving", - "weight": 33.6, - "duration": 33.6, - "distance": 224.1 - }, - { - "intersections": [ - { - "out": 2, - "in": 1, - "entry": [true, false, true], - "bearings": [0, 90, 255], - "location": [11.576336, 48.185655] - } - ], - "driving_side": "right", - "geometry": "kgbeHc_teA@RHJXBX@T@X@f@@b@@d@@X@F@", - "maneuver": { - "bearing_after": 251, - "bearing_before": 272, - "location": [11.576336, 48.185655], - "modifier": "slight left", - "type": "new name" - }, - "name": "Bad-Kreuznacher-Straße", - "mode": "driving", - "weight": 25.2, - "duration": 25.2, - "distance": 152.4 - }, - { - "intersections": [ - { - "out": 3, - "in": 0, - "entry": [false, true, false, true], - "bearings": [0, 90, 180, 270], - "location": [11.576084, 48.184359] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [90, 180, 270], - "location": [11.575007, 48.184411] - } - ], - "driving_side": "right", - "geometry": "g_beHo}seACbA?N?NA`@AN?NAn@E~CEnCAlA?N?\\", - "maneuver": { - "bearing_after": 272, - "bearing_before": 181, - "location": [11.576084, 48.184359], - "modifier": "right", - "type": "turn" - }, - "name": "Milbertshofener Straße", - "mode": "driving", - "weight": 45.8, - "duration": 45.8, - "distance": 239.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "none" - ] - } - ], - "out": 2, - "in": 1, - "entry": [true, false, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.572872, 48.184483] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 255], - "location": [11.572942, 48.183552] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.573003, 48.182772] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 90, 180, 270], - "location": [11.573079, 48.18177] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [0, 90, 180, 270], - "location": [11.573147, 48.180878] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [0, 105, 180, 270], - "location": [11.573231, 48.180056] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, false], - "bearings": [0, 90, 180, 255], - "location": [11.573286, 48.179045] - } - ], - "driving_side": "right", - "geometry": "_`beHmiseARAH?fAEh@Ch@AzCKnBIJ?r@CD?PARAD?b@AZAvAGlCMTA`BGn@Cv@?TJXDj@JLBNBf@LFBPDHF", - "maneuver": { - "bearing_after": 175, - "bearing_before": 271, - "location": [11.572872, 48.184483], - "modifier": "left", - "type": "turn" - }, - "name": "Knorrstraße", - "mode": "driving", - "weight": 68.9, - "duration": 68.9, - "distance": 718.2 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 3, - "in": 0, - "entry": [false, false, true, true], - "bearings": [15, 75, 195, 255], - "location": [11.572944, 48.17806] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [75, 255, 345], - "location": [11.570791, 48.177581] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [60, 240, 345], - "location": [11.569266, 48.177158] - } - ], - "driving_side": "right", - "geometry": "{w`eH{iseABf@D`@Bd@Fp@Hn@FZHp@Ll@Jf@FTBFFXDXLt@TnAFX`@tBFVLv@T|A\\fB?HDZ", - "maneuver": { - "bearing_after": 258, - "bearing_before": 194, - "location": [11.572944, 48.17806], - "modifier": "right", - "type": "turn" - }, - "name": "Petuelring", - "mode": "driving", - "weight": 39.6, - "duration": 39.6, - "distance": 418.4 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [75, 180, 255, 345], - "location": [11.567687, 48.176755] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 1, - "entry": [false, false, true, true], - "bearings": [0, 75, 180, 255], - "location": [11.567535, 48.176724] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [0, 60, 180, 240], - "location": [11.567504, 48.176486] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, false], - "bearings": [15, 240, 345], - "location": [11.567362, 48.176127] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true], - "bearings": [60, 180, 240], - "location": [11.567021, 48.175947] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [60, 120, 240], - "location": [11.566812, 48.175877] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [60, 225, 330], - "location": [11.566441, 48.175733] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 195, 300], - "location": [11.565936, 48.174978] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 195, 285], - "location": [11.564908, 48.17243] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 180, 225], - "location": [11.564413, 48.170856] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, false], - "bearings": [0, 135, 165, 315], - "location": [11.56443, 48.170396] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [165, 330, 345], - "location": [11.564542, 48.169944] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [0, 120, 180, 285], - "location": [11.564803, 48.16798] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [0, 90, 180, 285], - "location": [11.564794, 48.167888] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, false], - "bearings": [0, 180, 270], - "location": [11.564681, 48.166381] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [15, 120, 195, 270], - "location": [11.564397, 48.164558] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.564079, 48.163493] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 195, 285], - "location": [11.563644, 48.161933] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [15, 105, 180, 285], - "location": [11.563352, 48.160984] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, false], - "bearings": [0, 105, 195, 285], - "location": [11.563342, 48.160869] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.563042, 48.159811] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [15, 195, 285], - "location": [11.56285, 48.159053] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.562633, 48.158358] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [15, 105, 195], - "location": [11.562463, 48.157828] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 105, 195, 285], - "location": [11.56224, 48.157186] - }, - { - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 120, 195, 285], - "location": [11.561858, 48.156099] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 120, 195, 300], - "location": [11.561224, 48.154438] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, false], - "bearings": [15, 120, 195, 300], - "location": [11.56083, 48.153389] - } - ], - "driving_side": "right", - "geometry": "wo`eHaireAF\\l@FVBZFRNLNN\\DTLh@Lf@BHHR@BHNNPFJNHDB\\L~@Xt@Tf@NhA\\|Ab@fA\\nDfAh@NJB`Bb@l@PVFZFd@DXBV?X?J?@?ZCRCLCx@MzCk@z@KhACjADF?F?H@P@T?z@Df@ArBHn@DN@d@@z@Dl@DvBTtAPL@LBhDr@JBPBPB|@NVBn@LjCj@RDZHv@Nz@RF@TDJ@B@B?D?@?B?D@P@H@r@L`B^HBVDPBF@F?N?n@Nt@Nf@LvAXHBJB|A\\lBd@PDRDjBf@`ATD@PDTDD@tDdAXHrA`@JDhEjAF@JBLBvA^n@J`AVB@H@", - "maneuver": { - "bearing_after": 251, - "bearing_before": 248, - "location": [11.567687, 48.176755], - "modifier": "left", - "type": "turn" - }, - "name": "Schleißheimer Straße", - "mode": "driving", - "weight": 288.7, - "duration": 288.7, - "distance": 2841.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "right" - ] - }, - { - "valid": true, - "indications": [ - "right" - ] - } - ], - "out": 3, - "in": 0, - "entry": [false, false, false, true], - "bearings": [15, 105, 195, 240], - "location": [11.560431, 48.152182] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [60, 135, 240], - "location": [11.560143, 48.152095] - } - ], - "driving_side": "right", - "geometry": "cv{dHu{peA?B?D?B@B?B@B@DHXb@dAN^n@~ANZf@fAHRj@rAFLFP", - "maneuver": { - "bearing_after": 239, - "bearing_before": 192, - "location": [11.560431, 48.152182], - "modifier": "right", - "type": "turn" - }, - "name": "Maßmannstraße", - "mode": "driving", - "weight": 22.5, - "duration": 22.5, - "distance": 228.1 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [45, 150, 240, 315], - "location": [11.557973, 48.15097] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true, false], - "bearings": [60, 165, 225, 330], - "location": [11.557789, 48.150883] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, false, false], - "bearings": [90, 165, 255, 345], - "location": [11.558123, 48.150258] - } - ], - "driving_side": "right", - "geometry": "qn{dHilpeAFN@DFLPM\\OVM\\MDANENEFADAx@SrEw@@AhB]bAQV@H?XD", - "maneuver": { - "bearing_after": 233, - "bearing_before": 232, - "location": [11.557973, 48.15097], - "modifier": "left", - "type": "turn" - }, - "name": "Dachauer Straße", - "mode": "driving", - "weight": 42.5, - "duration": 42.5, - "distance": 393.6 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 105, 195, 285], - "location": [11.558761, 48.147579] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true], - "bearings": [15, 135, 195], - "location": [11.558501, 48.146756] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [15, 120, 195, 300], - "location": [11.557898, 48.145593] - } - ], - "driving_side": "right", - "geometry": "kyzdHgqpeAXFfAT`ATZDPDHBZRzBdAHDNFTJlClAj@VbC`AHDNH", - "maneuver": { - "bearing_after": 191, - "bearing_before": 185, - "location": [11.558761, 48.147579], - "modifier": "straight", - "type": "new name" - }, - "name": "Seidlstraße", - "mode": "driving", - "weight": 44.4, - "duration": 44.4, - "distance": 447.7 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [15, 120, 210, 300], - "location": [11.556923, 48.143756] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true, false], - "bearings": [30, 105, 195, 300], - "location": [11.55685, 48.143647] - }, - { - "out": 1, - "in": 3, - "entry": [false, true, false, false], - "bearings": [30, 105, 195, 285], - "location": [11.557019, 48.143602] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [120, 210, 300], - "location": [11.559488, 48.142814] - } - ], - "driving_side": "right", - "geometry": "oazdHwepeATLHa@Hc@J_ABKBKRw@BMBODQ\\wAXgAVaALg@TgATo@L]@C", - "maneuver": { - "bearing_after": 203, - "bearing_before": 198, - "location": [11.556923, 48.143756], - "modifier": "left", - "type": "turn" - }, - "name": "Marsstraße", - "mode": "driving", - "weight": 34.6, - "duration": 34.6, - "distance": 298 - }, - { - "intersections": [ - { - "out": 0, - "in": 2, - "entry": [true, true, false, true], - "bearings": [120, 165, 300, 345], - "location": [11.560258, 48.142505] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [15, 120, 195, 300], - "location": [11.5614, 48.142051] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, false, false], - "bearings": [15, 120, 195, 300], - "location": [11.561532, 48.142] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [120, 255, 300], - "location": [11.561926, 48.141892] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [120, 210, 300], - "location": [11.563118, 48.141511] - } - ], - "driving_side": "right", - "geometry": "uyydHszpeABEDMLe@HUBKZgAPk@FSHYDUHi@DOR{@r@eDBKVkATkA@Gb@sB\\cB\\}APy@T{@BI@G@G@EB]", - "maneuver": { - "bearing_after": 120, - "bearing_before": 125, - "location": [11.560258, 48.142505], - "modifier": "straight", - "type": "new name" - }, - "name": "Elisenstraße", - "mode": "driving", - "weight": 50.7, - "duration": 50.7, - "distance": 506.3 - }, - { - "intersections": [ - { - "out": 2, - "in": 3, - "entry": [false, true, true, false], - "bearings": [0, 105, 195, 285], - "location": [11.566365, 48.140518] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [45, 210, 300], - "location": [11.565433, 48.139736] - }, - { - "out": 2, - "in": 0, - "entry": [false, false, true, false], - "bearings": [15, 120, 195, 270], - "location": [11.565126, 48.13931] - } - ], - "driving_side": "right", - "geometry": "gmydHy`reADBDBFDDBFFz@lAl@z@BFFHBDDBJJDBHHDDFDDBHBTHJDFBD@F@FBJ@", - "maneuver": { - "bearing_after": 201, - "bearing_before": 102, - "location": [11.566365, 48.140518], - "modifier": "right", - "type": "turn" - }, - "name": "Karlsplatz (Stachus)", - "mode": "driving", - "weight": 21.6, - "duration": 21.6, - "distance": 195.9 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true], - "bearings": [15, 180], - "location": [11.56503, 48.139038] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, false], - "bearings": [0, 180, 270], - "location": [11.564903, 48.138331] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 180, 270], - "location": [11.564849, 48.138035] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, true, true, true], - "bearings": [0, 75, 180, 270], - "location": [11.564729, 48.137396] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 2, - "in": 0, - "entry": [false, false, true, true], - "bearings": [0, 60, 165, 270], - "location": [11.564634, 48.136378] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 195, 330], - "location": [11.565817, 48.13443] - } - ], - "driving_side": "right", - "geometry": "_dydHmxqeAD?B@PB@?f@DfALx@H\\Dx@Hf@FJ@TBp@J`AFH?H?JALCF?VId@Qb@YhB_AJGFCnAo@NG`@UTODCBEBCHKFIFGFKFIFGLKROh@[n@]NIFC", - "maneuver": { - "bearing_after": 185, - "bearing_before": 187, - "location": [11.56503, 48.139038], - "modifier": "straight", - "type": "new name" - }, - "name": "Sonnenstraße", - "mode": "driving", - "weight": 69.4, - "duration": 69.4, - "distance": 658.8 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [60, 165, 240, 330], - "location": [11.56662, 48.133436] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, false, false], - "bearings": [60, 165, 240, 345], - "location": [11.566661, 48.13336] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [150, 300, 345], - "location": [11.56683, 48.133073] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [90, 180, 300], - "location": [11.567408, 48.132615] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, true, false], - "bearings": [45, 135, 270, 300], - "location": [11.568512, 48.132534] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 195, 270], - "location": [11.570352, 48.131826] - } - ], - "driving_side": "right", - "geometry": "_axdHkbreANGNIFC`@St@e@DCBC@ABC@CBC@C@E@GBG@I@I?I@G?M?K?[Ak@?[@S@a@DOFOLWJOP[DIHUl@{BT{@F[@W@M?QCc@?EE[Ia@", - "maneuver": { - "bearing_after": 158, - "bearing_before": 156, - "location": [11.56662, 48.133436], - "modifier": "straight", - "type": "new name" - }, - "name": "Blumenstraße", - "mode": "driving", - "weight": 57.6, - "duration": 57.6, - "distance": 399.3 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "right" - ] - } - ], - "out": 1, - "in": 2, - "entry": [true, true, false, false], - "bearings": [45, 135, 255, 315], - "location": [11.570866, 48.131925] - } - ], - "driving_side": "right", - "geometry": "qwwdH}|reAZ_@j@q@PSJOFIBC", - "maneuver": { - "bearing_after": 140, - "bearing_before": 75, - "location": [11.570866, 48.131925], - "modifier": "right", - "type": "turn" - }, - "name": "Papa-Schmid-Straße", - "mode": "driving", - "weight": 9.2, - "duration": 9.2, - "distance": 79.6 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, false, false], - "bearings": [45, 135, 240, 315], - "location": [11.571525, 48.131361] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [135, 225, 315], - "location": [11.572586, 48.130564] - }, - { - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [45, 135, 225, 315], - "location": [11.573322, 48.130019] - }, - { - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [30, 135, 210, 315], - "location": [11.575519, 48.128354] - } - ], - "driving_side": "right", - "geometry": "_twdHaaseA??HK@CLMhAeBz@oAnAmBHKDGJOHMDGbAyADIjBqCZc@`@m@p@eAVSLS`AwABEPS", - "maneuver": { - "bearing_after": 137, - "bearing_before": 142, - "location": [11.571525, 48.131361], - "modifier": "straight", - "type": "new name" - }, - "name": "Fraunhoferstraße", - "mode": "driving", - "weight": 66.9, - "duration": 66.9, - "distance": 523.5 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "straight" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [60, 135, 225, 315], - "location": [11.576191, 48.127843] - } - ], - "driving_side": "right", - "geometry": "_~vdHe~seAPWPU~@wAv@iAv@gAJOT]\\g@DW@G", - "maneuver": { - "bearing_after": 137, - "bearing_before": 137, - "location": [11.576191, 48.127843], - "modifier": "straight", - "type": "new name" - }, - "name": "Reichenbachbrücke", - "mode": "driving", - "weight": 21.6, - "duration": 21.6, - "distance": 218 - }, - { - "intersections": [ - { - "out": 1, - "in": 3, - "entry": [false, true, true, true], - "bearings": [45, 135, 225, 315], - "location": [11.578177, 48.126419] - }, - { - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [135, 225, 315], - "location": [11.579122, 48.125729] - }, - { - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [45, 135, 225, 315], - "location": [11.579891, 48.125174] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 225, 315], - "location": [11.580354, 48.124813] - }, - { - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [45, 150, 225, 330], - "location": [11.580961, 48.124328] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "none" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, false, false], - "bearings": [45, 150, 225, 330], - "location": [11.581024, 48.124247] - } - ], - "driving_side": "right", - "geometry": "cuvdHsjteADGDGx@oAHKh@y@NUFIl@_A^i@JSLQDCHI\\m@X_@`@q@NSDGNSJMJINKPMJIPOJIRQJMNSZUb@Yx@e@LMDCTMLGRGTAJAH@", - "maneuver": { - "bearing_after": 136, - "bearing_before": 132, - "location": [11.578177, 48.126419], - "modifier": "straight", - "type": "new name" - }, - "name": "Ohlmüllerstraße", - "mode": "driving", - "weight": 52.4, - "duration": 52.4, - "distance": 539.2 - }, - { - "intersections": [ - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [0, 195, 270], - "location": [11.582208, 48.122495] - }, - { - "out": 1, - "in": 0, - "entry": [false, true, true], - "bearings": [30, 210, 255], - "location": [11.581825, 48.121758] - }, - { - "out": 1, - "in": 2, - "entry": [true, true, true], - "bearings": [45, 150, 330], - "location": [11.581815, 48.120441] - }, - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [75, 165, 345], - "location": [11.582101, 48.12006] - } - ], - "driving_side": "right", - "geometry": "s|udHycueAF@F?F@D@HBFBFBD@HDHB`@V^Tf@\\RLJDHDFDHBJBHBH?J@H?HAJAHAHEHCHEHGHGFGHIBEDKHIDGDCBCDEFEDCFCHCJELCr@U", - "maneuver": { - "bearing_after": 191, - "bearing_before": 181, - "location": [11.582208, 48.122495], - "modifier": "straight", - "type": "new name" - }, - "name": "Am Nockherberg", - "mode": "driving", - "weight": 29.9, - "duration": 29.9, - "distance": 332.5 - }, - { - "intersections": [ - { - "out": 0, - "in": 1, - "entry": [true, false], - "bearings": [165, 345], - "location": [11.582225, 48.119731] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [135, 210, 330], - "location": [11.58229, 48.119635] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight", - "right" - ] - } - ], - "out": 1, - "in": 3, - "entry": [false, true, true, false], - "bearings": [45, 120, 225, 300], - "location": [11.583557, 48.119082] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 1, - "in": 3, - "entry": [true, true, false, false], - "bearings": [45, 135, 210, 300], - "location": [11.583658, 48.118975] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [105, 210, 300], - "location": [11.585411, 48.118397] - } - ], - "driving_side": "right", - "geometry": "ikudH}cueADADCDEFIDEBEBIBGXkABMH]FQJW@EJW@A@CFOBCBCBCFGFIBGHYZ_BRiARaAXeALm@BSRm@\\gAL]N_@h@oAt@cB", - "maneuver": { - "bearing_after": 163, - "bearing_before": 164, - "location": [11.582225, 48.119731], - "modifier": "straight", - "type": "new name" - }, - "name": "Sankt-Bonifatius-Straße", - "mode": "driving", - "weight": 45.2, - "duration": 45.2, - "distance": 477.6 - }, - { - "intersections": [ - { - "out": 1, - "in": 2, - "entry": [false, true, false], - "bearings": [120, 135, 315], - "location": [11.58754, 48.117431] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [105, 195, 300], - "location": [11.587974, 48.117196] - }, - { - "out": 1, - "in": 3, - "entry": [true, true, true, false], - "bearings": [0, 90, 195, 285], - "location": [11.588754, 48.117105] - }, - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, false, false], - "bearings": [105, 180, 285], - "location": [11.589582, 48.117035] - } - ], - "driving_side": "right", - "geometry": "}|tdHceveALSHOJYDKBKBQDs@Bq@@I@Y?YJiB@W?IDo@?G", - "maneuver": { - "bearing_after": 135, - "bearing_before": 127, - "location": [11.58754, 48.117431], - "modifier": "straight", - "type": "new name" - }, - "name": "Sankt-Martins-Platz", - "mode": "driving", - "weight": 23, - "duration": 23, - "distance": 184.1 - }, - { - "intersections": [ - { - "lanes": [ - { - "valid": true, - "indications": [ - "left" - ] - }, - { - "valid": false, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [60, 105, 285], - "location": [11.589863, 48.117007] - }, - { - "lanes": [ - { - "valid": false, - "indications": [ - "left" - ] - }, - { - "valid": true, - "indications": [ - "straight" - ] - } - ], - "out": 0, - "in": 3, - "entry": [true, false, false, false, false], - "bearings": [30, 120, 165, 240, 285], - "location": [11.590072, 48.117089] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.591309, 48.117459] - }, - { - "out": 0, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.592971, 48.117844] - } - ], - "driving_side": "right", - "geometry": "iztdHssveAESAIGKIGGGCEEYKq@E][wBeAmHE]EYG[k@{D", - "maneuver": { - "bearing_after": 59, - "bearing_before": 98, - "location": [11.589863, 48.117007], - "modifier": "left", - "type": "turn" - }, - "name": "Sankt-Martin-Straße", - "mode": "driving", - "weight": 34.4, - "duration": 34.4, - "distance": 347.9 - }, - { - "intersections": [ - { - "out": 1, - "in": 2, - "entry": [true, true, false], - "bearings": [75, 165, 255], - "location": [11.594178, 48.118127] - } - ], - "driving_side": "right", - "geometry": "iaudHsnweAPCJCRETELCh@Al@Bp@DxAF", - "maneuver": { - "bearing_after": 168, - "bearing_before": 70, - "location": [11.594178, 48.118127], - "modifier": "right", - "type": "turn" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 26.3, - "duration": 26.3, - "distance": 175.9 - }, - { - "intersections": [ - { - "in": 0, - "entry": [true], - "bearings": [4], - "location": [11.594221, 48.116555] - } - ], - "driving_side": "right", - "geometry": "owtdH{nweA", - "maneuver": { - "bearing_after": 0, - "bearing_before": 184, - "location": [11.594221, 48.116555], - "modifier": "left", - "type": "arrive" - }, - "name": "Hohenwaldeckstraße", - "mode": "driving", - "weight": 0, - "duration": 0, - "distance": 0 - } - ], - "weight": 1154, - "summary": "Schleißheimer Straße, Sonnenstraße", - "duration": 1154, - "distance": 10599.8 - } - ], - "weight_name": "routability", - "geometry": "sfbeH{qteAUjR`G^W`Sbg@MjGv`@|FvGtYnI``@c@pf@dIbm@bObGnOnRgEtXbKpRoz@zElFrPrBvVcNlDaWvm@i}@xIoGxItCzGwDbNed@ZsH_F_ZxHG", - "weight": 1154, - "duration": 1154, - "distance": 10599.8 - } - ], - "waypoints": [ - { - "hint": "77u6gP___38JAAAACgAAACAAAABmAAAAgHXWQKxQmD1w-qdBPiiJQgkAAAAKAAAAIAAAAGYAAACYEgAA0a-wAMhA3wLir7AAqkHfAgYADxEAAAAA", - "location": [11.579345, 48.185544], - "name": "Vogelhartstraße", - "distance": 25.16156763 - }, - { - "hint": "hL-3gP___39MAAAAXAAAALsAAAAlAAAAEo1MQj_NJUG7evlCiIDIQUwAAABcAAAAuwAAACUAAACYEgAA7emwAEsz3gL66rAAQDPeAhAAfwsAAAAA", - "location": [11.594221, 48.116555], - "name": "Hohenwaldeckstraße", - "distance": 20.06299672 - } - ] -} \ No newline at end of file diff --git a/common/data/src/main/res/raw/tomtom_traffic b/common/data/src/main/res/raw/tomtom_traffic new file mode 100644 index 0000000..e132d95 --- /dev/null +++ b/common/data/src/main/res/raw/tomtom_traffic @@ -0,0 +1,6668 @@ +{ + "incidents": [ + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.3759471083, 48.1315192747], + [11.3765103722, 48.1316131466], + [11.3769770766, 48.1316909628], + [11.3776717687, 48.1318062602], + [11.3786802793, 48.1319739195], + [11.3792113567, 48.1320610774], + [11.3794876242, 48.1321080129], + [11.379586866, 48.1321241242], + [11.3797182942, 48.1321710596], + [11.379779985, 48.1322059115], + [11.3798671568, 48.1322864119], + [11.3798752035, 48.1323185785], + [11.3798899556, 48.1323910232], + [11.3798604513, 48.1325197451], + [11.3796954954, 48.133042797], + [11.3796619678, 48.1331474067] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.3767651821, 48.068738183], + [11.3768107796, 48.0687958184], + [11.3768912459, 48.0688950698], + [11.3769328202, 48.068947384], + [11.3769502545, 48.0689674919], + [11.3769703711, 48.0689902883], + [11.3769904877, 48.0690117405], + [11.377007922, 48.0690251831], + [11.377033403, 48.0690412582], + [11.3770642484, 48.069055989], + [11.3770924116, 48.0690667431], + [11.3771245981, 48.0690747526], + [11.3771608079, 48.0690814739], + [11.3771997, 48.0690868509], + [11.3772546852, 48.069092228], + [11.3773096705, 48.0690962607], + [11.3774062301, 48.0691015817], + [11.3775497282, 48.0691042703], + [11.3776704276, 48.0689017911], + [11.3777146841, 48.068829369], + [11.3777401651, 48.0687864645], + [11.3777710105, 48.0687408155], + [11.377777716, 48.0687328059], + [11.3778018559, 48.0687019438], + [11.3778555001, 48.0686402754], + [11.3779252375, 48.0685665086], + [11.3779748584, 48.0685222597], + [11.3780204559, 48.0684819875], + [11.3780432547, 48.0684605351], + [11.3780808056, 48.0684162861], + [11.3781223799, 48.0683693485], + [11.3781559075, 48.0683264436], + [11.3781800474, 48.0682955813], + [11.3782108928, 48.0682526764], + [11.3782672191, 48.0681655222], + [11.3782953823, 48.0681145515], + [11.3783222044, 48.0680676136], + [11.3784053529, 48.0679187339], + [11.3784643615, 48.0678288906], + [11.3785045946, 48.0677779195], + [11.378572991, 48.0676921088], + [11.3786132241, 48.0676465148], + [11.3786843026, 48.0675727466], + [11.3787982965, 48.0674667711], + [11.3789431358, 48.0673420871], + [11.3790155555, 48.0672830498], + [11.3791228438, 48.0672065924], + [11.3792422021, 48.0671234693], + [11.3793280328, 48.067069809], + [11.3793696071, 48.0670456674], + [11.3794406856, 48.0670041058], + [11.3797504807, 48.06683377], + [11.3798255826, 48.0667935525], + [11.3799368943, 48.0667398918], + [11.3801098967, 48.0666675226], + [11.3802614415, 48.0666031072] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.3783315922, 48.0642562028], + [11.3783543909, 48.0642830345], + [11.3783825541, 48.0643192208], + [11.378406694, 48.0643554071], + [11.3784268106, 48.0643903049], + [11.378457656, 48.064450634], + [11.3784911836, 48.0645297842], + [11.3785260523, 48.0646263552], + [11.378586402, 48.0648234736], + [11.3786454106, 48.0649924717], + [11.3786963726, 48.0651198501], + [11.378752699, 48.0652365293], + [11.3788331652, 48.0653626187], + [11.3788586462, 48.0654028373], + [11.3788894916, 48.0654457446], + [11.378932407, 48.0654980623], + [11.3789780045, 48.0655517243], + [11.3790423776, 48.065612052], + [11.379112115, 48.0656737239], + [11.3792100156, 48.0657555609], + [11.3792650009, 48.0657984679], + [11.3793012107, 48.0658266431], + [11.3793682659, 48.0658708944], + [11.3795533384, 48.0659969262], + [11.379637828, 48.0660559651], + [11.3796861077, 48.0660894614], + [11.3797813261, 48.0661578545], + [11.379856428, 48.0662168931], + [11.3799114133, 48.0662624884], + [11.3799838329, 48.0663281925], + [11.3800508881, 48.0663885193], + [11.3801635409, 48.0664998743], + [11.3802118207, 48.0665495023], + [11.3802614415, 48.0666031072] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4001459981, 48.2512383233], + [11.4008393491, 48.2514971796] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4119799043, 48.175630919], + [11.4117371643, 48.1756872049], + [11.4115346576, 48.1757368393], + [11.4111631716, 48.1758347665], + [11.4110599066, 48.17586154], + [11.4104510451, 48.176066728], + [11.4102767015, 48.1761297766], + [11.4101425911, 48.1761847764], + [11.4097778107, 48.1763389879], + [11.4094492401, 48.1764878891], + [11.4091501738, 48.1766179536], + [11.4086217786, 48.1768580161], + [11.4085346068, 48.1768982593], + [11.4083911086, 48.1769639339], + [11.4083441699, 48.1769867383], + [11.4079525674, 48.1771785075], + [11.4078667367, 48.1772214333], + [11.4075381661, 48.1774038117], + [11.4074697698, 48.177442713], + [11.4072095955, 48.1775808796], + [11.4068743194, 48.1777511839], + [11.4066356028, 48.1778812453], + [11.4062171782, 48.1781373987], + [11.4057518149, 48.178457938], + [11.4054500664, 48.1786792123], + [11.405034324, 48.1789916999] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4138587917, 48.157892079], + [11.4151529575, 48.1583440859] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4151529575, 48.1583440859], + [11.4138587917, 48.157892079] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.3942961002, 48.1448860616], + [11.3942893947, 48.1449196185], + [11.3942397738, 48.1451502657], + [11.3941968585, 48.1453541224], + [11.3941740597, 48.1455083707], + [11.3941230977, 48.1459630034], + [11.3941123689, 48.1461359854], + [11.3941043223, 48.1462110951], + [11.3941056634, 48.1462821779], + [11.3941043223, 48.1463210469], + [11.3941029812, 48.1464699234], + [11.3941043223, 48.1468950746], + [11.3941566254, 48.1475119346], + [11.3942531849, 48.1481597135], + [11.3943028057, 48.148403768], + [11.3943913186, 48.1487672191], + [11.3944905604, 48.1491132194], + [11.3945991898, 48.149447194], + [11.3946260119, 48.1495329801], + [11.3947145248, 48.1497462145], + [11.394844612, 48.1500694478], + [11.3950591887, 48.1505214118], + [11.395204028, 48.1508124293], + [11.3953555728, 48.1510739186], + [11.3954387213, 48.1512227813], + [11.3955661262, 48.1514199593], + [11.3959094489, 48.1519362759], + [11.3960207606, 48.1520864782], + [11.3961226846, 48.1522259433], + [11.3962299729, 48.1523694343], + [11.3963922466, 48.1525719204], + [11.3966014589, 48.1528106415], + [11.3967583681, 48.1529943928], + [11.3969970847, 48.1532492167], + [11.3973618651, 48.1536327641], + [11.3977695609, 48.1540391234], + [11.3979734088, 48.1542335506], + [11.3982872272, 48.1545205769], + [11.3985809291, 48.1547914974], + [11.3988263512, 48.1550127621], + [11.3991227353, 48.1552850219], + [11.3992581869, 48.1554056904], + [11.3994043673, 48.1555398344], + [11.3994673992, 48.1555974844], + [11.4000306631, 48.156103079], + [11.4003136361, 48.1563552035], + [11.4007079209, 48.1567079184], + [11.4008527602, 48.1568339513], + [11.4009640718, 48.1569385685], + [11.4010700191, 48.157027082], + [11.4013489688, 48.1572711502], + [11.4015622044, 48.1574602533], + [11.4017311836, 48.1576131792], + [11.4018679763, 48.1577271324], + [11.4020047689, 48.157847851], + [11.4020691419, 48.1579028145], + [11.402197888, 48.158016823], + [11.4022340978, 48.1580490294], + [11.4023279751, 48.1581308313], + [11.4024728144, 48.1582622285], + [11.4027450586, 48.1585050048], + [11.4029287899, 48.1586726327], + [11.4031554366, 48.1588858851], + [11.4033794011, 48.1590830337], + [11.4060656334, 48.1612703484], + [11.4065444077, 48.1616297387], + [11.406817993, 48.1618550553], + [11.4073209072, 48.1622413339], + [11.4082663859, 48.1629225839], + [11.4085976387, 48.1631613127], + [11.4086807872, 48.1632229795], + [11.4087478424, 48.1632739678], + [11.4090053345, 48.1634576816], + [11.409320494, 48.1636615216], + [11.410000434, 48.1641376296], + [11.4109311605, 48.1647585871], + [11.4113670195, 48.1650307953], + [11.4115883017, 48.1651796734], + [11.4117720331, 48.1653030579], + [11.4121006037, 48.1655203079], + [11.4123192037, 48.1656504003], + [11.4123594368, 48.1656745515], + [11.4126504565, 48.1658743575], + [11.4130876566, 48.1661533242], + [11.4135221744, 48.1664255809], + [11.4137917365, 48.1666052583], + [11.4141095782, 48.1667890162], + [11.4144716764, 48.1670237019], + [11.4147895182, 48.1672302111], + [11.4150832201, 48.1674273836], + [11.4151529575, 48.1674702616], + [11.4152173305, 48.1675091705], + [11.4154077674, 48.167625841], + [11.4157349969, 48.1678403979], + [11.4160340632, 48.168049643], + [11.4162164534, 48.168167654], + [11.4163733626, 48.1682709064], + [11.4163921381, 48.168284323] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4244065786, 48.2547668166], + [11.4246479774, 48.2545508936], + [11.4247606302, 48.2544542888], + [11.4248585308, 48.2543738684], + [11.4249135161, 48.2543363091] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.423615327, 48.2587149935], + [11.4236850644, 48.2587525496], + [11.4238406325, 48.2588383761], + [11.4239975418, 48.2589134881], + [11.4241115356, 48.258964437], + [11.4242000485, 48.258997975], + [11.4243153835, 48.2590382095], + [11.4245192314, 48.2590998726], + [11.4250690843, 48.2592689015], + [11.4252166058, 48.2593211893], + [11.4253721739, 48.2593868698], + [11.425514331, 48.2594566239], + [11.4256015027, 48.2595075722], + [11.4256202782, 48.2595183422], + [11.4256806279, 48.2595585763], + [11.4257181788, 48.2595907189], + [11.4257543887, 48.2596188994], + [11.4257919396, 48.2596551156], + [11.4258174206, 48.2596873139], + [11.4258630181, 48.2597449584], + [11.4259555543, 48.2598898226], + [11.4259944464, 48.2599555024], + [11.426027974, 48.2600011489], + [11.4261285568, 48.2601754761], + [11.4261379445, 48.260195565], + [11.4263203348, 48.2607615101], + [11.4265107716, 48.2613475931], + [11.4265389348, 48.2614293976], + [11.4266636575, 48.261814312], + [11.4266784097, 48.2619215607], + [11.4267132784, 48.2619685448], + [11.4268205667, 48.2621616141], + [11.4268862809, 48.2622448123], + [11.4269493128, 48.2623024538], + [11.4269828404, 48.2623252761], + [11.4270150269, 48.2623453641], + [11.4270539189, 48.2623628295], + [11.4271182919, 48.2623815783], + [11.4274052883, 48.2624660595] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4335985089, 48.1639806978], + [11.4335569347, 48.1639163484], + [11.4335274304, 48.163876095], + [11.4334670807, 48.163795644], + [11.4333825911, 48.1637178765], + [11.4332592095, 48.1636105896], + [11.4328099395, 48.1632927529], + [11.4325846339, 48.1631411857], + [11.4315908755, 48.1624987954] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4362646247, 48.2566027668], + [11.4363826419, 48.2565625304], + [11.4365797842, 48.2565022037], + [11.4367219413, 48.2564485178], + [11.436858734, 48.2563975664], + [11.4370169843, 48.2563385789], + [11.4371725524, 48.2562755173], + [11.4373388494, 48.2562058147], + [11.437384447, 48.2561829897], + [11.4374246801, 48.2561615599], + [11.4375185574, 48.256105195], + [11.4375681783, 48.2560717108], + [11.4376043881, 48.2560448677], + [11.437654009, 48.2560059702], + [11.4376754666, 48.2559872191], + [11.4377666617, 48.2559107634], + [11.4379410053, 48.2557324036], + [11.4388328398, 48.2548164302], + [11.4389709736, 48.2546581576], + [11.4395168031, 48.2540305316], + [11.4396884645, 48.2538360364], + [11.4401658977, 48.2532539971], + [11.4403898622, 48.2529683607], + [11.4405816401, 48.2527376962] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Contraflow" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4166563357, 48.1301594004], + [11.4177010561, 48.1302411908], + [11.4179518426, 48.1302586454], + [11.4181905592, 48.1302747573], + [11.4185218121, 48.1302908132], + [11.4187940563, 48.1303015545], + [11.4189496244, 48.1303055825], + [11.4192419852, 48.1303149811], + [11.419586649, 48.1303216943], + [11.4199567939, 48.1303284076], + [11.4203470553, 48.1303297503], + [11.4205710197, 48.1303297503], + [11.4208325351, 48.1303297503], + [11.4209921266, 48.1303297503], + [11.4213515426, 48.1303257223], + [11.4216358567, 48.1303082678], + [11.4218638445, 48.1302948412], + [11.4222339893, 48.1302613307], + [11.4226457084, 48.1302264775], + [11.4231472815, 48.1301714843], + [11.4233766104, 48.1301446311], + [11.4236756767, 48.1301030645], + [11.4237427319, 48.1300950085], + [11.4237762595, 48.1300923232], + [11.4245608056, 48.1299435111], + [11.4247284437, 48.1299126298], + [11.4249001051, 48.1298737483], + [11.4253533984, 48.1297651039], + [11.4266784097, 48.1293735458], + [11.4268554355, 48.129317209], + [11.4271370674, 48.129223333], + [11.4275219644, 48.1290878894], + [11.4276265706, 48.129050294], + [11.4278693105, 48.128963131], + [11.4281361903, 48.1288652262], + [11.4284298922, 48.1287552929], + [11.4286391045, 48.1286841858], + [11.4289328063, 48.1285755388], + [11.4291299487, 48.128501802], + [11.4296798016, 48.1283059905], + [11.4302189256, 48.1281074928], + [11.4307204987, 48.1279345061], + [11.4309002067, 48.1278674819], + [11.4310758913, 48.1278084581], + [11.4315265025, 48.1276756962], + [11.4319194461, 48.1275737608], + [11.4320133234, 48.1275495916], + [11.4322413112, 48.1274919661], + [11.4325497652, 48.1273592034], + [11.4326825345, 48.1273296632], + [11.4329601432, 48.1272719815], + [11.4331666733, 48.1272411545], + [11.4334174598, 48.1272116702], + [11.4337446893, 48.1271807872], + [11.4339753593, 48.1271526456], + [11.4343334342, 48.1271191331], + [11.4345600809, 48.1271016774], + [11.4348511005, 48.1270895927], + [11.434908768, 48.12708825], + [11.4352279509, 48.1270815922], + [11.4352453853, 48.1270815922], + [11.4353003705, 48.1270802495], + [11.4357442761, 48.1270869632], + [11.436063459, 48.1271083911], + [11.4366951192, 48.1271566738], + [11.4368775094, 48.1271861582], + [11.437153777, 48.1272277271], + [11.4373442138, 48.1272612956], + [11.4376379157, 48.1273175786], + [11.4377103353, 48.127331006], + [11.4379396642, 48.127376603], + [11.4382856692, 48.1274530829], + [11.4385042692, 48.127502652], + [11.4388113821, 48.1275710753], + [11.4394229258, 48.1277038375], + [11.4398923124, 48.1277950309], + [11.4405883456, 48.1278795105], + [11.4413044954, 48.1279425624], + [11.4414319004, 48.1279546469], + [11.4419965054, 48.1279666754], + [11.4424605275, 48.1279506187], + [11.442723384, 48.1279412197], + [11.4429366196, 48.1279331634], + [11.4431364442, 48.1279171067], + [11.4431793595, 48.1279117358], + [11.4433107878, 48.1278983086], + [11.4433416332, 48.1278956231] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.446419468, 48.1273846594], + [11.4464033748, 48.1273900303], + [11.4461928214, 48.1274503974], + [11.44579049, 48.1275670471], + [11.445431074, 48.1276662971], + [11.4449227954, 48.1277856318], + [11.4444064702, 48.1278956231], + [11.4442240799, 48.1279264498], + [11.4440309609, 48.127958675], + [11.4440229143, 48.1279600177], + [11.4437694455, 48.1279935298], + [11.4437064136, 48.1280029288], + [11.4436380173, 48.1280122719], + [11.4435548688, 48.1280230136], + [11.4432839657, 48.1280498679], + [11.4432745779, 48.1280512107], + [11.4429325963, 48.1280806945], + [11.4426268245, 48.1280968071], + [11.4422794784, 48.128111521], + [11.4422204698, 48.1281128637], + [11.4418530072, 48.1281128637], + [11.4416531826, 48.1281074928], + [11.4415016378, 48.1281035206], + [11.4414037372, 48.1281008352], + [11.4413219298, 48.1280954643], + [11.4412977899, 48.1280927789], + [11.44128572, 48.1280927789], + [11.4411998893, 48.1280874081], + [11.4407801236, 48.1280525534], + [11.4405320192, 48.1280324126], + [11.4401605333, 48.127982788], + [11.4399808253, 48.127958675], + [11.4398292805, 48.1279318206], + [11.4397032166, 48.1279117358], + [11.439386716, 48.1278500266], + [11.4390769208, 48.1277842891], + [11.4386263097, 48.1276877248], + [11.438308468, 48.1276153294], + [11.4378712679, 48.1275174221], + [11.437654009, 48.1274745106], + [11.43744882, 48.1274342846], + [11.4371551181, 48.1273819739], + [11.4369392003, 48.1273444333], + [11.4364416505, 48.1272840662], + [11.4360688234, 48.1272572674], + [11.4357670749, 48.127238469], + [11.4353017117, 48.1272357836], + [11.434998622, 48.1272451827], + [11.4346727336, 48.1272599528], + [11.434356233, 48.1272880944], + [11.434266379, 48.1273028645], + [11.43404912, 48.1273216068], + [11.4338023568, 48.127351147], + [11.4335797335, 48.127376603], + [11.4333597923, 48.1274114581], + [11.4324129725, 48.1275858453], + [11.4322949553, 48.1276139867], + [11.4320656265, 48.1276783817], + [11.431995889, 48.1276984666], + [11.4314634706, 48.127852712], + [11.4310879613, 48.1279774171], + [11.4309632386, 48.1280216709], + [11.430802306, 48.1280753236], + [11.4301022495, 48.1283261312], + [11.4297790433, 48.1284347227], + [11.4293351377, 48.1286023929], + [11.4290213192, 48.1287150119], + [11.4287544394, 48.1288156024], + [11.4286122824, 48.128870597], + [11.4282770062, 48.1289926702], + [11.4279001559, 48.129124086], + [11.4277311767, 48.1291857378], + [11.4276265706, 48.1292206476], + [11.4272698368, 48.1293480348], + [11.4269761349, 48.129448624], + [11.4265966023, 48.1295706399], + [11.4264276231, 48.1296216057], + [11.4261392857, 48.1297087676], + [11.4259461666, 48.1297624186], + [11.4257959629, 48.1298039855], + [11.4256551469, 48.1298456082], + [11.4254352058, 48.1298992591], + [11.4253775383, 48.1299139725], + [11.4251093174, 48.1299797072], + [11.4250892008, 48.1299837352], + [11.4249805714, 48.1300051619], + [11.4249027873, 48.1300212739], + [11.4247659946, 48.1300547846], + [11.4244414473, 48.1301164911], + [11.4238889123, 48.1302291628], + [11.4237266386, 48.1302465614], + [11.4236448313, 48.1302573027], + [11.4234248901, 48.1302854426], + [11.4232197011, 48.1303096104], + [11.4229380692, 48.1303471489], + [11.4226416851, 48.130382002], + [11.4222728814, 48.1304128831], + [11.4217538739, 48.1304463935], + [11.4210658873, 48.1304919878], + [11.4207936431, 48.130502729], + [11.4199393595, 48.1304825892], + [11.4194377864, 48.1304745892], + [11.419059595, 48.1304651906], + [11.4186639691, 48.1304490788], + [11.4185258354, 48.1304423655], + [11.4182401801, 48.1304329669], + [11.4176943506, 48.1303954286], + [11.4173389579, 48.130369974], + [11.4167528952, 48.130319009], + [11.4160742963, 48.1302492467], + [11.4156786705, 48.1302090229], + [11.4149839784, 48.1301232045], + [11.4148190225, 48.1300950085], + [11.4145494605, 48.1300561272], + [11.4144140089, 48.1300360432], + [11.4141994322, 48.1300024766], + [11.4133733118, 48.129863007], + [11.4129334296, 48.1297785306], + [11.4126115645, 48.129711453], + [11.412309816, 48.1296538299], + [11.4119222368, 48.1295692972], + [11.4116566981, 48.1295063033], + [11.410975417, 48.1293399787], + [11.4107809568, 48.1292930407], + [11.4102297629, 48.1291468558], + [11.4098918045, 48.1290583502], + [11.4097013677, 48.1289993277], + [11.4095243419, 48.128949704], + [11.4093781615, 48.1289081365], + [11.4092078412, 48.1288505125], + [11.4087357725, 48.128692242], + [11.4085359479, 48.1286251629] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4455034936, 48.1207019407], + [11.4455155636, 48.1207596298], + [11.4455316568, 48.1208266632], + [11.44555982, 48.120915183], + [11.4455893243, 48.1209956452], + [11.4456308986, 48.1210908792], + [11.4456764961, 48.121186057], + [11.4457234348, 48.121277262], + [11.4457489158, 48.1213215215], + [11.4457797612, 48.1213724954], + [11.4458253587, 48.1214422138], + [11.4458575452, 48.1214864732], + [11.4458924139, 48.1215347612], + [11.4459795857, 48.12164471], + [11.4461069907, 48.1217962878], + [11.4461579526, 48.1218579483], + [11.4461794103, 48.1218821201], + [11.4462853576, 48.1220108684], + [11.4463094975, 48.1220390128], + [11.4463886226, 48.1221355877], + [11.4464784766, 48.1222535924], + [11.4465294386, 48.1223233096], + [11.4465884472, 48.1224131697], + [11.4466622079, 48.1225365451], + [11.446726581, 48.1226505763], + [11.4467829073, 48.1227618655], + [11.4468593503, 48.122922784], + [11.4469049479, 48.1230274144], + [11.4469505454, 48.1231373599], + [11.4470055307, 48.1232768478], + [11.4470403994, 48.1233814774], + [11.4470819736, 48.1235209646], + [11.4471034313, 48.1235960514], + [11.4471302534, 48.1237207669], + [11.4471517111, 48.1238267384], + [11.4471771921, 48.1240815392], + [11.447214743, 48.1244302238], + [11.4472455884, 48.1246286797], + [11.4472482706, 48.124640765], + [11.4472710694, 48.1247627923], + [11.4473072792, 48.1248848193], + [11.4473273958, 48.1249545889], + [11.4473381246, 48.1249773605], + [11.4474695529, 48.1252388696], + [11.4475003983, 48.1252925252], + [11.4475889112, 48.1254481206] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4478289689, 48.1206161064], + [11.4455034936, 48.1207019407] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4577182735, 48.1590883454], + [11.4577209557, 48.1590990806], + [11.4577464367, 48.1592989122], + [11.4577424134, 48.1593874216], + [11.4577196146, 48.1595349742], + [11.457686087, 48.1596542907], + [11.4575720931, 48.159902428], + [11.4568867887, 48.1611670819], + [11.4568760599, 48.1611831841], + [11.456711104, 48.1614460183], + [11.4565260316, 48.1616928051], + [11.4563329125, 48.1619301978], + [11.4561532045, 48.1621340439], + [11.4560512806, 48.1622399921], + [11.4559708143, 48.1623244709], + [11.4558487738, 48.162458541], + [11.4557776953, 48.1625779066], + [11.4557294155, 48.1626717776], + [11.4556985701, 48.1627830919], + [11.4556905235, 48.1628676257], + [11.4556905235, 48.1628970896], + [11.4556905235, 48.162956129], + [11.4557186867, 48.1630754935], + [11.4557495321, 48.1631760725], + [11.455787083, 48.1632887275], + [11.4559171701, 48.1635757031], + [11.4560204352, 48.1637580741], + [11.4561196769, 48.1639096395], + [11.456133088, 48.1639311079], + [11.456146499, 48.1639525764], + [11.4562390352, 48.1641121359], + [11.4563047493, 48.1642221053], + [11.4563342536, 48.1642891938], + [11.4563664402, 48.1643642769], + [11.4564790929, 48.1646807652], + [11.4565005506, 48.164731752], + [11.4565193261, 48.1647746323], + [11.4565595592, 48.1648014674], + [11.4565810169, 48.1648242773], + [11.4566172267, 48.1648712387], + [11.4567406083, 48.1650026185], + [11.4568116869, 48.1650710478] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4620272423, 48.1647799993], + [11.4605439807, 48.1647638982], + [11.4601684714, 48.1647532201], + [11.4599109794, 48.164742486], + [11.4595810677, 48.1647237014], + [11.4592699314, 48.1646847905], + [11.459045967, 48.1646686894], + [11.4588179792, 48.16465393], + [11.4586717988, 48.1646566135], + [11.4585363472, 48.1646646641], + [11.4583324994, 48.1646955245], + [11.4581232871, 48.1647398025], + [11.4576592649, 48.1648993596], + [11.4575922097, 48.1649785229], + [11.4572314526, 48.1651434462], + [11.4569390918, 48.165286957] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4632610584, 48.1426611901], + [11.4619749392, 48.1426156067], + [11.4609731341, 48.1425431764] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4583727325, 48.1504221501], + [11.4585551227, 48.150351073], + [11.4587214197, 48.1502893907], + [11.4588890577, 48.1502303926], + [11.4590124393, 48.1501901285], + [11.4597956444, 48.1499125289], + [11.4604487623, 48.1496966109], + [11.461241355, 48.149455191], + [11.4617469514, 48.1493010105], + [11.4619843269, 48.1492326161], + [11.4621761049, 48.1491735609], + [11.4627125467, 48.1490099844], + [11.4635386671, 48.1487900361], + [11.4642534758, 48.1485888773], + [11.4646598304, 48.1484628241], + [11.4653451348, 48.1482388468] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4658788944, 48.186951136], + [11.4659902061, 48.1867889093], + [11.4661806429, 48.1865139666] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4663844908, 48.1480027888], + [11.4659767951, 48.1481422651], + [11.4657622183, 48.1482079765], + [11.465732714, 48.1482160296], + [11.4655610527, 48.1482710034], + [11.4649615789, 48.1484574554], + [11.4645230378, 48.1485929038], + [11.4644626881, 48.1486116384], + [11.4641515518, 48.1487041927], + [11.4639812315, 48.1487497708], + [11.4632396008, 48.1489536692], + [11.4624926055, 48.1491588531], + [11.4622082914, 48.1492446397], + [11.4620178546, 48.1493023526], + [11.4617885257, 48.1493707469], + [11.4612882937, 48.1495222988], + [11.4606700445, 48.1497113746], + [11.4603723193, 48.1498172925], + [11.4601403082, 48.1498923968], + [11.4598895217, 48.1499822645], + [11.4595113302, 48.150117709], + [11.459059378, 48.1502786536], + [11.4588112737, 48.150371205], + [11.4585832859, 48.1504530191], + [11.4583955313, 48.1505147011] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4671033228, 48.185691868], + [11.4672495032, 48.185730763], + [11.4675069953, 48.1857790465], + [11.4677255953, 48.1857468575], + [11.4679093267, 48.1856932092], + [11.4680581893, 48.1856234663], + [11.4681332911, 48.185545676], + [11.4681815709, 48.1854128958], + [11.4686630274, 48.1840678058], + [11.46879982, 48.1836882302], + [11.4691163207, 48.1828044431], + [11.4691726471, 48.1826556162], + [11.4691941048, 48.1825550194], + [11.4691873992, 48.1824812484], + [11.469145825, 48.1823860165] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.469145825, 48.1823860165], + [11.4691873992, 48.1824812484], + [11.4691941048, 48.1825550194], + [11.4691726471, 48.1826556162], + [11.4691163207, 48.1828044431], + [11.46879982, 48.1836882302], + [11.4686630274, 48.1840678058], + [11.4681815709, 48.1854128958], + [11.4681332911, 48.185545676], + [11.4680581893, 48.1856234663], + [11.4679093267, 48.1856932092], + [11.4677255953, 48.1857468575], + [11.4675069953, 48.1857790465], + [11.4672495032, 48.185730763], + [11.4671033228, 48.185691868] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.469581684, 48.1470171049], + [11.4694650079, 48.1470479201], + [11.4690291489, 48.1471699501], + [11.4685329402, 48.1473080864], + [11.4681654776, 48.1474113808], + [11.4680152739, 48.1474583022] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4771052803, 48.1144966559], + [11.4771267379, 48.1146025905], + [11.47715356, 48.1147232986], + [11.4772501195, 48.1151618075], + [11.4772702361, 48.1152395926], + [11.4773252214, 48.1154823486], + [11.4773574079, 48.1156205142], + [11.4774714018, 48.115920907], + [11.4775652791, 48.1162172689], + [11.4777476693, 48.1168288457], + [11.4778187479, 48.1170433911], + [11.477872392, 48.1172633636], + [11.4779635871, 48.1177206526], + [11.478013208, 48.1179446511], + [11.4780601467, 48.1182423444], + [11.4781432952, 48.1186178718], + [11.4783002044, 48.1192240483], + [11.4784584547, 48.1198302176], + [11.4786193873, 48.1205879612], + [11.479039153, 48.1222629925] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4833964015, 48.1640263182], + [11.4830383266, 48.1640491284], + [11.4816046859, 48.1640504701], + [11.4813471938, 48.1640544955], + [11.480861714, 48.1640746221], + [11.4802246893, 48.1641014017], + [11.4796962942, 48.1641242118], + [11.4794441665, 48.1641376296], + [11.4792926217, 48.164147022], + [11.4788111652, 48.1641805663], + [11.478398105, 48.1642140546], + [11.4781392718, 48.164235523], + [11.4779193307, 48.1642516242], + [11.4776940251, 48.1642623584], + [11.4776216055, 48.164270409], + [11.4774056877, 48.1642865102], + [11.4768075551, 48.1643401251], + [11.4764186348, 48.1643709857] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4834111537, 48.1336154068], + [11.4838121439, 48.1344093637], + [11.4840508605, 48.1348572701], + [11.4842091108, 48.135169745] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + }, + { + "description": "Construction work" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4859471823, 48.1366369421], + [11.4862878228, 48.1366262022], + [11.4866686965, 48.1366127773], + [11.486931553, 48.1366423121], + [11.4871193076, 48.1366476821] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + }, + { + "description": "Construction work" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4895198847, 48.1364585582], + [11.4899047817, 48.1364304217] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + }, + { + "description": "Construction work" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4907201732, 48.1363620102], + [11.4899047817, 48.1364304217], + [11.4895198847, 48.1364585582], + [11.4890800024, 48.1364921206], + [11.4885958637, 48.1365296545], + [11.4885019864, 48.1365403945], + [11.4884134735, 48.1365511344], + [11.4882230366, 48.1365739009], + [11.4880553986, 48.1365926958] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.491436323, 48.1370272143], + [11.4912056531, 48.1363217911] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4912056531, 48.1363217911], + [11.491436323, 48.1370272143] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4928458239, 48.1362171879], + [11.4930188264, 48.1371412133] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4930188264, 48.1371412133], + [11.4928458239, 48.1362171879] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + }, + { + "description": "Construction work" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4941735173, 48.1360817067], + [11.4928458239, 48.1362171879] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4941735173, 48.1360817067], + [11.4942660535, 48.1370942824] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4942660535, 48.1370942824], + [11.4941735173, 48.1360817067] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.488343736, 48.0857634715], + [11.4885381962, 48.0857379949], + [11.4889190699, 48.0856883854], + [11.4889445509, 48.0856856978], + [11.4889780785, 48.0856830101], + [11.4890531803, 48.085676291], + [11.4891148711, 48.0856602211], + [11.4891792441, 48.0856360882], + [11.4892503227, 48.0855985171], + [11.4893643166, 48.0855046732], + [11.4895078148, 48.0854912349], + [11.4902923609, 48.0850272198], + [11.4904331769, 48.084957452], + [11.4906504358, 48.0848662946], + [11.4908301438, 48.084792495], + [11.4909897352, 48.0847362214], + [11.4911171402, 48.0846986496], + [11.4911506678, 48.0846892427], + [11.491346469, 48.0846450076], + [11.4917488004, 48.0845699199], + [11.492116263, 48.084522941], + [11.4926567281, 48.0844518846], + [11.4927640165, 48.0844491969], + [11.4929531122, 48.0844438215], + [11.4931019748, 48.0844397899], + [11.4931328202, 48.0844384461], + [11.4933487381, 48.0844223758], + [11.4935472215, 48.0844076493], + [11.4936075712, 48.0844036178], + [11.4939160253, 48.0843901792], + [11.4940769578, 48.0843901792], + [11.4942875112, 48.0843781405], + [11.4944417382, 48.084372765], + [11.494669726, 48.084354007] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + }, + { + "description": "Construction work" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4926848913, 48.1361058719], + [11.4933675135, 48.136050885], + [11.4941748584, 48.1359703904], + [11.4947515334, 48.135916746] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4956956709, 48.1378318581], + [11.4955159629, 48.1363714077], + [11.4954877998, 48.1359677054] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4954877998, 48.1359677054], + [11.4955159629, 48.1363714077], + [11.4956956709, 48.1378318581] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4996291305, 48.1310230602], + [11.4997712875, 48.1313127337] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4997712875, 48.1313127337], + [11.4996291305, 48.1310230602] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5009045209, 48.1026372578], + [11.5008723343, 48.1025688573], + [11.5008321012, 48.1024749883], + [11.5008012558, 48.1023998706], + [11.5007677282, 48.1023556508], + [11.5007328595, 48.1023073448], + [11.5007046963, 48.1022684424], + [11.5006389822, 48.102198698], + [11.5005437637, 48.1021196057] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4994038249, 48.1120759372], + [11.5018620695, 48.1120316698] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5021074916, 48.1057915314], + [11.5020551885, 48.1056681717], + [11.5019881333, 48.1054388024], + [11.5019277836, 48.1052725119], + [11.5018459762, 48.1050499134] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5015898253, 48.103069097], + [11.5015817786, 48.1032099267], + [11.5015911664, 48.103376224], + [11.5016045774, 48.1035022759], + [11.5016099418, 48.1035639584], + [11.5016260351, 48.1036699156], + [11.5016434694, 48.1037262245], + [11.5017816032, 48.104187552], + [11.5019599701, 48.1046260948], + [11.5020699407, 48.1049547056], + [11.5021329726, 48.1051679013], + [11.5021812523, 48.1053811521], + [11.5022053922, 48.1054844189], + [11.5022255088, 48.1056171822], + [11.5022416021, 48.1057217918], + [11.5022469665, 48.1057633781] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5023006106, 48.107427699], + [11.5023059751, 48.1075886096], + [11.5023140217, 48.1078850196], + [11.502318045, 48.1079802219] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5023663248, 48.1093307213], + [11.5023730303, 48.1095975709], + [11.5023783947, 48.1098242352], + [11.5023851002, 48.1099462978], + [11.5024105812, 48.1104384626], + [11.5024172867, 48.1109185902], + [11.5024266745, 48.1111345034], + [11.5024280156, 48.1113450432], + [11.5024293567, 48.111582445], + [11.5024306978, 48.111775522], + [11.5024280156, 48.111908325], + [11.5024253334, 48.1120303826], + [11.5024266745, 48.1121148322], + [11.5024266745, 48.11218322] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5026989187, 48.1284106099], + [11.5026801432, 48.1277078657], + [11.5026734377, 48.127482567], + [11.5026627089, 48.1269219735], + [11.5026600267, 48.1267824956], + [11.5026586856, 48.1265612211], + [11.5026506389, 48.1264042863], + [11.5026439334, 48.126293005], + [11.502638569, 48.1261682958], + [11.5026358868, 48.1260998706], + [11.5026345457, 48.1260703857], + [11.5026332046, 48.1260395579], + [11.5026305224, 48.1259697898], + [11.5026291813, 48.125909421], + [11.5026291813, 48.1258356804], + [11.5026291813, 48.1257511974], + [11.5026197935, 48.1256438871], + [11.5026197935, 48.1255969457] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Left lane closed" + }, + { + "description": "Carriageway reduced to one lane" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5028491224, 48.1337669493], + [11.5028477813, 48.1337186728], + [11.5028343702, 48.1331889708], + [11.5028370525, 48.1330521951], + [11.5028155948, 48.1322461897] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Left lane closed" + }, + { + "description": "Carriageway reduced to one lane" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5030248071, 48.1397429276], + [11.5030248071, 48.1396959991], + [11.5030181016, 48.1396141678], + [11.503011396, 48.1394599578], + [11.5029832328, 48.1387142949], + [11.5029711629, 48.1383535694], + [11.5029644574, 48.1379284034], + [11.5029523874, 48.1373919766], + [11.5029483641, 48.1372189651], + [11.5029322709, 48.1368756814], + [11.5029255654, 48.1366986408], + [11.5029202009, 48.1364572157], + [11.5029134954, 48.1362171879], + [11.5029014255, 48.1357893751], + [11.5028987433, 48.1355533158], + [11.5028960611, 48.1355184662], + [11.5028920377, 48.1354433408], + [11.5028893555, 48.1353990935], + [11.5028880144, 48.1353642438], + [11.5028866733, 48.1352730638], + [11.50288265, 48.1350638528], + [11.50288265, 48.1349994671], + [11.5028786267, 48.1347124435] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Left lane closed" + }, + { + "description": "Carriageway reduced to one lane" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5030905212, 48.1419772101], + [11.5030891801, 48.1417733959] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Lane closed" + }, + { + "description": "Left lane closed" + }, + { + "description": "Carriageway reduced to one lane" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5029108132, 48.1302667013], + [11.5029134954, 48.1303592328], + [11.5029497052, 48.1310203749], + [11.5029564108, 48.1314213748], + [11.5029644574, 48.1317942326], + [11.502972504, 48.1322515042], + [11.5029953028, 48.1331849431], + [11.5030154194, 48.1337656627], + [11.5030181016, 48.1338367068], + [11.5030274893, 48.1341303921], + [11.5030288304, 48.1341773816], + [11.5030328537, 48.1346414006], + [11.503036877, 48.1350396872], + [11.5030422414, 48.1352703788], + [11.5030422414, 48.135349476], + [11.5030422414, 48.1353910383], + [11.5030449237, 48.1354379708], + [11.503048947, 48.1355184662], + [11.5030516292, 48.1355519732], + [11.5030502881, 48.1358041427], + [11.5030610169, 48.1363794627], + [11.503062358, 48.1364317642], + [11.5030851568, 48.13692127], + [11.5030945445, 48.137190829], + [11.5031025911, 48.1374348797], + [11.5031160022, 48.1376011781], + [11.5031253899, 48.138067907], + [11.5031347777, 48.1382596539], + [11.5031508709, 48.138574849], + [11.5031709875, 48.1391354271], + [11.5031937863, 48.1396302768], + [11.5031964685, 48.139689287], + [11.5031978096, 48.139750982], + [11.5032125617, 48.1400943024], + [11.5032206083, 48.1402780434], + [11.5032273139, 48.1404268814], + [11.503228655, 48.1405207929], + [11.5032340194, 48.1407755668], + [11.5032340194, 48.1408386029], + [11.5032514537, 48.1412811956], + [11.503254136, 48.141438085], + [11.5032581593, 48.1416057127], + [11.5032554771, 48.1417063339], + [11.503254136, 48.1417787094] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.502997985, 48.1255782027], + [11.5030771102, 48.1255674605], + [11.5032045151, 48.1255553754], + [11.5032876636, 48.1255460319], + [11.5034767593, 48.1255285757], + [11.5038415397, 48.1254789487] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5033453311, 48.149288931], + [11.5034593249, 48.1498723205], + [11.5036873127, 48.1504208079], + [11.5037610735, 48.1505656461], + [11.5039407815, 48.1508875321] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5050793792, 48.1723719881], + [11.5049694086, 48.1724310166], + [11.5049331988, 48.1724497984], + [11.5046850945, 48.1726160951], + [11.5041339005, 48.1729889331], + [11.5034325029, 48.1734972071], + [11.5031817163, 48.1736849648], + [11.5030556525, 48.1737774739], + [11.5025111641, 48.1741664017], + [11.5020377542, 48.1744815439], + [11.5017480756, 48.1746358164], + [11.501497289, 48.1747645442], + [11.5011687184, 48.1749335164], + [11.5008066202, 48.1751185859], + [11.500726154, 48.1751601719], + [11.5006054546, 48.1752191972], + [11.5005759503, 48.1752339535], + [11.4994453992, 48.1757918396], + [11.4975289608, 48.1767171647], + [11.4971628393, 48.1768969178], + [11.4968905951, 48.1770229571], + [11.4964748527, 48.1772160676], + [11.4959491397, 48.1774574687], + [11.49565812, 48.177598318], + [11.4953671003, 48.1777672809], + [11.4952651764, 48.1778705139], + [11.4951257015, 48.1779375846], + [11.4948051776, 48.1780931881] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5062340702, 48.0989371736], + [11.5062380935, 48.098843298], + [11.5062327291, 48.0987842409], + [11.5062112714, 48.0987373309], + [11.5061670149, 48.0986890215], + [11.506116053, 48.098640768], + [11.5060932542, 48.0986179847], + [11.5060717965, 48.0985991759], + [11.506065091, 48.0985777361], + [11.5059913303, 48.0985804231], + [11.5059323217, 48.0985804231], + [11.5056211854, 48.0985790796], + [11.5040225888, 48.0985616702], + [11.5029805506, 48.0985562963] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5002420152, 48.1396437009], + [11.5009849871, 48.1396704933], + [11.5010131503, 48.1396704933], + [11.5013658608, 48.1396798902], + [11.5016166474, 48.1396879446], + [11.5019103492, 48.1396852598], + [11.5021557714, 48.1396758629], + [11.5023314561, 48.1396678644], + [11.5024172867, 48.1396624947], + [11.5024789775, 48.1396611523], + [11.5025406684, 48.1396530978], + [11.5026372279, 48.1396450434], + [11.5027176942, 48.1396383313], + [11.5028544868, 48.1396316192], + [11.5030181016, 48.1396141678], + [11.5031937863, 48.1396302768], + [11.5033587421, 48.1396262496], + [11.5037208403, 48.139627592], + [11.5039850379, 48.1396316192], + [11.5040601398, 48.1396329616], + [11.5041808392, 48.139634304], + [11.5044718588, 48.1396383313], + [11.5046904589, 48.1396383313], + [11.5048701669, 48.1396369889], + [11.5049399043, 48.1396369889], + [11.5053221191, 48.1396437009], + [11.5056654419, 48.1396410161], + [11.5062729622, 48.1396437009], + [11.5069984997, 48.1396141678] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5071272458, 48.1397308459], + [11.5067611242, 48.1397482972], + [11.5065049733, 48.1397617213], + [11.5053060259, 48.139767091], + [11.5048634614, 48.1397697758], + [11.5044718588, 48.1397711182], + [11.5043605472, 48.1397724606], + [11.5041687692, 48.1397724606], + [11.5039568747, 48.139773803], + [11.5036578084, 48.1397751454], + [11.503357401, 48.1397684334], + [11.5031978096, 48.139750982], + [11.5031160022, 48.1397469548], + [11.5030248071, 48.1397429276] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Contraflow" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4946321751, 48.1245509088], + [11.4946724082, 48.1245616513], + [11.4951203371, 48.1246635367], + [11.4957318808, 48.1248110772], + [11.4958552624, 48.1248392201], + [11.4966666306, 48.1250256452], + [11.4969254638, 48.1250766155], + [11.4970220233, 48.1250981002], + [11.4970931018, 48.1251155006], + [11.4975329841, 48.1252147553], + [11.4980774726, 48.1253367813], + [11.4986031855, 48.1254414067], + [11.4991154874, 48.1255178335], + [11.4997364188, 48.1256130591], + [11.5008589233, 48.1257136556], + [11.5016917492, 48.1257485119], + [11.5024481321, 48.1257498546], + [11.5026291813, 48.1257511974], + [11.5028960611, 48.1257431408], + [11.5030274893, 48.1257377697], + [11.5031575764, 48.1257337413], + [11.5033037568, 48.1257283702], + [11.5035478378, 48.1257190267], + [11.5042827631, 48.1256667143], + [11.504807135, 48.1256211158], + [11.5048768724, 48.1256157446], + [11.5056520308, 48.1255299185], + [11.50582101, 48.1255111196], + [11.5061992015, 48.1254722348], + [11.5066712702, 48.1254119214], + [11.5071715022, 48.1253381241], + [11.5075121428, 48.125287154], + [11.5075684692, 48.1252791533], + [11.507758906, 48.1252509547], + [11.5079359318, 48.1252241548], + [11.5083074177, 48.1251731847], + [11.508426776, 48.1251557284], + [11.5084549392, 48.1251543856] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5080780889, 48.1528737187], + [11.508567592, 48.1523989601] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5086708571, 48.1060624293], + [11.5083100999, 48.1059431001], + [11.5076516176, 48.105642649], + [11.5068134273, 48.1052765418], + [11.5065049733, 48.1051357177], + [11.5063936616, 48.105082097], + [11.5061911548, 48.104985546], + [11.5059376861, 48.1048634717], + [11.5055621768, 48.104683802], + [11.5052885915, 48.1045537229], + [11.5050619448, 48.1044370209], + [11.5049291755, 48.1043713095], + [11.5048098172, 48.1043096279], + [11.5046046282, 48.104191582], + [11.5045429374, 48.1041526811], + [11.5044852699, 48.1041151795], + [11.5044262613, 48.1040695618], + [11.5043565239, 48.1040065366], + [11.5043028797, 48.1039528587], + [11.5042210723, 48.1038643657], + [11.5041231717, 48.1037610956], + [11.5040842796, 48.1037128469], + [11.5040427054, 48.1036498212], + [11.5039877201, 48.1035626151], + [11.5039112772, 48.1034258164], + [11.5038656796, 48.1033306056], + [11.5037771667, 48.1031254065], + [11.5037060882, 48.1029390139], + [11.5036792661, 48.1028424588], + [11.5036551262, 48.1027164053], + [11.5036336685, 48.1025634837], + [11.5036175753, 48.1023918103], + [11.5036068464, 48.1022201923], + [11.5036095286, 48.1020418007], + [11.5036229397, 48.10189162], + [11.5036470796, 48.1017091971], + [11.5036739017, 48.1015657324], + [11.5037007238, 48.1014597709], + [11.5037436391, 48.1013310271], + [11.5037583912, 48.1012974977], + [11.5037785078, 48.1012559078], + [11.5038388575, 48.101100351], + [11.5039206649, 48.1009434504], + [11.5040091778, 48.1007865493], + [11.5041164662, 48.1006470564], + [11.5041835214, 48.1005773098], + [11.504268011, 48.1004780634], + [11.5044664944, 48.1002782827], + [11.5048741902, 48.0999148242], + [11.5050243939, 48.0998007986], + [11.5052577461, 48.0996237981], + [11.5058062578, 48.0992214863], + [11.5059537793, 48.0991182069], + [11.5061240996, 48.0990095534], + [11.5062340702, 48.0989371736], + [11.5066967512, 48.0986970824], + [11.5069113279, 48.0986259897], + [11.5069435145, 48.0986152978], + [11.5070508028, 48.0985790796] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5092971529, 48.1516854719], + [11.508567592, 48.1523989601], + [11.5080780889, 48.1528737187] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5086373294, 48.1531647229], + [11.508823743, 48.1533564693], + [11.5093293394, 48.1539157118] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5089028681, 48.097982288], + [11.5090342964, 48.0979541304], + [11.5092515553, 48.0979098508], + [11.509542575, 48.0978589095], + [11.5095734204, 48.0978535355] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5096485222, 48.1823538254], + [11.5093963946, 48.1824906374], + [11.5090222264, 48.1826945135], + [11.5089296902, 48.1827360934], + [11.5088344718, 48.1827789587], + [11.5086480583, 48.1828634596], + [11.5085474754, 48.1828983329], + [11.5085206534, 48.1829077219], + [11.5084589625, 48.182931865], + [11.5080941821, 48.1830659929], + [11.5079681183, 48.1831129376] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5100508536, 48.1544642678], + [11.5099905039, 48.1544508475], + [11.5098979677, 48.1544334012], + [11.5098242069, 48.1544038766], + [11.5097598339, 48.1543730659], + [11.5096726621, 48.1543180427], + [11.5095465983, 48.1542242123], + [11.5095077063, 48.1541195896], + [11.509413829, 48.1540109406], + [11.5093293394, 48.1539157118], + [11.508823743, 48.1533564693], + [11.5086373294, 48.1531647229], + [11.5085944141, 48.1531338555], + [11.5085582043, 48.1531164087], + [11.5080780889, 48.1528737187], + [11.5077629293, 48.1527623829], + [11.507489344, 48.1526752042], + [11.5068818236, 48.1524927938], + [11.5054428185, 48.1521347374], + [11.5048889423, 48.1519966141], + [11.5047776307, 48.1519483548], + [11.5046837534, 48.1519054078], + [11.504601946, 48.15185178], + [11.5045415963, 48.1518021784], + [11.504500022, 48.1517538629], + [11.504447719, 48.1517029192], + [11.5042760576, 48.1514454034], + [11.5042492355, 48.1514038541], + [11.5041473116, 48.1512294918], + [11.504076233, 48.1511168663], + [11.5040534342, 48.1510792871], + [11.5039823557, 48.1509559242], + [11.5039407815, 48.1508875321], + [11.5037610735, 48.1505656461], + [11.5036873127, 48.1504208079], + [11.5034593249, 48.1498723205], + [11.5033453311, 48.149288931] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5079681183, 48.1831129376], + [11.5080941821, 48.1830659929], + [11.5084589625, 48.182931865], + [11.5085206534, 48.1829077219], + [11.5085474754, 48.1828983329], + [11.5086480583, 48.1828634596], + [11.5088344718, 48.1827789587], + [11.5089296902, 48.1827360934], + [11.5090222264, 48.1826945135], + [11.5093963946, 48.1824906374], + [11.5096485222, 48.1823538254], + [11.5096793677, 48.1823351031], + [11.5097263063, 48.1823082772], + [11.5100320781, 48.1821365908], + [11.5100763346, 48.1821111061], + [11.5101286377, 48.1820789148], + [11.5102667714, 48.1819957539], + [11.5106744672, 48.1817503503] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 7, + "events": [ + { + "description": "Contraflow" + }, + { + "description": "Roadworks" + }, + { + "description": "New roadworks layout" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.511416098, 48.1249317613], + [11.5110835041, 48.1249813889], + [11.5098537112, 48.1251530428], + [11.5094165112, 48.1252147553], + [11.5091080571, 48.1252522975], + [11.5088612939, 48.125287154], + [11.508733889, 48.1253032675], + [11.5086561049, 48.1253032675], + [11.5085702742, 48.1253166954], + [11.5084053184, 48.1253394668], + [11.5079694594, 48.1253958079], + [11.5077535416, 48.1254252933], + [11.5075604225, 48.1254508062], + [11.5065049733, 48.1255916305], + [11.5062179769, 48.1256238013], + [11.505961826, 48.1256532865], + [11.5054186786, 48.1257136556], + [11.5052711571, 48.125729713], + [11.5052483584, 48.1257323985], + [11.5049171055, 48.1257673107], + [11.5048916246, 48.1257686535], + [11.504820546, 48.1257753114], + [11.5044919754, 48.1258048525], + [11.5039917434, 48.1258410515], + [11.5033050979, 48.1258866499], + [11.5031535531, 48.1258960493], + [11.5030274893, 48.1259027631], + [11.5028786267, 48.1259054487], + [11.5026291813, 48.125909421], + [11.5024762953, 48.125909421], + [11.5019532646, 48.1259080783], + [11.5011714007, 48.1258826215], + [11.5007368828, 48.1258571648], + [11.4998128618, 48.1257726259], + [11.4996344949, 48.1257525402], + [11.4994923378, 48.1257364269], + [11.4993246997, 48.1257109701], + [11.4989156629, 48.125650601], + [11.4988338555, 48.1256372291], + [11.4985803867, 48.1255982885], + [11.4974337424, 48.1253649798], + [11.4970796908, 48.1252925252], + [11.4969254638, 48.1252576686], + [11.4957841838, 48.1249934741], + [11.494913807, 48.1247829343], + [11.4947971309, 48.1247520499], + [11.4946603383, 48.1247145073], + [11.4944806303, 48.1246662223], + [11.4943156744, 48.1246233085], + [11.493810078, 48.1245079949], + [11.4933299626, 48.1244100816], + [11.4930738116, 48.1243604535], + [11.4928900803, 48.1243242535], + [11.4924287404, 48.1242343967], + [11.4919218029, 48.1241552824], + [11.4919003452, 48.1241525968], + [11.4917018617, 48.1241231107], + [11.4914671684, 48.124090883], + [11.49138402, 48.1240788536], + [11.4912780727, 48.1240640826], + [11.4911587144, 48.1240493115], + [11.4909709598, 48.1240345965], + [11.4907912518, 48.124015797], + [11.4904425646, 48.1239782539], + [11.4900657142, 48.1239447392], + [11.4899034406, 48.1239286253], + [11.4897451902, 48.1239192256], + [11.4894394184, 48.1238937678], + [11.4890478159, 48.1238696529], + [11.4890263582, 48.1238683101] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 1, + "events": [ + { + "description": "Accident" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5091415847, 48.1250658731], + [11.5091858412, 48.1250618448], + [11.5098523701, 48.1249666741], + [11.5112055446, 48.1247949636], + [11.5115971471, 48.1247467346], + [11.5118090416, 48.1247198785], + [11.512173822, 48.1246796504] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + }, + { + "description": "Accident" + }, + { + "description": "Contraflow" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.4991302396, 48.125520519], + [11.4997364188, 48.1256130591], + [11.5008589233, 48.1257136556], + [11.5016917492, 48.1257485119], + [11.5024481321, 48.1257498546], + [11.5026291813, 48.1257511974], + [11.5028960611, 48.1257431408], + [11.5030274893, 48.1257377697], + [11.5031575764, 48.1257337413], + [11.5033037568, 48.1257283702], + [11.5035478378, 48.1257190267], + [11.5042827631, 48.1256667143], + [11.504807135, 48.1256211158], + [11.5048768724, 48.1256157446], + [11.5056520308, 48.1255299185], + [11.50582101, 48.1255111196], + [11.5061992015, 48.1254722348], + [11.5066712702, 48.1254119214], + [11.5071715022, 48.1253381241], + [11.5075121428, 48.125287154], + [11.5075684692, 48.1252791533], + [11.507758906, 48.1252509547], + [11.5079359318, 48.1252241548], + [11.5083074177, 48.1251731847], + [11.508426776, 48.1251557284], + [11.5085099245, 48.1251503572], + [11.5085756386, 48.1251410136], + [11.5086587871, 48.1251275857], + [11.5091093982, 48.1250699015], + [11.5091858412, 48.1250618448], + [11.5098523701, 48.1249666741], + [11.5112055446, 48.1247949636], + [11.5115971471, 48.1247467346], + [11.5118090416, 48.1247198785], + [11.512173822, 48.1246796504] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 1, + "events": [ + { + "description": "Accident" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.512173822, 48.1246796504], + [11.5130723621, 48.1245522516] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5175275112, 48.054802749], + [11.5173263456, 48.0548456651], + [11.5169387664, 48.0549033161], + [11.5164814497, 48.0549355311], + [11.5159369613, 48.054939509], + [11.5155145134, 48.0549046607], + [11.5151068176, 48.054849699], + [11.5143276359, 48.0547128828], + [11.5132413412, 48.0545761223] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.512173822, 48.1246796504], + [11.5125131215, 48.1245924799], + [11.5130562688, 48.124499938], + [11.5130777265, 48.1244972524], + [11.5134881045, 48.1244302238], + [11.5136476959, 48.124407396], + [11.5141559745, 48.12430551], + [11.5144523586, 48.1242518534], + [11.514559647, 48.1242276827], + [11.5146454776, 48.1242075964], + [11.5148560311, 48.1241700534], + [11.5149351562, 48.1241539396], + [11.515022328, 48.124136483], + [11.515368333, 48.1240640826], + [11.5157867576, 48.1239916821], + [11.5163030828, 48.1238991391], + [11.5167389418, 48.1238253956], + [11.5170017983, 48.1237797954], + [11.5174322928, 48.1237033101], + [11.5180170144, 48.1236000799], + [11.5183978881, 48.1235397083], + [11.5186674501, 48.1234873937], + [11.5188163127, 48.1234511931], + [11.5189531053, 48.1233988784], + [11.5190858747, 48.1233318483], + [11.5191730465, 48.1232808763], + [11.5192065741, 48.1232513898] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5206911768, 48.1243068528], + [11.5209647621, 48.1244905383], + [11.5210264529, 48.1245079949] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5210935081, 48.1852667589], + [11.5211592222, 48.1862189045], + [11.5211806799, 48.1864080127], + [11.5211873854, 48.186473731], + [11.5212115253, 48.1867003914], + [11.5212235953, 48.1868076859], + [11.5212611462, 48.1871214651], + [11.5212933327, 48.1873387344], + [11.5213416125, 48.1876431782], + [11.5213536824, 48.1877290122], + [11.5213912333, 48.1879127502], + [11.5214086677, 48.1880133364], + [11.5214153732, 48.1880535709], + [11.5214247609, 48.1881045344], + [11.5214730407, 48.1884102589], + [11.5214918162, 48.1885121853], + [11.521528026, 48.1886959205], + [11.5215588714, 48.1888608792], + [11.5215977634, 48.189031202], + [11.5216219033, 48.1891197159], + [11.5216581131, 48.1892323698], + [11.5217157806, 48.1893785513], + [11.5218203868, 48.1896172688], + [11.5218807365, 48.1897527203] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5202848221, 48.0763878358], + [11.5202982331, 48.0763878358], + [11.5204672123, 48.0763838036], + [11.5207609142, 48.0763757392], + [11.5208521093, 48.076373051], + [11.5218472089, 48.0763422495], + [11.5221905316, 48.076332841] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5221905316, 48.076332841], + [11.5218472089, 48.0763422495], + [11.5208547915, 48.076373051] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5231440569, 48.1325881617], + [11.5222642924, 48.1319323543] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5235544349, 48.1963603545], + [11.5229831244, 48.1959298584], + [11.5219625438, 48.1950836058], + [11.5210344995, 48.1952029514] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5210344995, 48.1952029514], + [11.5219625438, 48.1950836058], + [11.5229831244, 48.1959298584], + [11.5235544349, 48.1963603545] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5238816644, 48.0762684377], + [11.5237475539, 48.0762832225], + [11.5236080791, 48.0762952631], + [11.5234095956, 48.0763073597], + [11.5231413747, 48.0763207444], + [11.5228677894, 48.0763274647], + [11.5221905316, 48.076332841], + [11.5218472089, 48.0763422495], + [11.5208521093, 48.076373051], + [11.5207609142, 48.0763757392], + [11.5204672123, 48.0763838036], + [11.5202982331, 48.0763878358], + [11.5200823153, 48.0763838036], + [11.5197456981, 48.0763743951], + [11.519230714, 48.0763475698], + [11.518884709, 48.0763368732], + [11.5188753213, 48.0763368732], + [11.518718412, 48.0763341851], + [11.5185802783, 48.076332841], + [11.5184220279, 48.0763234325], + [11.5182463432, 48.0763033275], + [11.5179915334, 48.076273814], + [11.5178386475, 48.0762577411], + [11.5176978315, 48.0762510208], + [11.5175677444, 48.0762510208], + [11.5174376572, 48.0762563971], + [11.51731964, 48.0762604293], + [11.5172364916, 48.0762644615] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5243523921, 48.1779751441], + [11.52274709, 48.1780998952], + [11.5213805045, 48.1781414229] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5293117965, 48.1308473979], + [11.5290771033, 48.1307186718], + [11.5286908652, 48.1305067569], + [11.5284481252, 48.1303766873], + [11.5283006037, 48.1302841559], + [11.5281343068, 48.130196939], + [11.5278245116, 48.1300347005], + [11.5276595558, 48.1299475391], + [11.5271579827, 48.1296685434], + [11.5267113949, 48.1294244558], + [11.5265491213, 48.1293332653], + [11.5261575187, 48.1291120018], + [11.5259845163, 48.12901544], + [11.5253930892, 48.1286493315], + [11.5251946057, 48.1285272575], + [11.5249102915, 48.1283542721], + [11.5246742572, 48.1281665163] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5304316188, 48.1313449568], + [11.5303082372, 48.1312725107], + [11.5302170421, 48.1312175187], + [11.5299246813, 48.1310485703], + [11.5298066641, 48.130978809], + [11.5295572187, 48.1308353141], + [11.5291012431, 48.1305791482], + [11.5288155879, 48.1304302816], + [11.5286814774, 48.1303525195], + [11.5285688246, 48.1302854426], + [11.5285192038, 48.1302573027], + [11.5284280087, 48.1302063376], + [11.528252324, 48.1301205191], + [11.5281128491, 48.1300507566], + [11.5277427043, 48.129858979], + [11.5270855631, 48.1295036179], + [11.5262648071, 48.1290570075], + [11.5262366439, 48.1290409511], + [11.5260247494, 48.1289269342], + [11.5258638169, 48.1288330574], + [11.5255137886, 48.1286493315], + [11.5252522732, 48.128501802], + [11.5252334977, 48.1284910604], + [11.5250993873, 48.128414638], + [11.5246742572, 48.1281665163], + [11.5244167651, 48.1280002434], + [11.5242410804, 48.1278942804], + [11.523979565, 48.1277253211], + [11.5235276128, 48.1274074859], + [11.5230930949, 48.1270949637], + [11.5228409673, 48.1269085461], + [11.5225714053, 48.1267087562], + [11.5224627758, 48.1266283029], + [11.5221918727, 48.1264297988], + [11.5220577623, 48.1263318892], + [11.5220443512, 48.1263211471], + [11.5219102408, 48.1262112083], + [11.5216862763, 48.1260046459], + [11.5216111745, 48.1259295626], + [11.5215816702, 48.1258947065], + [11.5213818456, 48.1256532865], + [11.5213027204, 48.125558061], + [11.5212235953, 48.1254467778], + [11.5212128664, 48.1254320072] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5319403614, 48.2170884434], + [11.5315487589, 48.2174049413], + [11.5312912668, 48.2175390907], + [11.531127652, 48.2176087902], + [11.5306475366, 48.2177160758], + [11.5305670704, 48.2177281392], + [11.5303042139, 48.2177697465], + [11.5298227574, 48.2178475437] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5324432756, 48.2521851686], + [11.5324151124, 48.2520376594], + [11.5324043835, 48.2519893826], + [11.5323869492, 48.2519222973], + [11.5323319639, 48.251819046], + [11.5322742964, 48.2517358867], + [11.5322112645, 48.2516661778], + [11.5321334804, 48.2516205796], + [11.5319926645, 48.2515561728], + [11.5318411196, 48.2515199509], + [11.5316426362, 48.2514998586], + [11.5314682926, 48.251511914], + [11.5313730742, 48.2515307226], + [11.5312791969, 48.2515655492], + [11.5311866606, 48.251609808], + [11.5310981477, 48.2516701963], + [11.5310284103, 48.2517412446], + [11.5309653784, 48.2518217249], + [11.5309372152, 48.2519062236], + [11.5309238042, 48.2520228694], + [11.5309144164, 48.2521275156], + [11.5309197808, 48.2522146927], + [11.5309720839, 48.2525043516] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5363096799, 48.1536193437], + [11.5365135277, 48.1536743117], + [11.5365416909, 48.1536622892], + [11.5365658308, 48.1536542369], + [11.5367374922, 48.1536072652], + [11.5368783082, 48.1535643756] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5368984247, 48.199938389], + [11.5366395916, 48.2007081908], + [11.5362117792, 48.2019245758], + [11.5361500884, 48.2020935702], + [11.5361111964, 48.2022732903], + [11.5360870565, 48.202607198], + [11.5360655988, 48.2028083684], + [11.5360763277, 48.2029277519], + [11.536105832, 48.2029947897], + [11.5361567939, 48.2030725535], + [11.5362184848, 48.2031342841], + [11.5362935866, 48.2031879141], + [11.5366650726, 48.2034507565], + [11.5366932358, 48.2035137715], + [11.5367160345, 48.2035929311], + [11.5367160345, 48.2037578978] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5373195316, 48.1579712532], + [11.5373114849, 48.1578505349], + [11.537299415, 48.1576480138], + [11.5372953917, 48.1575823145], + [11.5372819806, 48.1573677147], + [11.5372337009, 48.156638192], + [11.5372041966, 48.1561781741], + [11.5371626223, 48.1555652765], + [11.5371103193, 48.1548075457], + [11.5370969082, 48.1546265408], + [11.5370928849, 48.1545380233], + [11.5370674039, 48.1543126746], + [11.5370647217, 48.1542778377], + [11.5370580162, 48.1541920036], + [11.5370513107, 48.1540565699], + [11.5370499696, 48.1539761035], + [11.5370271708, 48.1537789353], + [11.5370191241, 48.153683706], + [11.537004372, 48.1535187459], + [11.5369829143, 48.153167407], + [11.5369560922, 48.1527395677], + [11.5369426812, 48.1524176933], + [11.5369198824, 48.1520958728], + [11.5369064714, 48.1518061488], + [11.5369051303, 48.1517578892], + [11.5369037892, 48.1517243927], + [11.5369037892, 48.1516854719], + [11.5369024481, 48.1516090281], + [11.5368930603, 48.1514749297], + [11.5368850137, 48.1513354625], + [11.5368528272, 48.1508929006], + [11.5367884542, 48.150061395], + [11.536785772, 48.1500252131], + [11.5367589499, 48.1496684257], + [11.5367307867, 48.1492755094], + [11.5366610492, 48.1485432432], + [11.5366409327, 48.1484104789], + [11.5366355683, 48.1483689271], + [11.5366315449, 48.1483407412], + [11.5365792419, 48.1478982094], + [11.5365510787, 48.1476983893], + [11.5365403498, 48.1476273084], + [11.5365242566, 48.1475615963], + [11.536529621, 48.1474502489], + [11.5365202333, 48.1473751411], + [11.5364934112, 48.1472759292], + [11.5364572014, 48.1471739767], + [11.5364022161, 48.1470600001], + [11.5363458897, 48.1469500498], + [11.5362841989, 48.1468494389], + [11.5362359191, 48.1467649346], + [11.5361393596, 48.146628195], + [11.5360374356, 48.1465061078], + [11.5360025669, 48.1464645544], + [11.5359757448, 48.1464323408], + [11.5358966197, 48.1463425227], + [11.5358537043, 48.1462956003], + [11.5358402933, 48.1462808357], + [11.5357960368, 48.1462338572], + [11.5357195939, 48.146156119], + [11.5356927718, 48.1461252474], + [11.5356337632, 48.1460635601], + [11.5354728306, 48.1458838666], + [11.5353642012, 48.1457551223], + [11.535323968, 48.1456934345], + [11.5352408196, 48.1455673742], + [11.5351831521, 48.1454748142], + [11.5351335312, 48.1453849386], + [11.5350879337, 48.1452897496], + [11.5350208784, 48.145112738], + [11.5349712576, 48.144941039], + [11.53492566, 48.1447036794], + [11.5348559226, 48.1443228057], + [11.5348371471, 48.1442235879], + [11.5348291005, 48.1441779499], + [11.5347432698, 48.1435396288], + [11.5347244943, 48.1434162478], + [11.5346990133, 48.1432552816], + [11.5346856023, 48.14318151], + [11.5346735324, 48.1429924101], + [11.5346520747, 48.1429079554], + [11.5346319581, 48.1428341832], + [11.5346198882, 48.1427523569], + [11.534605136, 48.1426611901], + [11.5345984305, 48.1426236047], + [11.5345809962, 48.1425203567], + [11.5345635618, 48.1424211354], + [11.5345313753, 48.1422145823], + [11.5345260109, 48.1421770525], + [11.5345219876, 48.1421394667], + [11.5345099176, 48.1420804593], + [11.5345005299, 48.1420415871], + [11.5344924833, 48.1419892913], + [11.5344710256, 48.1418055565], + [11.5344616379, 48.1417317828], + [11.5344535912, 48.1416821714], + [11.5344227458, 48.141493066], + [11.5344066526, 48.1413938428], + [11.5344053115, 48.1413857886], + [11.5343664194, 48.1409955495], + [11.534335574, 48.1407018475], + [11.5343074108, 48.1404335934], + [11.5343007053, 48.1401117537], + [11.5343033875, 48.1400191838], + [11.5343060697, 48.1399226425], + [11.534322163, 48.1394277956], + [11.5343409384, 48.1391769864], + [11.534347644, 48.1390509101], + [11.5343664194, 48.1387585953], + [11.5344053115, 48.1382959], + [11.534412017, 48.1381953282], + [11.5344160403, 48.138112152], + [11.5344294513, 48.1379096649], + [11.5344240869, 48.1378291732], + [11.5344200636, 48.1377487374], + [11.5344146992, 48.1376092329], + [11.5343972648, 48.1374523318], + [11.5343892182, 48.1373598131], + [11.534373125, 48.137165322], + [11.5343208219, 48.1367790783], + [11.5343033875, 48.1366476821], + [11.5342644955, 48.1363915452], + [11.534220239, 48.1361689137], + [11.5341451372, 48.1358041427], + [11.534116974, 48.1356767156], + [11.5340593065, 48.1354205739], + [11.5340338255, 48.1352971734], + [11.5340070034, 48.135146978], + [11.5339721347, 48.1349927545], + [11.533937266, 48.1348345029], + [11.5339091028, 48.1346789359], + [11.5338822807, 48.1345354514], + [11.5338433887, 48.1343610878], + [11.5337977911, 48.1341773816], + [11.5337535347, 48.1340553207], + [11.533732077, 48.1339922763], + [11.5336596574, 48.1338232811], + [11.5336060132, 48.1337280708], + [11.5335832144, 48.1336851645], + [11.5335228647, 48.1335872687], + [11.5334772671, 48.1335161683], + [11.5334397162, 48.1334638638], + [11.5334021653, 48.1334102167], + [11.5333833898, 48.1333874489], + [11.5333418156, 48.1333378294], + [11.5332801248, 48.1332788119], + [11.5332103873, 48.1331943412], + [11.5330414082, 48.1330280285], + [11.5328241492, 48.1328576876], + [11.5325331296, 48.1326699483], + [11.532307824, 48.1325076617], + [11.5321683491, 48.1324205045], + [11.5321106816, 48.1323802824], + [11.5320261921, 48.1323333472], + [11.5319712068, 48.1322944676], + [11.5318370963, 48.1322126245], + [11.5316962804, 48.132128152], + [11.5316091086, 48.1320731609], + [11.5314803625, 48.1319954013], + [11.5311866606, 48.1318102881], + [11.5310042704, 48.1317003611], + [11.5308165158, 48.1315876927], + [11.5306917931, 48.1315125616], + [11.5305737759, 48.1314334585], + [11.5305281783, 48.1314053192], + [11.5305067207, 48.1313918929] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5378948654, 48.1624786682], + [11.5379310752, 48.1627227664], + [11.5380021538, 48.1637929605], + [11.538004836, 48.1638305304], + [11.5380356814, 48.1642824849], + [11.5380423869, 48.1643844034], + [11.5380718912, 48.1648712387], + [11.5380785967, 48.1649570549], + [11.5380866433, 48.1650468963], + [11.5381054188, 48.1652614639], + [11.5381054188, 48.1653298928], + [11.5381121243, 48.1654385178], + [11.5381161476, 48.1655283583] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5388296152, 48.1282818777], + [11.5387920643, 48.1283529294], + [11.5387692655, 48.1284306946], + [11.5387746299, 48.1285460553] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5401264633, 48.1171520065], + [11.5401197578, 48.1173196576], + [11.5401264633, 48.1173492035], + [11.5401532854, 48.1174256424], + [11.5402283872, 48.1175570318], + [11.5402619148, 48.1176227824], + [11.5402793492, 48.1176630161], + [11.5403209234, 48.1177394544], + [11.540456375, 48.1179660829], + [11.5405113603, 48.1181377602], + [11.540520748, 48.1182731768], + [11.5405194069, 48.118361701], + [11.5405287946, 48.1185561514], + [11.5405475701, 48.1187372276], + [11.54055964, 48.1188606119], + [11.54057171, 48.1189571368], + [11.5405301357, 48.1190644611], + [11.5405623223, 48.1192294201], + [11.5405797566, 48.1194413255], + [11.5405837799, 48.1194909025], + [11.5405985321, 48.1196263714], + [11.5406052376, 48.1197108644], + [11.5406280364, 48.1198034149], + [11.5406441296, 48.1198610491], + [11.5408399309, 48.1202526798], + [11.5410196389, 48.1206120776], + [11.5411376561, 48.1208830092], + [11.5411510671, 48.1209352706], + [11.5411658193, 48.1210050455], + [11.5411644782, 48.1210305046], + [11.5411591138, 48.1210761073], + [11.541149726, 48.1211096238], + [11.5411121751, 48.1212075434], + [11.5410840119, 48.1212839764], + [11.5410813297, 48.1212920338], + [11.5410652364, 48.1213443507], + [11.541046461, 48.1214086975], + [11.5410370733, 48.1214623572], + [11.5410410966, 48.1215025879], + [11.541046461, 48.1215414756], + [11.5410518254, 48.1215763347] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5411255861, 48.1245428519], + [11.5411738659, 48.1244261953], + [11.5411980058, 48.1243577679], + [11.5412476267, 48.124166025], + [11.5412811543, 48.1239554818], + [11.5413106586, 48.1237904821], + [11.5413307751, 48.1235960514], + [11.5413280929, 48.1232352756], + [11.5413213874, 48.1231561598], + [11.5413079764, 48.1230864437], + [11.5412918831, 48.1229979277], + [11.5411671604, 48.1222106765], + [11.5411403383, 48.1220484129], + [11.5411269273, 48.1219813251], + [11.541110834, 48.1219048931], + [11.5410746242, 48.1216916549], + [11.5410665776, 48.1216460528], + [11.5410518254, 48.1215763347] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.54102098, 48.1846980784], + [11.5410451199, 48.1847919647], + [11.5410933996, 48.1849931492], + [11.5411215628, 48.1851339779], + [11.5411282684, 48.1851715321], + [11.5411845947, 48.1854450849], + [11.5412154402, 48.1856020069], + [11.5412449445, 48.1857709993], + [11.541265061, 48.1858809781], + [11.541290542, 48.1860338193], + [11.5413307751, 48.1863382708], + [11.5413388218, 48.1863986244], + [11.5413468684, 48.1864656839], + [11.5412409211, 48.1864804369], + [11.5411765481, 48.1864898253], + [11.5404577161, 48.1865716377], + [11.53989177, 48.1866400381], + [11.5397643651, 48.1866494264], + [11.5394009258, 48.1866936854], + [11.5392346288, 48.1867044149], + [11.5390683318, 48.1867164855], + [11.5370606984, 48.1868720066], + [11.5368260051, 48.1868907831], + [11.536606064, 48.1869068772], + [11.5364665891, 48.1869176066], + [11.5359636749, 48.1869578419], + [11.5356176699, 48.1869873478], + [11.5354299153, 48.1870034419], + [11.5351160969, 48.1870316065], + [11.5349833275, 48.1870436771], + [11.5347218121, 48.187066477], + [11.5342014636, 48.1870986652], + [11.5337280537, 48.1871174416], + [11.5336784328, 48.1871254886], + [11.53356578, 48.1871308533], + [11.5329756941, 48.1871697472], + [11.5328871812, 48.1871751119], + [11.5327034498, 48.1871871825], + [11.5326457823, 48.187191206], + [11.5322340633, 48.1872166882], + [11.5316225196, 48.1872582644], + [11.5314159895, 48.1872730173], + [11.5313019956, 48.1872824054], + [11.5312537159, 48.1872850878], + [11.5311544741, 48.1872931348], + [11.530998906, 48.1873025229], + [11.5308473612, 48.1873333698], + [11.5307950581, 48.1873440991], + [11.5307172741, 48.1873736047], + [11.5306301023, 48.1874057927], + [11.5306059624, 48.1874151808], + [11.5305120851, 48.1874688274] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5448109413, 48.226493635], + [11.544049194, 48.226445334], + [11.5434966589, 48.2264131706], + [11.5428515877, 48.2263702302], + [11.5428274478, 48.2263675499], + [11.542663833, 48.226350128], + [11.5425256993, 48.2263353864], + [11.5423312391, 48.2263246653], + [11.5419731642, 48.2262857452], + [11.5417317654, 48.2262643028], + [11.540854683, 48.2261717768], + [11.5403705443, 48.2261315164], + [11.5399963762, 48.2260859513], + [11.5395940448, 48.2260510515], + [11.5392051245, 48.2260121871], + [11.5391112472, 48.226002806], + [11.5383950974, 48.2259478038], + [11.538108101, 48.2259303818], + [11.537389269, 48.225853937], + [11.5366302038, 48.2257640905], + [11.5361474062, 48.2256970267], + [11.5353856589, 48.2255843413], + [11.5348518993, 48.2255119165], + [11.5341357495, 48.2254046472], + [11.5334853138, 48.2253054187], + [11.5326632167, 48.2251753102], + [11.5323064829, 48.2251230433], + [11.5315755809, 48.2249915941], + [11.5311732496, 48.2249178283], + [11.5302894617, 48.2247635954], + [11.5294418837, 48.2246066817], + [11.5288544799, 48.2244873488], + [11.5283488835, 48.2243894587], + [11.5277185644, 48.2242606881], + [11.527380606, 48.2241882614], + [11.5271070207, 48.2241265563], + [11.5267355348, 48.2240487686], + [11.526109239, 48.2239160323], + [11.5253153051, 48.2237309715], + [11.5244958903, 48.2235431738], + [11.5243081356, 48.2234976063], + [11.5239527429, 48.2234090959], + [11.5236107613, 48.223324606], + [11.5233707036, 48.2232655803], + [11.5228087808, 48.2231220643], + [11.5222106482, 48.2229692221], + [11.5216862763, 48.2228270455], + [11.5210800971, 48.2226567234], + [11.5207287277, 48.2225628506], + [11.5201802159, 48.2224099509], + [11.5200233067, 48.2223603617], + [11.5195619668, 48.2222208639], + [11.5190966035, 48.2220881228], + [11.5187465752, 48.2219754295], + [11.5181980635, 48.2218024241], + [11.517691126, 48.2216442168], + [11.5172190572, 48.2214859533], + [11.5169052387, 48.2213853769], + [11.5164734031, 48.2212391751], + [11.5159785355, 48.221070188], + [11.5155239011, 48.220913263], + [11.5150209869, 48.2207349486], + [11.5144992973, 48.2205457996], + [11.5141304935, 48.2204090333], + [11.5135632063, 48.2201971538], + [11.5129422749, 48.2199610918], + [11.5123709644, 48.2197344669], + [11.5118130649, 48.2195064448], + [11.5116923655, 48.2194595335], + [11.5112122501, 48.2192623936], + [11.5108286942, 48.219097421], + [11.5104746426, 48.2189499281], + [11.5101889874, 48.2188265052], + [11.5098215247, 48.2186642677], + [11.5096297468, 48.2185770893], + [11.5092944707, 48.2184281987], + [11.5090047921, 48.2182981286], + [11.5081974472, 48.2179226042], + [11.5076784397, 48.2176745243], + [11.5071406568, 48.2174089625], + [11.5067115034, 48.217202432], + [11.5061616505, 48.2169221792], + [11.5057888235, 48.2167290508], + [11.5053180958, 48.2164863267], + [11.5039072539, 48.2157272621], + [11.5037101115, 48.2156226531], + [11.5034110452, 48.2154523071], + [11.5032139028, 48.215339655], + [11.5027351285, 48.2150647538], + [11.502382418, 48.2148582139], + [11.5020270253, 48.2146449709], + [11.5016622449, 48.2144263651], + [11.5013752485, 48.2142466319], + [11.5009407307, 48.2139770867], + [11.5004485453, 48.2136646448], + [11.5000301207, 48.2133963812], + [11.4996452237, 48.2131469389], + [11.4993649329, 48.212969938], + [11.4990242923, 48.2127473036], + [11.4987480248, 48.2125796849], + [11.4984798039, 48.2124187123], + [11.498160621, 48.2122403684], + [11.4978602136, 48.212075429], + [11.4974967743, 48.2118849633], + [11.4972513522, 48.2117629197], + [11.4970354344, 48.2116609837], + [11.4966773594, 48.2114920209], + [11.4964198674, 48.2113793601], + [11.4962575937, 48.211306971], + [11.4960778857, 48.211234526], + [11.4958338047, 48.211132589], + [11.4955454672, 48.2110173022], + [11.4953067506, 48.2109274296], + [11.4951230193, 48.2108563247], + [11.49497818, 48.2108000215], + [11.4948024953, 48.2107396966], + [11.4945436622, 48.210645802], + [11.4942982401, 48.2105653127], + [11.4940742756, 48.2104929225], + [11.493796667, 48.2104043896], + [11.4934573675, 48.2103024509], + [11.4931998755, 48.2102300604], + [11.4929021503, 48.2101442082], + [11.492629906, 48.2100718174], + [11.4923710729, 48.2100087547], + [11.4920693244, 48.2099350231], + [11.4918011035, 48.2098706197], + [11.491473874, 48.2097995691], + [11.4912713672, 48.2097566147], + [11.4910715426, 48.2097177379], + [11.4906289781, 48.2096332813], + [11.4905109609, 48.2096104355], + [11.4902239646, 48.2095621745], + [11.4901153351, 48.2095434063], + [11.4900040234, 48.2095273193], + [11.4897223915, 48.2094844205], + [11.4894716049, 48.20945085], + [11.4891993607, 48.2094133136], + [11.488856038, 48.2093690741], + [11.4885569717, 48.2093315376], + [11.4881103839, 48.2092939452], + [11.4872587825, 48.2092282562], + [11.4869382585, 48.2092054661], + [11.4866686965, 48.2091934008], + [11.4863065983, 48.2091812796], + [11.4856749381, 48.209173236], + [11.4855850841, 48.2091745766], + [11.4854657258, 48.2091718954], + [11.4852980877, 48.209166533], + [11.4851398374, 48.2091692142], + [11.4845470692, 48.2091840166], + [11.4841970409, 48.2091947414], + [11.4839006568, 48.2092054661], + [11.483377626, 48.2092430027], + [11.4830638076, 48.209268474], + [11.482813021, 48.2092885829], + [11.4826038087, 48.2093073511], + [11.4824334885, 48.20932746], + [11.4820982123, 48.2093583494], + [11.4820029939, 48.2093704147], + [11.4813042785, 48.2094588935], + [11.4809462036, 48.2095005076], + [11.4808000232, 48.2095192758], + [11.4806739594, 48.2095367034], + [11.4805586244, 48.209554131], + [11.4801857973, 48.2096010514], + [11.4796292389, 48.2096667958], + [11.4793516303, 48.2096976292], + [11.4792510475, 48.2097083538], + [11.4788353051, 48.2097512524], + [11.4784825946, 48.2097754387], + [11.4780091847, 48.2098089531], + [11.4771441723, 48.2098464893], + [11.4769121612, 48.2098491704], + [11.4763784016, 48.209859895], + [11.4753913487, 48.209859895], + [11.4748294259, 48.209859895], + [11.4729518796, 48.2098464893], + [11.4724194611, 48.2098491704], + [11.47196885, 48.2098424675], + [11.4715236033, 48.2098397864], + [11.4711910094, 48.2098344241], + [11.4706961418, 48.2098397864], + [11.4703085626, 48.2098424675], + [11.4698163773, 48.2098384458], + [11.4695508386, 48.2098344241], + [11.4692316557, 48.2098290618], + [11.4687917734, 48.2098022502], + [11.4683357979, 48.2097754387], + [11.4680970813, 48.2097566147], + [11.4678530003, 48.2097298031], + [11.4676250125, 48.2097056727], + [11.4674305523, 48.2096815422], + [11.4672749842, 48.2096574117], + [11.4671033228, 48.2096332813], + [11.467041632, 48.2096252378] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5484600867, 48.1241499111], + [11.5486330892, 48.1242370824], + [11.5487269665, 48.1242893962], + [11.5488543714, 48.1243913382], + [11.5489039923, 48.1244315666], + [11.5489603187, 48.1244744806], + [11.5490260328, 48.1245147089], + [11.5490971113, 48.1245817374], + [11.5491735543, 48.1247038208], + [11.5493908132, 48.1248848193], + [11.5496590341, 48.1250766155] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5453192199, 48.2513321993], + [11.5455498899, 48.251309428], + [11.5456491317, 48.2513000515], + [11.5461212004, 48.2512705269], + [11.5466656889, 48.2512343048], + [11.5475280191, 48.2511820087], + [11.5478029455, 48.2511619163], + [11.5483112241, 48.2511243546], + [11.5483635272, 48.2511203361], + [11.5488865579, 48.2510841139], + [11.5501512195, 48.2510009534], + [11.5506635214, 48.2509741634], + [11.5511557068, 48.2509459781], + [11.5513796712, 48.2509299041], + [11.5517055596, 48.2509084163], + [11.5520757045, 48.2508843052] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5532075967, 48.1364035717], + [11.5532008911, 48.1360643101], + [11.5531713868, 48.1351737726] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5498159434, 48.1121872494], + [11.5506487693, 48.1122677253], + [11.5507882441, 48.1122784703], + [11.5509827043, 48.1122811566], + [11.5517001952, 48.1122945319], + [11.5530895795, 48.1122704115], + [11.5534865464, 48.1122529508] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.553469112, 48.1500372364], + [11.5534892286, 48.1500855535], + [11.5536260213, 48.1502585216], + [11.5538499857, 48.1505267803], + [11.5540162827, 48.1507359842], + [11.5542053784, 48.1509693454], + [11.554405203, 48.1512160707], + [11.5545822288, 48.1514319824] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.553469112, 48.1500372364], + [11.5535388495, 48.1500198445], + [11.5545714999, 48.1497006374], + [11.5551803614, 48.1495035086], + [11.555842867, 48.1492956418], + [11.556099018, 48.1492205367], + [11.5564517285, 48.1491159038] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5564517285, 48.1491159038], + [11.5571464206, 48.1501042876], + [11.5574830378, 48.1502075763], + [11.5581334735, 48.1502477845] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5545111502, 48.1391407968], + [11.5552071835, 48.1391635621], + [11.5554485823, 48.1391729591], + [11.5555263664, 48.1391756439], + [11.5555746461, 48.1391635621], + [11.555649748, 48.1391528786], + [11.5558777357, 48.1391475089], + [11.5559380854, 48.1391475089], + [11.5559890474, 48.1391461665], + [11.5561580266, 48.1391488514], + [11.5563095714, 48.1391515362], + [11.5568875874, 48.1391622197], + [11.5574092771, 48.1391649045], + [11.5577405299, 48.1391675894], + [11.5579899753, 48.1391702742], + [11.5581133569, 48.1391716167], + [11.558640411, 48.1391796712], + [11.5590950454, 48.1391810137], + [11.5592117215, 48.1391823561], + [11.5594853069, 48.1391984652], + [11.5596274639, 48.1392051773], + [11.559871545, 48.1392185456], + [11.56020548, 48.1392427093], + [11.5607164408, 48.1392708442], + [11.5609095598, 48.139282926], + [11.5609605218, 48.1392909806], + [11.5609953905, 48.1392990351], + [11.5610611047, 48.1393258276], + [11.5610879267, 48.1393459639], + [11.56110402, 48.139362073], + [11.5611362065, 48.139413029], + [11.5611643697, 48.1394974895], + [11.5611724163, 48.139537762], + [11.5612220372, 48.1399213001], + [11.5612569059, 48.1401935282], + [11.5612797047, 48.1404000895], + [11.561283728, 48.1404684956], + [11.561283728, 48.1405650358], + [11.561283728, 48.1406146483], + [11.5612850691, 48.1406455232], + [11.5612864102, 48.1407755668], + [11.5612877513, 48.1408305486], + [11.5612890924, 48.1409700443], + [11.5613078679, 48.1410652413], + [11.5613132323, 48.1411242499], + [11.5613132323, 48.1412637448], + [11.56132262, 48.1413482582], + [11.5613333489, 48.1413992122], + [11.561348101, 48.1414743288], + [11.5613722409, 48.1415936874], + [11.561412474, 48.1417063339], + [11.5614647771, 48.1417411793], + [11.5615452434, 48.1417881059], + [11.5616029109, 48.1418203224], + [11.5616619195, 48.1418471136], + [11.5617504324, 48.1418927537], + [11.5617933477, 48.1418833572], + [11.5618912483, 48.1418967248], + [11.5619515981, 48.1418779878], + [11.562092414, 48.1418350884], + [11.5622922386, 48.1417693688], + [11.562361976, 48.1417465487], + [11.5625094975, 48.141695595] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5636990572, 48.2057668398], + [11.5638774241, 48.2059908452], + [11.5639498438, 48.2061195501], + [11.5638707186, 48.2069885791], + [11.5638184155, 48.2073305558], + [11.5637594069, 48.207706102], + [11.5637258793, 48.2078884836], + [11.5636856462, 48.2079313836], + [11.5635904278, 48.2080105364], + [11.5634925271, 48.2080856114], + [11.5633597578, 48.2081513577] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.555778494, 48.1296725714], + [11.5557369198, 48.1287619504], + [11.5557436253, 48.1286801577], + [11.5557570363, 48.1286023929], + [11.5558106805, 48.128511201], + [11.5558562781, 48.1284615768], + [11.5559206511, 48.1284065818], + [11.5559488143, 48.1283770982], + [11.5559756364, 48.1283489013], + [11.556099018, 48.128233596], + [11.5563779677, 48.1280015861], + [11.5567266549, 48.1276850953], + [11.5573261286, 48.1271231613], + [11.5577230955, 48.126753011], + [11.5577821041, 48.1266939859], + [11.5578397716, 48.1266363035], + [11.5578625704, 48.1265759914], + [11.5579390134, 48.1265021958], + [11.5580570306, 48.1263895719], + [11.5582434441, 48.1262514353], + [11.5583668257, 48.1261830102], + [11.5585290993, 48.1261025561], + [11.5586497988, 48.1260489014], + [11.5587718393, 48.1260059887], + [11.5591419841, 48.1258879926], + [11.5592962111, 48.1258450798], + [11.5598795916, 48.1256814849], + [11.5604683365, 48.125527233], + [11.5605796481, 48.1254964049], + [11.5607231463, 48.1254534918], + [11.5608760322, 48.1253998363], + [11.5613011624, 48.125229526], + [11.5615465845, 48.1251436992], + [11.5618241931, 48.1250631876], + [11.5619140471, 48.1250390732], + [11.5620642508, 48.1249961597], + [11.5621058251, 48.1249854173], + [11.562323084, 48.1249197321], + [11.5627321209, 48.1247909911], + [11.5636521186, 48.1244811946], + [11.5637875701, 48.1244329094], + [11.5639444793, 48.1243644819], + [11.5640195812, 48.1243323104] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5633222069, 48.1556564763], + [11.5640370156, 48.1554606565] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5641134585, 48.2028727249], + [11.5641121174, 48.2028821661], + [11.5640920008, 48.2030363532], + [11.5640611554, 48.2032522701], + [11.5640008057, 48.2036438792], + [11.5639444793, 48.2041924062], + [11.5638787652, 48.2046979687], + [11.5637701358, 48.205282739], + [11.5636990572, 48.2057668398], + [11.5635314192, 48.2069604254], + [11.5634871627, 48.2072487765], + [11.5633597578, 48.2081513577], + [11.5633356179, 48.2083176503], + [11.5632645394, 48.2087803286] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5586243178, 48.1374161411], + [11.559255978, 48.1374013739], + [11.5595188345, 48.1374000314], + [11.5600190665, 48.1373973464], + [11.5606453623, 48.1373906341], + [11.561027577, 48.1373892916], + [11.5612126495, 48.1373892916], + [11.561527809, 48.1373879491], + [11.5628125871, 48.1373825793], + [11.5636534597, 48.1373839217], + [11.5640115346, 48.1373852642], + [11.5644621457, 48.1373852642], + [11.5645452942, 48.1373919766], + [11.5647397543, 48.1374134561] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5661546196, 48.1378828157], + [11.5659574772, 48.1366905859] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5686477329, 48.2272137882], + [11.5683365966, 48.2271950265], + [11.5670048798, 48.2271252842], + [11.565710714, 48.2270729635], + [11.5653016771, 48.2270501813], + [11.5647893752, 48.2270340998], + [11.56449165, 48.2270233788], + [11.564196607, 48.2270126578], + [11.5638653542, 48.2269978605], + [11.5635475124, 48.2269925], + [11.5633262302, 48.2269831191], + [11.5629627908, 48.2269737382], + [11.5625939871, 48.2269656975], + [11.5620709564, 48.2269549764], + [11.5610423292, 48.2269307983], + [11.5605823303, 48.2269200772], + [11.5605729426, 48.2269200772], + [11.5598527695, 48.2269026555], + [11.5591875817, 48.2268959549], + [11.5587597693, 48.2268879141], + [11.5583493913, 48.2268798733], + [11.5581991876, 48.2268771931], + [11.5577700342, 48.2268678121], + [11.557407936, 48.226866472], + [11.5568165089, 48.2268530149], + [11.5563015248, 48.2268463142], + [11.5556846167, 48.2268382734], + [11.5552863086, 48.2268329129], + [11.5549242104, 48.226823532], + [11.5547793711, 48.2268221918], + [11.5546787883, 48.2268195116], + [11.5545674766, 48.2268168313], + [11.5544910337, 48.2268195116], + [11.554444095, 48.2268168313], + [11.5543341244, 48.2268181714], + [11.5542228128, 48.2268168313], + [11.554149052, 48.226814151], + [11.5540015305, 48.2268101306], + [11.5538392569, 48.2268087905], + [11.553801706, 48.2268074504] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5693544949, 48.1374831527], + [11.5698922778, 48.1373611556], + [11.5700532104, 48.1373289363], + [11.5700800325, 48.1373249088], + [11.5701081957, 48.1373235664], + [11.5701524521, 48.1373249088], + [11.570202073, 48.1373329637], + [11.5702436472, 48.1373517583], + [11.5702718104, 48.1373692105], + [11.5703415479, 48.1374107712], + [11.5703804399, 48.1374295098], + [11.5704367663, 48.1374402496], + [11.5705038215, 48.1374362222], + [11.5706111099, 48.1374295098], + [11.5708069111, 48.1374121136], + [11.571087202, 48.1373825793], + [11.5711193885, 48.1373798943], + [11.5711341406, 48.1373785518], + [11.5711971725, 48.137367868], + [11.5712454523, 48.1373598131] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5725020672, 48.1890043795], + [11.5724967028, 48.1891384916], + [11.5724216009, 48.1900343511], + [11.5724028255, 48.1902328329], + [11.5723867322, 48.1904326549], + [11.572370639, 48.1906204065], + [11.5723438169, 48.1913915775], + [11.5723411347, 48.1916262625], + [11.5723357703, 48.1917737782], + [11.5723143126, 48.1922780104], + [11.5722781028, 48.1929660135], + [11.5722472574, 48.1935118611], + [11.5722459163, 48.1935574552] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5724028255, 48.1902328329], + [11.5724216009, 48.1900343511], + [11.5724967028, 48.1891384916], + [11.5725020672, 48.1890043795], + [11.5725771691, 48.1882882152], + [11.5725919212, 48.1880468651], + [11.5726120378, 48.1877062126], + [11.5726160611, 48.1876270843], + [11.5726241077, 48.1875560028], + [11.572628131, 48.1874580981] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5731417741, 48.2822326048], + [11.5732262636, 48.2823358505], + [11.5731846894, 48.2823895091], + [11.5730331446, 48.2825035196], + [11.5729017164, 48.2825490903], + [11.5728386844, 48.2825450743], + [11.5727756525, 48.2825223168], + [11.5726267899, 48.2824578931], + [11.5719025935, 48.2820032994] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Cyclists on roadway" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5721949543, 48.1540592539], + [11.5733737851, 48.1537011526] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5737962331, 48.1341116523], + [11.5739397312, 48.1342001491], + [11.5741945411, 48.1343624303], + [11.5742723252, 48.1344160764], + [11.5743192638, 48.1344455566], + [11.5743782724, 48.1344885181], + [11.5745217706, 48.1345823846], + [11.5745646859, 48.1346158923], + [11.5746008958, 48.1346427432], + [11.5746987964, 48.1347339242], + [11.574744394, 48.1347821998], + [11.5748127903, 48.1348559276], + [11.5748758222, 48.1349511918], + [11.5749187375, 48.1350115499], + [11.5749589707, 48.1350812498], + [11.5749898161, 48.1351483205], + [11.5750126149, 48.1352046508], + [11.5750421192, 48.1352944883], + [11.5749160553, 48.1352985159] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5679919328, 48.1766756358], + [11.5684023107, 48.1768070413], + [11.5686383451, 48.1768741134], + [11.5688448752, 48.1769384466], + [11.5690487231, 48.1769934455], + [11.5693088974, 48.177075273], + [11.5697353686, 48.1771878975], + [11.5699231232, 48.1772335062], + [11.5708551909, 48.1774574687], + [11.5709825958, 48.1774936871], + [11.5711327995, 48.1775366126], + [11.5713366474, 48.1775889281], + [11.5715579296, 48.1776411876], + [11.5717215444, 48.1776787473], + [11.5718905236, 48.1777136242], + [11.5720340217, 48.1777404526], + [11.5721627678, 48.1777659395], + [11.5722888316, 48.1777874021], + [11.572422942, 48.1778075234], + [11.5726187433, 48.1778303274], + [11.57283332, 48.1778410587], + [11.5729111041, 48.177845083], + [11.5730210747, 48.1778504486], + [11.5731176342, 48.1778477658], + [11.5732423569, 48.177845083], + [11.573564222, 48.1778477658], + [11.5737197901, 48.1778477658], + [11.5739062036, 48.1778544729], + [11.5740725006, 48.1778584971], + [11.5742656196, 48.1778638069], + [11.5750300492, 48.177877221], + [11.5751668419, 48.1778745382], + [11.5753492321, 48.1778745382], + [11.575681826, 48.1778638069], + [11.5758910383, 48.1778558143], + [11.5761485304, 48.1778745382] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5783224608, 48.1104974504], + [11.5782044436, 48.1106315999], + [11.5780193712, 48.1108072753], + [11.5778906251, 48.1109132175], + [11.5777270104, 48.1110379638], + [11.5774158741, 48.111232386], + [11.5772589649, 48.111318236], + [11.5770591403, 48.1114147752], + [11.5768391992, 48.1115073406], + [11.5765307452, 48.1116333726], + [11.5763268973, 48.1116870424] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Heavy traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5556403602, 48.1122261442], + [11.5556685234, 48.1122261442], + [11.5558723713, 48.1122288305], + [11.5561097468, 48.1122274873], + [11.5563524867, 48.1122315167], + [11.5569170917, 48.1122462912], + [11.5570847298, 48.1122556371], + [11.5575930084, 48.1122811566], + [11.5578478183, 48.1122985613], + [11.5582193042, 48.1123334266], + [11.558562627, 48.1123696351], + [11.5587691571, 48.1123911251], + [11.5589274074, 48.112411216], + [11.5590722467, 48.1124273335], + [11.5592613424, 48.1124554832], + [11.5594705547, 48.1124809466], + [11.5597387756, 48.1125091522], + [11.5597924198, 48.1125158118], + [11.5600204076, 48.1125453605], + [11.5604468788, 48.1125989735], + [11.5606239046, 48.1126257799], + [11.5609457697, 48.1126727331], + [11.5612555648, 48.1127196863], + [11.561348101, 48.1127317743], + [11.5614714826, 48.1127491789], + [11.5616753305, 48.1127773284], + [11.5617678667, 48.1127907595], + [11.5621004607, 48.1128323401], + [11.5624719466, 48.1128819794], + [11.5627200509, 48.1129047563], + [11.5628259982, 48.1129155012], + [11.5630244817, 48.1129329057], + [11.563401332, 48.1129610551], + [11.563721856, 48.1129744862], + [11.563786229, 48.1129771724], + [11.5638412143, 48.1129785155], + [11.564210018, 48.1129906035], + [11.5644111837, 48.112995976], + [11.5645399298, 48.1129932898], + [11.5646659936, 48.1129906035], + [11.5648041273, 48.1129879173], + [11.5650978292, 48.1129744862], + [11.5651930476, 48.1129677707], + [11.5653204526, 48.1129584248], + [11.56583946, 48.1129195306], + [11.5660848821, 48.1128966977], + [11.5665153767, 48.1128524309], + [11.5667299534, 48.1128242814], + [11.5670276786, 48.1127786715], + [11.567212751, 48.1127478358], + [11.5674031879, 48.1127156569], + [11.5676794554, 48.112660701], + [11.5678175892, 48.1126311524], + [11.5679342653, 48.1126016597], + [11.5680616702, 48.1125627651], + [11.5681810285, 48.1125278999], + [11.5683044101, 48.1124863191], + [11.5683848764, 48.1124595126], + [11.5685095991, 48.1124165885], + [11.5686678494, 48.1123428285], + [11.568867674, 48.1122529508], + [11.5690205599, 48.1121872494], + [11.5691533293, 48.1121363223], + [11.5693571771, 48.1120625619], + [11.5695368851, 48.112004863], + [11.5696468557, 48.1119686543], + [11.5697890128, 48.1119351318], + [11.5700491871, 48.1118721162], + [11.570279857, 48.1118278486], + [11.5704179908, 48.1118064143], + [11.5705561246, 48.1117929828], + [11.5707385148, 48.1117768651], + [11.570920905, 48.1117634897], + [11.5712910498, 48.1117608034], + [11.5714439358, 48.1117594603], + [11.5717134978, 48.111766176], + [11.5719616021, 48.1117876103], + [11.5720259751, 48.1117916397], + [11.5720916892, 48.1117956691], + [11.5722150708, 48.1118064143], + [11.5722955371, 48.111813074], + [11.5725181605, 48.1118359074], + [11.5726938452, 48.1118533123], + [11.572987547, 48.1118734594], + [11.573218217, 48.1118895211], + [11.5734006072, 48.1119069819], + [11.573615184, 48.1119311024], + [11.5737412478, 48.1119445338], + [11.5738069619, 48.1119525926], + [11.5738445128, 48.1119512495], + [11.573884746, 48.1119539357], + [11.5740094687, 48.1119579092], + [11.5741757656, 48.1119539357], + [11.5744533743, 48.111927073], + [11.5747846271, 48.1118694299], + [11.5752727891, 48.111775522], + [11.5754296984, 48.11173797], + [11.5760184432, 48.1116092519], + [11.5760935451, 48.1115878176], + [11.5761203672, 48.1115811018], + [11.5761847402, 48.1115609546], + [11.5762665476, 48.1115381771], + [11.576349696, 48.1115073406], + [11.5764677132, 48.1114671021], + [11.5767560507, 48.1113625041], + [11.5769558753, 48.1112753111], + [11.5772187318, 48.1111465919], + [11.5774829294, 48.1109856364], + [11.5776076521, 48.1108944132], + [11.5777283515, 48.1107992163], + [11.5777699257, 48.1107656931], + [11.577838322, 48.1107107351], + [11.5779201294, 48.1106329431], + [11.5780676509, 48.1104881042], + [11.5781427528, 48.1103982232], + [11.5782674755, 48.1102506973], + [11.5783050264, 48.1102024546], + [11.5783573295, 48.110132665], + [11.578594705, 48.1098108033], + [11.5787502731, 48.1095828517], + [11.5788267161, 48.1094675043], + [11.5789474155, 48.1092502408], + [11.5790399517, 48.1090745601] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.582111081, 48.105019073], + [11.5820480491, 48.105111594], + [11.5819917227, 48.1051947676], + [11.5819461252, 48.1052618213], + [11.5818442012, 48.1053905553], + [11.5817570294, 48.1055018819], + [11.581675222, 48.1055997752], + [11.5815102662, 48.1057807851], + [11.581263503, 48.1060235298], + [11.5811213459, 48.1061697246], + [11.5809832121, 48.1063051727], + [11.5808035041, 48.1064916091], + [11.580763271, 48.1065331948], + [11.580661347, 48.1066364593], + [11.5804668869, 48.1068228385], + [11.5804132427, 48.1068697971], + [11.5803703274, 48.1069086959], + [11.580327412, 48.1069355053], + [11.5802670623, 48.1070293661], + [11.5802254881, 48.1070923877], + [11.5801517273, 48.1072131134], + [11.5801074709, 48.1073042872], + [11.5800417568, 48.1074048636], + [11.5799921359, 48.107496093], + [11.5798057224, 48.1078461214], + [11.5796970929, 48.1080740808], + [11.5795817579, 48.1082819466], + [11.5794221665, 48.1085635771], + [11.5793403591, 48.1087245401], + [11.5792411174, 48.1089404625], + [11.5790976192, 48.109238152], + [11.5790319051, 48.1093588727], + [11.5789527799, 48.1094836227], + [11.5788696314, 48.1096096597], + [11.5788012351, 48.1097021724], + [11.5787422265, 48.1097799658], + [11.5786470081, 48.1099167476], + [11.578608116, 48.1099650465], + [11.5785316731, 48.1100602449], + [11.5784525479, 48.1101554992], + [11.5784190203, 48.1101970819], + [11.5782259013, 48.1104384626], + [11.5781038607, 48.1105792721], + [11.5780408288, 48.1106490052], + [11.5778597797, 48.1108153343], + [11.5777323748, 48.110917247], + [11.577645203, 48.110981607], + [11.5774829294, 48.1110862057], + [11.5774024631, 48.1111345034], + [11.5772938336, 48.1111948336], + [11.5770537759, 48.1113303244], + [11.5768231059, 48.1114268635], + [11.5766621734, 48.1114818208], + [11.5765615906, 48.1115140563], + [11.5764422323, 48.1115542389], + [11.5762947108, 48.1115998499], + [11.5762665476, 48.1116052225], + [11.5762450899, 48.1116119382], + [11.5761445071, 48.1116387452], + [11.5760358776, 48.111664209], + [11.5756670739, 48.111756774], + [11.5754578615, 48.111803728], + [11.5752754713, 48.1118385937], + [11.5750220026, 48.1118922073], + [11.5745472516, 48.11197537], + [11.5742253865, 48.1120196375], + [11.5739759411, 48.1120263532], + [11.5738136674, 48.1120196375], + [11.5737452711, 48.1120169512], + [11.5736406649, 48.1120129218], + [11.5732061471, 48.1119861151], + [11.5729687716, 48.1119605955], + [11.5728883053, 48.1119525926], + [11.572768947, 48.1119405044], + [11.5725597347, 48.1119230436], + [11.5723558868, 48.1119056387], + [11.5722512807, 48.1118935505], + [11.5721225346, 48.1118801751], + [11.5720273162, 48.1118721162], + [11.5719508733, 48.1118654005], + [11.5717376376, 48.1118546554], + [11.5715391542, 48.1118465966], + [11.5710764731, 48.1118399368], + [11.5709437038, 48.1118453094], + [11.5708069111, 48.1118546554], + [11.5706432964, 48.1118680868], + [11.570561489, 48.1118774888], + [11.5705024804, 48.1118828613], + [11.5701953675, 48.1119311024], + [11.5698332692, 48.1120102356], + [11.5696522201, 48.1120585325], + [11.5694510545, 48.1121242341], + [11.5693477894, 48.1121604427], + [11.5691332127, 48.1122422618], + [11.5689763035, 48.1123106494], + [11.568828782, 48.1123750076], + [11.5687107648, 48.1124259904], + [11.5685484911, 48.1124943778], + [11.5683365966, 48.1125735101], + [11.5681220199, 48.1126351817], + [11.5679382886, 48.1126794487], + [11.5678470935, 48.1127008826], + [11.5677237119, 48.1127290881], + [11.5674769486, 48.1127800146], + [11.5671698357, 48.1128323401], + [11.5666789914, 48.1128966977], + [11.5664000417, 48.1129409644], + [11.5660889055, 48.1129758293], + [11.565800568, 48.1130066649], + [11.5652118231, 48.1130455591], + [11.5648778881, 48.1130670489], + [11.5648175384, 48.1130724213], + [11.5647317077, 48.1130763946], + [11.5645318831, 48.1130831102], + [11.5644286181, 48.1130844533], + [11.5642381812, 48.1130898257], + [11.5639431382, 48.1131005706], + [11.5637795235, 48.1130951982], + [11.5634978915, 48.1130817671], + [11.5630794669, 48.1130589902], + [11.5628313626, 48.113032184], + [11.5626369025, 48.1130120373], + [11.5624330546, 48.1129892604], + [11.5621326472, 48.1129517093], + [11.561745068, 48.1128926683], + [11.5616847183, 48.1128846656], + [11.561629733, 48.11287795], + [11.5614540483, 48.1128564602], + [11.561232766, 48.1128283108], + [11.5609457697, 48.1127947889], + [11.5605957414, 48.1127532082], + [11.5604321266, 48.1127331174], + [11.5599546934, 48.1126646744], + [11.5597655977, 48.112637868], + [11.5596462394, 48.1126218065], + [11.5594343449, 48.1125909147], + [11.5592412258, 48.1125667945], + [11.5590333546, 48.1125346156], + [11.5587624515, 48.1124997503], + [11.5587007607, 48.1124903485], + [11.5583856012, 48.1124501107], + [11.5581106747, 48.112421961], + [11.5578719581, 48.1123964976], + [11.5575138832, 48.1123723214], + [11.5571920182, 48.1123495442], + [11.5566555763, 48.1123361129], + [11.5563055481, 48.1123307404], + [11.5558898057, 48.1123387991], + [11.5557114388, 48.1123428285], + [11.5555786694, 48.1123441717], + [11.5554338301, 48.112348201], + [11.5553064252, 48.112348201], + [11.5551964546, 48.1123549167], + [11.5549349393, 48.1123495442], + [11.5543260778, 48.1123616323], + [11.5541986729, 48.1123602892], + [11.5540404226, 48.1123589461], + [11.55387949, 48.1123562598], + [11.5537306274, 48.1123508873], + [11.5536166335, 48.1123455148], + [11.5535401906, 48.1123441717], + [11.5533805991, 48.1123414854], + [11.5532464887, 48.1123414854], + [11.5524874235, 48.1123428285], + [11.55207034, 48.1123455148], + [11.5517685915, 48.1123508873], + [11.5512857939, 48.1123508873], + [11.5509344245, 48.1123387991], + [11.5507976319, 48.1123414854], + [11.5507359411, 48.1123441717], + [11.550542822, 48.1123307404], + [11.5503081287, 48.1123160219], + [11.5498226489, 48.112275784], + [11.5493291224, 48.1122328599], + [11.5491963531, 48.1122234579], + [11.5487873162, 48.1121926219], + [11.5487001444, 48.1121899356], + [11.5486196781, 48.11218322], + [11.5481838192, 48.1121456683], + [11.5476500596, 48.1121001137], + [11.5474421884, 48.1120853392], + [11.5470894779, 48.1120504737], + [11.5469178165, 48.112034356], + [11.5464336778, 48.1119740268], + [11.5463170017, 48.1119632817], + [11.5458409096, 48.1119351318], + [11.5456209685, 48.1119163838], + [11.5455726887, 48.1119123544], + [11.5455150212, 48.1119096681], + [11.5448686088, 48.1118748025], + [11.5447090174, 48.1118627142], + [11.5445252861, 48.1118453094], + [11.5443992223, 48.1118385937], + [11.5442825462, 48.1118278486], + [11.5440277363, 48.1117996986], + [11.5438802148, 48.1117728357], + [11.5436884369, 48.1117326534], + [11.5436294283, 48.1117192219], + [11.543382665, 48.1116588924], + [11.5430554355, 48.1115931342], + [11.5429132785, 48.1115569252], + [11.5426034833, 48.1114442685], + [11.5424412097, 48.1113839386], + [11.5422091986, 48.1112980887], + [11.5420415605, 48.1112391018], + [11.5419007446, 48.1111841443], + [11.5416794623, 48.1111076962], + [11.5415158476, 48.1110593984], + [11.5412623788, 48.1109789206], + [11.5410129334, 48.110917247], + [11.5407487358, 48.1108582037], + [11.5405703689, 48.1108246805], + [11.5404523517, 48.1108059321], + [11.5402713026, 48.1107750952], + [11.5399910117, 48.1107429152], + [11.5397938694, 48.1107200813], + [11.539557835, 48.1107040192], + [11.5393848325, 48.110702676], + [11.5390804018, 48.1106986465], + [11.5386794115, 48.1106838717], + [11.5386432017, 48.1106825285], + [11.5385654176, 48.1106811853], + [11.5384769047, 48.1106825285], + [11.5383280421, 48.1106811853], + [11.537235042, 48.1106745254], + [11.5371049548, 48.1106704959], + [11.5369923021, 48.1106704959], + [11.5368622149, 48.1106651232], + [11.5367173756, 48.1106610937], + [11.5363955106, 48.1106584074], + [11.5362037326, 48.110655721], + [11.5360776688, 48.1106597505], + [11.53583627, 48.1106570642], + [11.5355586613, 48.1106543779], + [11.5350892748, 48.1106409461], + [11.5348545815, 48.1106356294], + [11.5345568563, 48.1106235409], + [11.5343798305, 48.1106181682], + [11.5341116096, 48.1106074228], + [11.5339547003, 48.1105913607], + [11.5325988437, 48.1104451785], + [11.5315501, 48.110329833], + [11.531010976, 48.1102762177], + [11.5303860213, 48.110205085], + [11.529715469, 48.1101380378], + [11.5293600763, 48.1100991414], + [11.5289805437, 48.1100656177], + [11.5287310983, 48.1100495554], + [11.5281088258, 48.1100093157], + [11.5278325583, 48.1099958838], + [11.5272330846, 48.1099744488], + [11.5267730857, 48.109975792], + [11.5262259151, 48.1099985702], + [11.5258678402, 48.1099999134], + [11.5255459751, 48.1100052862], + [11.5252898241, 48.1100093157], + [11.5249585713, 48.1100160317], + [11.5245924498, 48.1100214044], + [11.5242383982, 48.110025378], + [11.5240238215, 48.1100294076], + [11.5237059797, 48.1100401531], + [11.5234887208, 48.1100482122], + [11.5232553686, 48.1100602449], + [11.5228329207, 48.1100830791], + [11.5219531561, 48.1100991414], + [11.5216326321, 48.1100977982], + [11.521194091, 48.1100924814], + [11.5206670369, 48.1100938246], + [11.5204551424, 48.1100977982], + [11.5200984086, 48.1100991414], + [11.5199830736, 48.1100991414], + [11.5198905374, 48.1101031709], + [11.5198140944, 48.1101058573], + [11.5197416748, 48.1101098869], + [11.5194774772, 48.1101487833], + [11.5193943287, 48.1101729046], + [11.5193675066, 48.1101823069], + [11.5192964281, 48.1102077714], + [11.5192146207, 48.1102506973], + [11.5190831925, 48.1103177444], + [11.5189812685, 48.1103727588], + [11.5188176538, 48.1104827315], + [11.5187170709, 48.1105430624], + [11.5185695494, 48.1106543779], + [11.5184877421, 48.1107267971], + [11.5183630193, 48.11086089], + [11.5182637776, 48.1109453975], + [11.518179288, 48.1110285617], + [11.5181028451, 48.1111251013], + [11.5180666352, 48.1111707127], + [11.5179794635, 48.1112739679], + [11.5178775395, 48.1113933407], + [11.5176602806, 48.1116789836], + [11.5175020302, 48.1119056387], + [11.5173746253, 48.1121644721], + [11.5173035468, 48.112337456], + [11.5172525848, 48.1124689144], + [11.5172123517, 48.1126030028], + [11.5171855296, 48.1126982524], + [11.5171452964, 48.1128148796], + [11.5171251799, 48.1129543955], + [11.5170970167, 48.1131837313], + [11.5170836056, 48.1134076936], + [11.5170715357, 48.1135847026], + [11.5170567835, 48.1138140355], + [11.5170178915, 48.1140058171], + [11.5170205737, 48.1141184681], + [11.517011186, 48.1142887593], + [11.5170085038, 48.1143813195], + [11.5170071627, 48.1144658212], + [11.516997775, 48.1147702499], + [11.5169950927, 48.1148815562], + [11.516985705, 48.1154836917], + [11.5169749762, 48.1157948295], + [11.5169709529, 48.115884701], + [11.5169696118, 48.1159276221], + [11.5169696118, 48.1160764748], + [11.516972294, 48.1164063554], + [11.5169763173, 48.1164841387], + [11.5169870461, 48.1166665651], + [11.517011186, 48.1169093144], + [11.5170594658, 48.1172780806], + [11.5171452964, 48.1178158927] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5825482811, 48.1041191536], + [11.5825335289, 48.1041433337], + [11.5823819841, 48.1044142402], + [11.5823363866, 48.1044826383], + [11.5822586025, 48.1045939109], + [11.582187524, 48.1046971793], + [11.582123151, 48.1047964175], + [11.5820480491, 48.104914462], + [11.5820118393, 48.1049707695], + [11.5819675828, 48.1050391668], + [11.5819032098, 48.1051357177], + [11.5817530061, 48.1053382222], + [11.5815236772, 48.1056238987], + [11.5814619864, 48.1056882653], + [11.5812648441, 48.1058947974], + [11.5810690428, 48.1060999854], + [11.5808169152, 48.1063494451], + [11.5806050206, 48.106577411], + [11.5804266537, 48.1068014022], + [11.5803891028, 48.1068523345], + [11.580327412, 48.1069355053] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5835044886, 48.1265330792], + [11.5836372579, 48.1266108471], + [11.5841468777, 48.1271539884] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5837820972, 48.1688234457], + [11.5846497918, 48.1686718949] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5846538152, 48.1321160685], + [11.5848429109, 48.1322796989], + [11.5849287416, 48.1323775972], + [11.5851111318, 48.1325371989] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5851111318, 48.1325371989], + [11.5849287416, 48.1323775972], + [11.5848429109, 48.1322796989], + [11.5846538152, 48.1321160685] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5851687993, 48.1426397128], + [11.5851352717, 48.1425780212], + [11.5850910152, 48.1424855118], + [11.5847919489, 48.1416794867], + [11.5847825612, 48.1416231634] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5903065707, 48.1387223495], + [11.5901255215, 48.1388175506], + [11.5899592246, 48.138902068], + [11.5891384686, 48.1393151442] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5905278529, 48.1609015625], + [11.5899712945, 48.1609981202], + [11.5897111203, 48.1610423455], + [11.5896360184, 48.1610571059], + [11.5894844736, 48.1610987034] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.591080388, 48.1401304913], + [11.5910777058, 48.1401211505], + [11.5910455192, 48.1400071581], + [11.590990534, 48.1398019377], + [11.5909301843, 48.1396289344], + [11.5907665695, 48.1393070896], + [11.5906633045, 48.1391233452], + [11.5905922259, 48.1390294871], + [11.5905278529, 48.1389516821], + [11.5904044713, 48.1388282901], + [11.5903065707, 48.1387223495], + [11.590246221, 48.1386633381], + [11.5899659301, 48.1383897595], + [11.5899082626, 48.1383334327], + [11.5897419657, 48.138171164], + [11.5895220245, 48.1379633073], + [11.5894241239, 48.1378707336], + [11.5893637742, 48.1377983525], + [11.5893396343, 48.1377500798], + [11.589296719, 48.1376548208] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5927970017, 48.1058452074], + [11.5928962435, 48.1058760472], + [11.5929552521, 48.1059001706], + [11.5930223073, 48.1059202641], + [11.5933428313, 48.1060221865], + [11.5936915184, 48.1061267953], + [11.5940241124, 48.1062086239], + [11.594327202, 48.1062756763], + [11.5945887174, 48.1063292958], + [11.594891807, 48.106387001], + [11.5951010193, 48.1064272435], + [11.595290115, 48.1064607696], + [11.5954430009, 48.1064889225], + [11.5955449249, 48.1065076725], + [11.595610639, 48.106519762], + [11.5957849826, 48.1065465716], + [11.5958828832, 48.1065318515], + [11.5959418918, 48.1065385119], + [11.5960424746, 48.1065653775], + [11.5961443986, 48.1065908438], + [11.5962503458, 48.10662034] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5946329738, 48.1643884287], + [11.5948757137, 48.1642261306], + [11.5951251592, 48.1640504701], + [11.5953397359, 48.1639082977], + [11.5954255666, 48.1638519988], + [11.5956455077, 48.1636695723], + [11.5956843997, 48.1636360836], + [11.5958118047, 48.1635461838], + [11.5959928538, 48.1633825972], + [11.5961055065, 48.1632914111], + [11.5962020661, 48.1632082197], + [11.5962798501, 48.1631385021], + [11.5963723863, 48.1630607336], + [11.5964595581, 48.162982965], + [11.5965641643, 48.162894406], + [11.5966660882, 48.1628193207], + [11.5967103447, 48.1627804083], + [11.5967639889, 48.1627415517], + [11.5968189741, 48.1627026392], + [11.5968726183, 48.1626664103], + [11.5969048048, 48.1626463391], + [11.5969919766, 48.1625886411], + [11.5970187987, 48.162575223], + [11.5972950662, 48.1624518878] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.5481167639, 48.1761847764], + [11.548348775, 48.1761847764], + [11.5483715738, 48.1761847764], + [11.5486371125, 48.1761794106], + [11.5488932635, 48.1761740447], + [11.549130639, 48.1761686789], + [11.5491386856, 48.1761686789], + [11.5494457985, 48.1761606302], + [11.5507681276, 48.1761109962], + [11.5510135497, 48.1761083133], + [11.5514078344, 48.1761056303], + [11.5523694063, 48.176101606], + [11.5536179746, 48.1760922157], + [11.5539022888, 48.1760895328], + [11.5541772152, 48.1760895328], + [11.5552299823, 48.176081484], + [11.5553587283, 48.1760828255], + [11.5555303897, 48.1760828255], + [11.5558401848, 48.1760975816], + [11.5560708548, 48.1760975816], + [11.5568084623, 48.1760922157], + [11.5570525433, 48.1760895328], + [11.5571960415, 48.1760881914], + [11.557690909, 48.176084167], + [11.5579296256, 48.1760801426], + [11.5580583717, 48.1760761182], + [11.5581750478, 48.1760747767], + [11.5583346392, 48.1760761182], + [11.5585518981, 48.1760761182], + [11.5588616933, 48.1760640451], + [11.5590065326, 48.1760600766], + [11.5597159768, 48.1760493449], + [11.560039183, 48.1760412961], + [11.5605729426, 48.1760332473], + [11.5609672273, 48.1760225156], + [11.5611469353, 48.1760184913], + [11.5612233783, 48.1760171498], + [11.561399063, 48.1760131254], + [11.5615693833, 48.1760131254], + [11.561809441, 48.1760050766], + [11.5621715392, 48.1759956864], + [11.562272122, 48.1759943449], + [11.5629735197, 48.1759876376], + [11.5632296706, 48.1759809303], + [11.5634858216, 48.1759782474], + [11.5638103689, 48.1759701986], + [11.5638868119, 48.1759688571], + [11.5639806892, 48.1759621498], + [11.5640490855, 48.1759608084], + [11.5644929911, 48.175956784], + [11.564632466, 48.1759634913], + [11.5647853519, 48.1759661742], + [11.564966401, 48.1759755645], + [11.565081736, 48.1759849547], + [11.5650978292, 48.1759862962], + [11.5652212108, 48.1759983693], + [11.5652533973, 48.1760010523], + [11.5653486158, 48.176011784], + [11.5655122305, 48.1760372717], + [11.5656517054, 48.1760627036], + [11.5658542122, 48.1761069718], + [11.5659507717, 48.1761311181], + [11.5662069227, 48.1761968495], + [11.5664027239, 48.1762478249], + [11.5664791669, 48.1762679467], + [11.5666414405, 48.1763108174], + [11.5669257547, 48.1763953289], + [11.567148378, 48.1764583772], + [11.5675171818, 48.1765508813], + [11.567584237, 48.176571003], + [11.5676727499, 48.1765964905], + [11.5677558984, 48.1766246609], + [11.5686463918, 48.1769089908], + [11.5690809096, 48.1770457615], + [11.5698533858, 48.1772697248], + [11.5708377565, 48.1774842971], + [11.5712253357, 48.1775916109], + [11.5715539063, 48.1776706988], + [11.571690699, 48.1777042343], + [11.5718543137, 48.177741794], + [11.5719844009, 48.1777713051], + [11.5721466745, 48.1777994749], + [11.5723102893, 48.1778249618], + [11.5725490059, 48.1778571557], + [11.572704574, 48.1778745382], + [11.5728547777, 48.177893318], + [11.572935244, 48.177900025], + [11.5730452145, 48.1779053907], + [11.5732812489, 48.1779147806], + [11.5735548343, 48.1779295361], + [11.5741020049, 48.1779416088], + [11.5747403706, 48.1779349018], + [11.5750166382, 48.1779322189], + [11.5751534308, 48.1779268533], + [11.5752553548, 48.1779228291], + [11.5753653253, 48.1779201462], + [11.5757435168, 48.177900025], + [11.5761485304, 48.1778745382], + [11.5771731342, 48.1777887435], + [11.5775701011, 48.1777511839], + [11.5781521405, 48.1776961858], + [11.579005083, 48.1776331391], + [11.5791163946, 48.1776250906], + [11.5792920793, 48.1776144151], + [11.5799975003, 48.177547344], + [11.5806009973, 48.1775057599], + [11.5814029778, 48.1774735658], + [11.5816256012, 48.1774682001], + [11.5817677583, 48.1774668586], + [11.5820681657, 48.1774695415], + [11.5833314861, 48.1774722243], + [11.5839269365, 48.1774896628], + [11.5841468777, 48.17749637], + [11.584305128, 48.1774990528], + [11.5845210458, 48.1775044185], + [11.5848590041, 48.177512467], + [11.5850588287, 48.177512467], + [11.5855201687, 48.1775231984], + [11.5857950951, 48.1775258813], + [11.5860606338, 48.1775299055], + [11.5862752105, 48.1775285641], + [11.5864549185, 48.1775231984], + [11.5869913603, 48.1774789314], + [11.5874339248, 48.177423933], + [11.5878255273, 48.1773622833], + [11.5882224943, 48.1772764319], + [11.5884799863, 48.1772147262], + [11.5885980035, 48.1771838732], + [11.5888273324, 48.1771074675], + [11.5891465153, 48.1769988112], + [11.5893852319, 48.176915698], + [11.5895971264, 48.1768365531], + [11.5897795166, 48.1767654566], + [11.5899042393, 48.1767198476], + [11.5902408565, 48.1766031977], + [11.5903454627, 48.1765602714], + [11.5913472678, 48.1761606302], + [11.5915001537, 48.1760922157], + [11.5916007365, 48.1760493449], + [11.5917013193, 48.1760064181], + [11.5917281414, 48.1759956864], + [11.5918515231, 48.1759433693], + [11.5922350789, 48.1757811078], + [11.592363825, 48.1757247661], + [11.5925234164, 48.175659034], + [11.5926172937, 48.1756201873], + [11.5927929784, 48.1755477477], + [11.5929391588, 48.1754820154], + [11.5931309368, 48.1754002412], + [11.5931805576, 48.175380119], + [11.5936271454, 48.1751816356], + [11.5940911676, 48.174984493], + [11.5941837038, 48.1749442483], + [11.5943714584, 48.1748597344], + [11.5945913996, 48.1747564952], + [11.5947885419, 48.1746652735], + [11.5949333812, 48.1745928885], + [11.5950889493, 48.1745150814], + [11.5953880156, 48.1743635475], + [11.5960920955, 48.174002793], + [11.5966647471, 48.1737104537], + [11.5968726183, 48.1736044734], + [11.596919557, 48.1735776428], + [11.5971153582, 48.173469035], + [11.5972494687, 48.1734046416], + [11.597343346, 48.1733564024], + [11.5974063779, 48.1733268887], + [11.5977201964, 48.1731673019], + [11.5978167559, 48.1731190066], + [11.5980930234, 48.1729956409], + [11.5982780959, 48.1728963667], + [11.5984779204, 48.1727917821], + [11.5986576284, 48.1727018984], + [11.5988279487, 48.1726174366], + [11.5989821757, 48.1725396266], + [11.599101534, 48.1724766295], + [11.5992047991, 48.1724229673], + [11.5993120874, 48.1723599141], + [11.5993885304, 48.1723103323], + [11.5994515623, 48.1722674024], + [11.5995521451, 48.1721949581], + [11.5996567513, 48.1721064708], + [11.5997452642, 48.1720126171], + [11.5998418237, 48.1718757771], + [11.5998820568, 48.1718087544], + [11.5999316777, 48.1717041676], + [11.5999692286, 48.1716022078], + [11.599986663, 48.1715137195], + [11.5999933685, 48.171464081], + [11.5999947096, 48.1714426157], + [11.5999987329, 48.1713635182], + [11.5999973918, 48.1712857063], + [11.5999826397, 48.1711999006], + [11.5999678875, 48.1711314796], + [11.5999491121, 48.1710711639], + [11.5999088789, 48.1709705444], + [11.5998297538, 48.1708270495], + [11.5997895206, 48.1707640503], + [11.5996554102, 48.1705655491], + [11.5996031071, 48.1704890775], + [11.5995038654, 48.1703428981], + [11.5994368101, 48.1702436747], + [11.5993563439, 48.1701256685], + [11.5992731954, 48.1700103453], + [11.5991846825, 48.1698762391], + [11.5990854408, 48.1697340828], + [11.5990532543, 48.1696844426], + [11.5990130211, 48.1696173611], + [11.5988722051, 48.1694242779], + [11.5987139548, 48.1691895472], + [11.5986294652, 48.1690608054], + [11.5985382701, 48.1689307217], + [11.5985329057, 48.1689226718], + [11.5983022357, 48.1685874265], + [11.598292848, 48.1685740099], + [11.5981815363, 48.1684036751], + [11.5980836357, 48.1682655397], + [11.5980259682, 48.1681810706], + [11.59789454, 48.1679839011], + [11.5977738406, 48.1678095952], + [11.5976678933, 48.1676607248], + [11.5974627043, 48.1673629826], + [11.5970509852, 48.1667648655], + [11.5969316269, 48.1665945247], + [11.5968994404, 48.1665449373], + [11.5968645717, 48.1664993192], + [11.5968243386, 48.1664429673], + [11.5968028809, 48.1664094804], + [11.5967559422, 48.1663397112], + [11.5966862048, 48.1662431635], + [11.596560141, 48.1660741627], + [11.5964099373, 48.1658582568], + [11.5962959434, 48.1656906523], + [11.5962355937, 48.1655953892], + [11.5961511041, 48.1654398596], + [11.59607332, 48.165286957], + [11.5960250403, 48.1651823569], + [11.5959861482, 48.1650764148], + [11.5959526206, 48.1649812064], + [11.5959325041, 48.1649060683], + [11.5959123875, 48.164814885], + [11.5959016587, 48.1647143091], + [11.5958962942, 48.1646083661], + [11.5958976354, 48.1645051063], + [11.5959137286, 48.1643079226], + [11.5959365274, 48.1641859334], + [11.5959713961, 48.1640638879], + [11.5960022415, 48.1639405004], + [11.5960263814, 48.163864019], + [11.5960679556, 48.1637500234], + [11.5961457397, 48.1635757031], + [11.5962060894, 48.1634684159], + [11.5962718035, 48.1633651539], + [11.5963361765, 48.1632699424], + [11.5963992084, 48.1631948577], + [11.5964622403, 48.1631170334], + [11.5965145434, 48.1630661009], + [11.5965520944, 48.1630285304], + [11.5965829398, 48.1629923017], + [11.5966446306, 48.1629360019], + [11.5967559422, 48.1628340806], + [11.5968095864, 48.1627898009], + [11.5969007815, 48.1627147155], + [11.5969678367, 48.1626677521], + [11.5970255042, 48.1626262119], + [11.5971220638, 48.162560463], + [11.5972950662, 48.1624518878], + [11.5973513926, 48.1624170005], + [11.5974707509, 48.1623445982], + [11.597574016, 48.1622882418], + [11.5975914503, 48.162278849], + [11.5977698172, 48.1621822937], + [11.5978583301, 48.1621353857], + [11.5980071927, 48.1620521925], + [11.5981694664, 48.1619623459], + [11.5983156468, 48.1618805501], + [11.5984229351, 48.1618215654], + [11.5989513303, 48.1615318403], + [11.5991806592, 48.1614071608], + [11.5992343034, 48.1613776402], + [11.5993040408, 48.1613400685], + [11.5993295218, 48.16132665], + [11.5995199586, 48.1612167303], + [11.5996299292, 48.1611523215], + [11.5997734274, 48.1610664989], + [11.5998927857, 48.1609940947], + [11.600012144, 48.1609190066], + [11.6001221146, 48.1608438626], + [11.6002240385, 48.1607768255], + [11.6002602483, 48.160752672], + [11.6003635134, 48.1606842929], + [11.6004305686, 48.1606413533], + [11.6007524337, 48.1603825405] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6015852596, 48.1458194945], + [11.6013881172, 48.1455861099], + [11.6010327245, 48.1451757688], + [11.6009147073, 48.1450215195], + [11.6008154656, 48.1448860616], + [11.6006746496, 48.1446755475], + [11.6004573907, 48.1443429401], + [11.6002119686, 48.1439392446], + [11.6001046802, 48.1437367245], + [11.6000711526, 48.1436415325], + [11.5999209489, 48.1432445431], + [11.599896809, 48.1431574041], + [11.599781474, 48.1427644379], + [11.5997345353, 48.1425739942], + [11.5996701623, 48.1423634706], + [11.5996393169, 48.1422655355], + [11.5995870139, 48.1420979099], + [11.5995561684, 48.1420053995], + [11.599511912, 48.1418940961], + [11.5994824077, 48.1418444289], + [11.599383166, 48.141680829], + [11.5993254985, 48.141603028], + [11.5992571021, 48.1415145439], + [11.5991323794, 48.141391158], + [11.5990197266, 48.1412973041], + [11.5989191438, 48.1412275567], + [11.5988413597, 48.1411792872], + [11.5987059082, 48.1410626125] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 3, + "events": [ + { + "description": "Emergency vehicle" + }, + { + "description": "Traffic lights not working" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6033286954, 48.1461842502], + [11.6033944095, 48.1460635601], + [11.6034601237, 48.1460005304], + [11.6035379077, 48.145938843], + [11.6035915519, 48.1458999736] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 3, + "events": [ + { + "description": "Emergency vehicle" + }, + { + "description": "Traffic lights not working" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6035915519, 48.1458999736], + [11.6035379077, 48.145938843], + [11.6034601237, 48.1460005304], + [11.6033944095, 48.1460635601], + [11.6033286954, 48.1461842502] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6041092183, 48.107953413], + [11.6041454281, 48.1073123468], + [11.6041923667, 48.1070803542], + [11.6042393054, 48.1068483047], + [11.6043398882, 48.1065170754], + [11.6044297422, 48.1062207135], + [11.6045987214, 48.105740598], + [11.6046040858, 48.1057231351], + [11.6047261263, 48.1054267686], + [11.6047623361, 48.1053597151], + [11.6048401202, 48.1052148614], + [11.6051727141, 48.1045979409] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.606826296, 48.071046181], + [11.606955042, 48.0710797301], + [11.60713475, 48.0711065582], + [11.6071696187, 48.0711105908], + [11.6076430286, 48.0711038698] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6076430286, 48.0711038698], + [11.6071696187, 48.0711105908], + [11.60713475, 48.0711065582], + [11.606955042, 48.0710797301], + [11.606826296, 48.071046181] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6122456993, 48.1539090015], + [11.6121048833, 48.1539801296], + [11.6118031348, 48.1541424042], + [11.6114611532, 48.1542979681], + [11.6113592292, 48.1543475673], + [11.6112304832, 48.1544146128], + [11.6110762562, 48.1544870263], + [11.6107892598, 48.1546184887], + [11.6105706598, 48.1547110322], + [11.6103547419, 48.1547968096], + [11.6102568413, 48.154834386], + [11.6098250057, 48.1550154461], + [11.6096466388, 48.1550892007], + [11.6093127037, 48.1552286577], + [11.60917457, 48.1552836799], + [11.6088969613, 48.1553962964], + [11.6087829675, 48.1554432664], + [11.6085938717, 48.1555210464], + [11.608135214, 48.1557047881], + [11.6080614532, 48.155734256], + [11.6075679268, 48.1559367847], + [11.6072152163, 48.1560802653], + [11.6070770825, 48.1561365727], + [11.6063528861, 48.1564316401], + [11.6062335278, 48.1564798953], + [11.6061235572, 48.1565282063], + [11.6057949866, 48.1566596076], + [11.6054395939, 48.1567937483], + [11.6051297988, 48.1569238069], + [11.6050573791, 48.156954672], + [11.6050158049, 48.1569721175], + [11.6049514319, 48.1570029267], + [11.6048320736, 48.1570472113], + [11.6047529484, 48.1570807603], + [11.6046456601, 48.157122305], + [11.6045946981, 48.1571397505], + [11.6042849029, 48.1572698082], + [11.6039456035, 48.1574240766], + [11.6037256624, 48.1575313765], + [11.6035808231, 48.1576131792], + [11.6035392488, 48.1576386202], + [11.6033273543, 48.1577714164], + [11.6032710279, 48.1578102768], + [11.6032133604, 48.1578532188], + [11.6031503285, 48.1578987887], + [11.6030242647, 48.1579993779], + [11.6028365101, 48.1581482764], + [11.602823099, 48.1581616957], + [11.6026380266, 48.1583360344], + [11.6025749947, 48.1584030746], + [11.6025374438, 48.1584459603], + [11.6022933627, 48.1587356468], + [11.6020921971, 48.1589944679], + [11.6018226351, 48.1593592977], + [11.6013787295, 48.1599332913], + [11.6013438608, 48.1599640987], + [11.6013022865, 48.1600070389], + [11.6012486423, 48.1600579744], + [11.6009321417, 48.1603530194], + [11.6008476521, 48.1604294501], + [11.600512376, 48.1606910022], + [11.6003179158, 48.1608277603], + [11.6002468373, 48.1608774091], + [11.6001864876, 48.1609163229], + [11.5999450888, 48.1610705245], + [11.599640658, 48.1612475369], + [11.5994877721, 48.1613373848], + [11.5992799009, 48.1614513857], + [11.5991431083, 48.1615278148], + [11.5990559365, 48.1615761211], + [11.5988802518, 48.1616726775], + [11.5987743045, 48.1617289788], + [11.5985449756, 48.1618550553], + [11.5982941891, 48.1619972334], + [11.5981453265, 48.1620830545], + [11.5980836357, 48.1621166002], + [11.5978489424, 48.1622479871], + [11.5976652111, 48.1623499096], + [11.5976155902, 48.162376746], + [11.5974264945, 48.1624840355], + [11.5972561742, 48.1625913247], + [11.5970952417, 48.1626999556], + [11.5970509852, 48.1627321591], + [11.5970120932, 48.1627630207], + [11.5969262625, 48.162831397], + [11.5968471373, 48.1628984314], + [11.5967224146, 48.163017796], + [11.596663406, 48.1630781771], + [11.596649995, 48.1630902533], + [11.5965923275, 48.1631559455], + [11.59653466, 48.1632243213], + [11.596458217, 48.1633208747], + [11.5963978673, 48.1634054077], + [11.5963495876, 48.1634818338], + [11.5963026489, 48.1635663106], + [11.596239617, 48.1636950662], + [11.5961980428, 48.1637795426], + [11.5961671974, 48.1638546824], + [11.5961162354, 48.1639847231], + [11.5960813667, 48.1641242118], + [11.5960558857, 48.1642596748], + [11.5960411335, 48.1643629351], + [11.5960317458, 48.1644621699], + [11.5960277225, 48.1645734803], + [11.5960357691, 48.1647183344], + [11.5960572268, 48.1648497706], + [11.5960840489, 48.1649530297], + [11.5961376931, 48.1651005662], + [11.5961926783, 48.1652252927], + [11.5962516869, 48.1653606969], + [11.59631606, 48.165484081], + [11.5963844563, 48.1656020979], + [11.5966419484, 48.1660031073], + [11.5967318024, 48.166130515], + [11.5968565251, 48.1663115352], + [11.5969021226, 48.1663692289], + [11.5969477202, 48.1664295502], + [11.5969919766, 48.1664845604], + [11.597034892, 48.1665476208], + [11.597048303, 48.1665676905] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6030752267, 48.183759317], + [11.6030993666, 48.1837660233], + [11.6033421065, 48.1838223562], + [11.603567412, 48.1838719827], + [11.6040113176, 48.1839631881], + [11.604079714, 48.1839766006], + [11.6043720747, 48.1840342745], + [11.6047408785, 48.1840973133], + [11.6049876417, 48.1841509074], + [11.6052156295, 48.1842005337], + [11.6056541706, 48.1843038096], + [11.6061101462, 48.1844231803], + [11.6064856554, 48.1845345033], + [11.6065674628, 48.1845599869], + [11.6066841389, 48.1845948591], + [11.6068987156, 48.1846605797], + [11.607339939, 48.1848174481], + [11.60781469, 48.1849944904], + [11.6081687416, 48.1851447077], + [11.6084222103, 48.1852560291], + [11.6086367871, 48.1853565646], + [11.6090136374, 48.1855322639], + [11.6092067565, 48.1856328548], + [11.6094843651, 48.1857803877], + [11.6097083296, 48.1859051198], + [11.6098920609, 48.1860083365], + [11.6099510695, 48.1860485725], + [11.6100892033, 48.1861277032], + [11.6102595235, 48.186243046], + [11.6102890278, 48.186263164], + [11.610471418, 48.1863811889], + [11.6106350328, 48.1864898253], + [11.6108080353, 48.186610532], + [11.6110547985, 48.1867982976], + [11.611266693, 48.1869578419], + [11.6114155556, 48.1870772064], + [11.6115925814, 48.1872300999], + [11.6118661667, 48.1874728508], + [11.6121249999, 48.1877223064], + [11.6122658159, 48.1878658099], + [11.6122980024, 48.1879006799], + [11.6123382355, 48.1879435967], + [11.6123516466, 48.1879583493], + [11.6124106552, 48.188018701], + [11.6124401595, 48.1880508886], + [11.6125796343, 48.1881956764], + [11.612716427, 48.1883646602], + [11.6128518785, 48.1885282789], + [11.6130047645, 48.1887240842], + [11.6132448222, 48.1890714356], + [11.6132716442, 48.1891076459], + [11.6133923437, 48.1892940611], + [11.6135049964, 48.1894697469], + [11.6136444713, 48.1897205339], + [11.6137638296, 48.1899377922], + [11.6139770652, 48.1903186626], + [11.6142224873, 48.1907826769] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6198980416, 48.1200126322], + [11.6198014821, 48.119842304], + [11.6194045152, 48.1191449263], + [11.6192113961, 48.1187988918], + [11.6191389765, 48.1186634766], + [11.6190772857, 48.1185494366], + [11.6188774611, 48.1181350743], + [11.6187594439, 48.1178641841], + [11.6186789776, 48.117677733], + [11.6184630598, 48.1171734945], + [11.618080845, 48.1163084827], + [11.6180473174, 48.1162320422], + [11.6179601456, 48.1160281817], + [11.6178783382, 48.115848495], + [11.6176718081, 48.1154153082], + [11.6176436449, 48.11535364], + [11.6176114584, 48.1152932587], + [11.6175792719, 48.1152342764], + [11.6175148989, 48.1151162556], + [11.6174813713, 48.115054531], + [11.6173311676, 48.1147809385], + [11.6172654535, 48.1146616295], + [11.6170347835, 48.1142405204], + [11.6168993319, 48.1140553992], + [11.6167705859, 48.1138797349], + [11.6165104116, 48.1135753009], + [11.616181841, 48.1131971063] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6214054431, 48.1521575529], + [11.6211640443, 48.1521562108], + [11.6210688259, 48.1521548687], + [11.6210057939, 48.1521535266], + [11.6208166982, 48.1521548687], + [11.6206195558, 48.1521548687], + [11.6201836969, 48.1521562108], + [11.6195359434, 48.1521562108], + [11.6193535532, 48.1521562108], + [11.619274428, 48.1521562108], + [11.6190397347, 48.1521562108], + [11.6186722721, 48.1521575529], + [11.6178072597, 48.152158895] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6237765159, 48.3002543717], + [11.6241050865, 48.3000451647], + [11.6243290509, 48.2998976264], + [11.6245194878, 48.2997742314], + [11.6245369221, 48.2997635256], + [11.6245852019, 48.2997313525], + [11.62474077, 48.2996334392], + [11.6250183786, 48.2994497117], + [11.6251162793, 48.2993907181], + [11.6253174449, 48.2992686601], + [11.6253523137, 48.2992458544], + [11.6256191935, 48.2990742254], + [11.6257747616, 48.2989776491], + [11.6258659567, 48.2989159784], + [11.6260724868, 48.2988127105], + [11.6261422242, 48.2987308544], + [11.6262441482, 48.2986665069], + [11.6263272966, 48.2986182183], + [11.6264627482, 48.2985404324] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6305289771, 48.1183228108], + [11.630707344, 48.1184261075], + [11.63083609, 48.1184891151], + [11.6310506667, 48.1185977274] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Queuing traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6299107279, 48.1702128176], + [11.6300180162, 48.1701618921], + [11.6300703193, 48.1701404263], + [11.6301896776, 48.1700974946], + [11.6304713096, 48.1699875378], + [11.6306148077, 48.1699580221], + [11.6307408716, 48.1699258232], + [11.6309997047, 48.169858798], + [11.6311888005, 48.1698212325], + [11.6315576042, 48.1697474431], + [11.6322496141, 48.1696119946], + [11.6341258193, 48.1692673623], + [11.634391358, 48.1692136967], + [11.6346126403, 48.169160087] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6474215294, 48.1267033852], + [11.6483227517, 48.1266027906] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + }, + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6483227517, 48.1266027906], + [11.6474215294, 48.1267033852] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.6598240639, 48.3160847627], + [11.6598696615, 48.3160110168], + [11.6599125768, 48.3159842051], + [11.659966221, 48.3159774604], + [11.6607386972, 48.3162389989] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.7467222716, 48.3200075239], + [11.7470883931, 48.3205305582] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.7550223674, 48.1679208984], + [11.7550116386, 48.167971826], + [11.7549955453, 48.1680483013], + [11.7549794521, 48.1681274039], + [11.7548413183, 48.1684988771], + [11.7547031845, 48.1688086875], + [11.7546656336, 48.1688905281], + [11.7546468581, 48.1689240134], + [11.7544966544, 48.1691775283], + [11.7542458679, 48.1695503355], + [11.7541493084, 48.1697903751] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 8, + "events": [ + { + "description": "Closed" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.7541493084, 48.1697903751], + [11.7542458679, 48.1695503355], + [11.7544966544, 48.1691775283], + [11.7546468581, 48.1689240134], + [11.7546656336, 48.1688905281], + [11.7547031845, 48.1688086875], + [11.7548413183, 48.1684988771], + [11.7549794521, 48.1681274039], + [11.7549955453, 48.1680483013], + [11.7550116386, 48.167971826], + [11.7550223674, 48.1679208984] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.7465170826, 48.0923067399], + [11.7465586569, 48.0923657485], + [11.7466619219, 48.0925105825], + [11.7468469943, 48.0927801507], + [11.7470454778, 48.0930604105], + [11.7473673429, 48.0935338144], + [11.7475604619, 48.093824875], + [11.7476757969, 48.0939965211], + [11.7477321233, 48.0940836875], + [11.747766992, 48.0941346325], + [11.7481451835, 48.0947086277], + [11.7484670486, 48.0952129187], + [11.7488278057, 48.0957815277], + [11.749062499, 48.0961516771], + [11.7493293788, 48.0965982378], + [11.7495707776, 48.0969925649], + [11.7498550917, 48.0974633015], + [11.7500575985, 48.0978092558], + [11.7500777151, 48.097844131], + [11.7503472771, 48.0983001374], + [11.750551125, 48.0986595208], + [11.7507281508, 48.0989707046], + [11.7508045937, 48.0991074591], + [11.75110366, 48.0996452374], + [11.7512417938, 48.0998839808], + [11.7524782922, 48.1022040716], + [11.7526459302, 48.1025152339], + [11.7526834811, 48.1026104461], + [11.7530348505, 48.1033051377], + [11.7530817892, 48.1034070653], + [11.7532051708, 48.1036726023], + [11.7534237708, 48.104136617], + [11.7535055782, 48.1043136579], + [11.7538408543, 48.1050740371], + [11.7540111746, 48.1054763591], + [11.7541788127, 48.1058747039], + [11.7542928066, 48.1061496312], + [11.7543853428, 48.1063722249], + [11.7544537391, 48.1065344821], + [11.7546763624, 48.1070857273], + [11.7547031845, 48.1071554651], + [11.7547621931, 48.1072949404], + [11.7548560704, 48.1075269319], + [11.7550129797, 48.1079145149], + [11.7552168276, 48.1083986398], + [11.7552758362, 48.1085502008], + [11.7553026582, 48.1086132204], + [11.7554595675, 48.1090544679], + [11.7556097712, 48.1095037148], + [11.7558095958, 48.1100777064], + [11.7558779921, 48.1102681587], + [11.7560429479, 48.110733513], + [11.7561059798, 48.1109346522], + [11.7561488952, 48.1110647711], + [11.7562038805, 48.1112243271], + [11.756223997, 48.1112887426], + [11.7563326265, 48.111618654], + [11.7564358916, 48.1119579092], + [11.756556591, 48.1123468579], + [11.7567604388, 48.1129999494], + [11.7569321002, 48.1135967904], + [11.7570568229, 48.1140232212], + [11.7571681346, 48.1144228989], + [11.7572325076, 48.1146562572], + [11.7573719825, 48.1151658367], + [11.7573934402, 48.1152516801] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 9, + "events": [ + { + "description": "Roadworks" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.7577515151, 48.1183764736], + [11.7577354218, 48.1183000362], + [11.7577273752, 48.1182624889], + [11.7577018942, 48.1181431321], + [11.7576589789, 48.1179433081], + [11.7575852181, 48.1176026375], + [11.7574792709, 48.1171211734], + [11.7574216034, 48.1168731091], + [11.7573585715, 48.1165954972], + [11.7571909334, 48.1159141918], + [11.757019272, 48.1152342764], + [11.756839564, 48.1145610113], + [11.7566732671, 48.1139669236], + [11.7565016057, 48.1133701427], + [11.7562226559, 48.1124273335], + [11.7561649884, 48.1122382324], + [11.7560965921, 48.1120156081], + [11.7559705283, 48.1116320295], + [11.7558592166, 48.11128337], + [11.7558444645, 48.1112391018], + [11.755800208, 48.1111130129], + [11.7557505872, 48.1109775775], + [11.7556191589, 48.1106074228], + [11.7555333282, 48.1103579838], + [11.7554555442, 48.1101219755], + [11.7553536202, 48.1098416968], + [11.7552275564, 48.109498342], + [11.755081376, 48.1090906787], + [11.7548735048, 48.1085837255], + [11.7546884324, 48.1080539882], + [11.7545945551, 48.1078031936], + [11.7544631268, 48.1074706272], + [11.7541855182, 48.1067719061], + [11.7540487255, 48.106443307], + [11.7539615537, 48.106218027], + [11.7538247611, 48.1059042005], + [11.7536517586, 48.1054951654], + [11.7534868027, 48.1051263705], + [11.7533835377, 48.1049023721], + [11.7532695438, 48.1046408714], + [11.7531609143, 48.1044128969], + [11.7531407978, 48.1043699661], + [11.7528658714, 48.1037865633], + [11.7526110615, 48.1032554892], + [11.7524823155, 48.1029939802], + [11.7523388173, 48.1027056582], + [11.7522959019, 48.1026144763], + [11.7521510627, 48.1023274396], + [11.7519646491, 48.1019439006], + [11.751668265, 48.1013753038], + [11.7515422012, 48.1011379108], + [11.751410773, 48.1008871385], + [11.7512431349, 48.1005666182], + [11.750936022, 48.1000019806], + [11.7507066931, 48.0995808633], + [11.7504813875, 48.0991758643], + [11.7504076268, 48.0990417409], + [11.7501970734, 48.0986608643], + [11.7500535752, 48.0984127668], + [11.7498054709, 48.0979782575], + [11.7497263457, 48.0978481615], + [11.7495707776, 48.097591999], + [11.7493950929, 48.0972942981], + [11.7491469886, 48.0968839069], + [11.7489444818, 48.0965513259] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Stationary traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.7594024147, 48.142529753], + [11.7597095277, 48.1425284107], + [11.7603237535, 48.1425082756], + [11.7604136075, 48.1425055909], + [11.7608038689, 48.1424962505], + [11.7610184457, 48.1424922235], + [11.7612008359, 48.1424908811], + [11.7613832261, 48.1424922235], + [11.7615642752, 48.1424814848], + [11.7622428741, 48.1424559803], + [11.7635356988, 48.1424130813], + [11.7643738891, 48.1423983156], + [11.7651436831, 48.1424036849], + [11.7653542365, 48.142407712], + [11.765629163, 48.142419793], + [11.7659402992, 48.1424573226] + ] + } + }, + { + "type": "Feature", + "properties": { + "iconCategory": 6, + "events": [ + { + "description": "Slow traffic" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [11.753696015, 48.1427751766], + [11.7537536825, 48.1427738342], + [11.7541667427, 48.1427590686], + [11.7546186949, 48.1427456453], + [11.7549325134, 48.1427349625], + [11.7553656902, 48.1427215392], + [11.7557894792, 48.1427081159], + [11.7561515774, 48.1426973772], + [11.7569119837, 48.1426705865], + [11.7571520414, 48.1426705865], + [11.7574148978, 48.1426692441], + [11.7575718071, 48.1426679018], + [11.7576656844, 48.1426679018], + [11.7580438759, 48.1426625325], + [11.7581632342, 48.1426598478], + [11.7582812514, 48.1426571631], + [11.7584073152, 48.1426531361], + [11.7587345447, 48.1426437398], + [11.7590631153, 48.1426330011], + [11.7600434627, 48.142604868], + [11.761125734, 48.1425726519], + [11.7613939549, 48.1425699672], + [11.7618539538, 48.1425404917], + [11.7624400164, 48.1425203567], + [11.7649331297, 48.1424613497], + [11.7649921383, 48.1424613497], + [11.7659402992, 48.1424573226], + [11.7663037385, 48.1424465839], + [11.7669286932, 48.1424613497], + [11.7670105006, 48.1424653767], + [11.7671714331, 48.1424747731], + [11.7674021031, 48.1424788001], + [11.7677749302, 48.1425015639], + [11.7680739965, 48.142521699], + [11.7682054247, 48.1425324377], + [11.7683006431, 48.1425418341], + [11.7684964444, 48.1425552574], + [11.7689296212, 48.1425981563], + [11.7689980175, 48.142604868], + [11.7694218065, 48.1426531361], + [11.7697624471, 48.1426973772], + [11.7701232042, 48.1427456453], + [11.7703967895, 48.1427872576], + [11.7705402877, 48.1428086789], + [11.7710083331, 48.1428891628], + [11.7712202277, 48.142930719], + [11.7716507222, 48.1430152297], + [11.771943083, 48.1430755783], + [11.7722622659, 48.1431480078], + [11.7724875714, 48.1431989601], + [11.7729287948, 48.1433075761], + [11.7733069863, 48.1434122209], + [11.7736637201, 48.1435114402], + [11.7739440109, 48.1435946076], + [11.7742591705, 48.1436897997], + [11.7745086159, 48.1437702821], + [11.7751013841, 48.1439754867], + [11.775420567, 48.1440948394], + [11.7758684959, 48.1442705123], + [11.7763271536, 48.1444596074], + [11.7766677942, 48.1446111738], + [11.7768367733, 48.1446875721], + [11.7772860433, 48.1449021689], + [11.7777004446, 48.1451046844], + [11.7783227171, 48.1454225219], + [11.7789087798, 48.145732304], + [11.779425105, 48.1460045572], + [11.7800245787, 48.1463223892], + [11.7806146647, 48.1466255105], + [11.7811081912, 48.1468789679], + [11.7813737299, 48.1470103938], + [11.7816848661, 48.1471632949], + [11.7821059729, 48.1473617749], + [11.7830206062, 48.1477721545], + [11.7835262026, 48.1479827118], + [11.7841565217, 48.1482307937], + [11.7845601942, 48.1483810068], + [11.7848230507, 48.1484708213], + [11.7853326704, 48.1486519038], + [11.7863908018, 48.1489885097], + [11.7866402473, 48.1490569044], + [11.786803862, 48.1491091929], + [11.786944678, 48.1491508001], + [11.787329575, 48.1492540348], + [11.787573656, 48.1493184026], + [11.7878740634, 48.1493935077], + [11.7882777359, 48.14949814], + [11.7885137703, 48.1495544546], + [11.7886545863, 48.1495880084], + [11.788882574, 48.1496389543], + [11.7892151679, 48.1497100324], + [11.7894914355, 48.1497676889], + [11.789793184, 48.1498266875], + [11.7901284601, 48.1498923968], + [11.7902344074, 48.1499125289], + [11.7905146982, 48.1499594481], + [11.790896913, 48.1500291836], + [11.7915688063, 48.1501311303], + [11.7917686309, 48.1501619995], + [11.7920931782, 48.150204892], + [11.7922299709, 48.1502223398], + [11.7923225071, 48.150234419], + [11.792885771, 48.1503054963], + [11.7935107257, 48.1503725471], + [11.7941209282, 48.1504221501], + [11.7946278657, 48.1504610719], + [11.7954459395, 48.1505039641], + [11.7959341015, 48.1505254382], + [11.7963739838, 48.1505361752], + [11.7967079188, 48.1505468563], + [11.7970941569, 48.1505522248], + [11.7974696662, 48.1505549091], + [11.79781433, 48.1505575933], + [11.7981254663, 48.150553567], + [11.7985733952, 48.1505616197], + [11.7990897204, 48.1505562512], + [11.7994786407, 48.1505522248], + [11.7999238874, 48.1505522248], + [11.8002497758, 48.1505562512], + [11.8005890753, 48.150553567], + [11.8010262753, 48.1505602776], + [11.8013521637, 48.1505656461], + [11.8015707638, 48.1505696725], + [11.8019435908, 48.1505804095], + [11.8024558927, 48.1506005414], + [11.8027844633, 48.1506192753], + [11.8031224217, 48.1506340387], + [11.8033772315, 48.1506514863], + [11.8038278427, 48.1506890099], + [11.804294547, 48.1507306157], + [11.8047894146, 48.1507788762], + [11.8051313962, 48.1508137714], + [11.805513611, 48.1508606897], + [11.805910578, 48.1509089501], + [11.8062498774, 48.1509586085], + [11.8066897597, 48.1510229742], + [11.8070974554, 48.1510913661], + [11.8074796702, 48.1511530474], + [11.8078377451, 48.1512214392], + [11.8080885317, 48.1512670709], + [11.8084358777, 48.1513381468], + [11.8087912704, 48.1514119067], + [11.8092418815, 48.1515070843], + [11.8096173908, 48.1515956071], + [11.8099593725, 48.1516801035], + [11.8102410044, 48.1517484946], + [11.8105803038, 48.1518410432], + [11.8110403027, 48.1519684302], + [11.8113326635, 48.1520502418], + [11.8116183187, 48.1521387637], + [11.8120058979, 48.1522581534], + [11.8124001827, 48.1523815131], + [11.8125986661, 48.1524485611], + [11.8127716686, 48.1525062146], + [11.8130278196, 48.1525960777], + [11.8134261276, 48.1527341994], + [11.8136742319, 48.1528267463], + [11.8139773216, 48.1529353979], + [11.8142495658, 48.1530413091], + [11.8144480492, 48.1531164087], + [11.8147846665, 48.1532438484], + [11.8150904383, 48.1533631796], + [11.8153278138, 48.1534584095], + [11.8156805243, 48.1535938447], + [11.8161847796, 48.1537923557], + [11.816510668, 48.1539170538], + [11.8170725908, 48.1541370361], + [11.8180730547, 48.1545098407], + [11.8182621505, 48.1545916483], + [11.8184606339, 48.1546774817], + [11.8190064635, 48.1548866687], + [11.8196501936, 48.1551361151], + [11.8202939238, 48.1553842183], + [11.8207566049, 48.1555585665], + [11.8212273325, 48.1557409659], + [11.8214982356, 48.1558429014], + [11.821861675, 48.1559796723], + [11.8226904776, 48.1562774247], + [11.8227240052, 48.1562895025] + ] + } + } + ] +} \ No newline at end of file diff --git a/common/data/src/main/res/raw/tomtom_traffic.json b/common/data/src/main/res/raw/tomtom_traffic.json deleted file mode 100644 index f460db8..0000000 --- a/common/data/src/main/res/raw/tomtom_traffic.json +++ /dev/null @@ -1,7197 +0,0 @@ -{ - "incidents": [ - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4109620059, - 48.1293372933 - ], - [ - 11.4107809568, - 48.1292930407 - ], - [ - 11.4102297629, - 48.1291468558 - ], - [ - 11.4098918045, - 48.1290583502 - ], - [ - 11.4097013677, - 48.1289993277 - ], - [ - 11.4095243419, - 48.1289497040 - ], - [ - 11.4093781615, - 48.1289081365 - ], - [ - 11.4092078412, - 48.1288505125 - ], - [ - 11.4087357725, - 48.1286922420 - ], - [ - 11.4085359479, - 48.1286251629 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4125753547, - 48.1383267204 - ], - [ - 11.4126289988, - 48.1381563970 - ], - [ - 11.4128154124, - 48.1375515627 - ], - [ - 11.4128422345, - 48.1374603867 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4198025669, - 48.1518946711 - ], - [ - 11.4199474061, - 48.1515379527 - ], - [ - 11.4200587178, - 48.1512617025 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4210243131, - 48.1486653255 - ], - [ - 11.4208177830, - 48.1492393270 - ], - [ - 11.4207601155, - 48.1494243773 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4244065786, - 48.2547668166 - ], - [ - 11.4246479774, - 48.2545508936 - ], - [ - 11.4247606302, - 48.2544542888 - ], - [ - 11.4248585308, - 48.2543738684 - ], - [ - 11.4249135161, - 48.2543363091 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4277217890, - 48.1195901680 - ], - [ - 11.4275581742, - 48.1197403530 - ], - [ - 11.4273757840, - 48.1199133674 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4335985089, - 48.1639806978 - ], - [ - 11.4335569347, - 48.1639163484 - ], - [ - 11.4335274304, - 48.1638760950 - ], - [ - 11.4334670807, - 48.1637956440 - ], - [ - 11.4333825911, - 48.1637178765 - ], - [ - 11.4332592095, - 48.1636105896 - ], - [ - 11.4328099395, - 48.1632927529 - ], - [ - 11.4325846339, - 48.1631411857 - ], - [ - 11.4315908755, - 48.1624987954 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Slow traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4381233955, - 48.2644750414 - ], - [ - 11.4381046201, - 48.2642805859 - ], - [ - 11.4380858446, - 48.2641665905 - ], - [ - 11.4380777980, - 48.2641169860 - ], - [ - 11.4380724336, - 48.2640847904 - ], - [ - 11.4380603636, - 48.2640458991 - ], - [ - 11.4380482937, - 48.2640070077 - ], - [ - 11.4380335415, - 48.2639667771 - ], - [ - 11.4380174483, - 48.2639319032 - ], - [ - 11.4379986728, - 48.2639037250 - ], - [ - 11.4379691685, - 48.2638608160 - ], - [ - 11.4379450286, - 48.2638259420 - ], - [ - 11.4379168654, - 48.2637910680 - ], - [ - 11.4375802482, - 48.2633726333 - ], - [ - 11.4374970997, - 48.2632506008 - ], - [ - 11.4373240972, - 48.2630266786 - ], - [ - 11.4372168089, - 48.2628603405 - ], - [ - 11.4370411242, - 48.2625907723 - ], - [ - 11.4369378592, - 48.2624486500 - ], - [ - 11.4368600751, - 48.2623279545 - ], - [ - 11.4368158186, - 48.2622515083 - ], - [ - 11.4368077720, - 48.2622327036 - ], - [ - 11.4367340113, - 48.2620744540 - ], - [ - 11.4367179180, - 48.2620328827 - ], - [ - 11.4367018248, - 48.2619725624 - ], - [ - 11.4366964603, - 48.2619255784 - ], - [ - 11.4366978014, - 48.2619081686 - ], - [ - 11.4366910959, - 48.2618250257 - ], - [ - 11.4366870726, - 48.2617714012 - ], - [ - 11.4366669560, - 48.2616466307 - ], - [ - 11.4366441573, - 48.2615205765 - ], - [ - 11.4366226996, - 48.2614387721 - ], - [ - 11.4365918542, - 48.2613408970 - ], - [ - 11.4365556444, - 48.2612456443 - ], - [ - 11.4365234579, - 48.2611732700 - ], - [ - 11.4364201928, - 48.2609519613 - ], - [ - 11.4363209511, - 48.2607883507 - ], - [ - 11.4362726713, - 48.2607427607 - ], - [ - 11.4362310971, - 48.2607212769 - ], - [ - 11.4361989106, - 48.2607105630 - ], - [ - 11.4361761118, - 48.2607092237 - ], - [ - 11.4361828173, - 48.2606489019 - ], - [ - 11.4361801351, - 48.2606019166 - ], - [ - 11.4361761118, - 48.2605858457 - ], - [ - 11.4361559952, - 48.2605187716 - ], - [ - 11.4359441007, - 48.2602116919 - ], - [ - 11.4357603694, - 48.2599796649 - ], - [ - 11.4357482995, - 48.2599676115 - ], - [ - 11.4356758798, - 48.2598804477 - ], - [ - 11.4356155301, - 48.2598294439 - ], - [ - 11.4355243350, - 48.2597717996 - ], - [ - 11.4354170466, - 48.2597275479 - ], - [ - 11.4352735485, - 48.2596685083 - ], - [ - 11.4349342490, - 48.2595451277 - ], - [ - 11.4349154736, - 48.2595384314 - ], - [ - 11.4348671938, - 48.2595223600 - ], - [ - 11.4348095263, - 48.2595008758 - ], - [ - 11.4347210134, - 48.2594727510 - ], - [ - 11.4345024134, - 48.2594204076 - ], - [ - 11.4343468452, - 48.2593963005 - ], - [ - 11.4343092943, - 48.2593949613 - ], - [ - 11.4341738428, - 48.2593922827 - ], - [ - 11.4340933765, - 48.2593896042 - ], - [ - 11.4339592660, - 48.2594244254 - ], - [ - 11.4338640476, - 48.2594485882 - ], - [ - 11.4337366427, - 48.2594915009 - ], - [ - 11.4336347187, - 48.2595277172 - ], - [ - 11.4335341359, - 48.2595599156 - ], - [ - 11.4334281887, - 48.2595947925 - ], - [ - 11.4331157113, - 48.2597624247 - ], - [ - 11.4328716303, - 48.2599541631 - ], - [ - 11.4326718057, - 48.2601419388 - ], - [ - 11.4326355959, - 48.2601915472 - ], - [ - 11.4326195026, - 48.2602143704 - ], - [ - 11.4325604940, - 48.2603243010 - ], - [ - 11.4324143136, - 48.2605925419 - ], - [ - 11.4321715737, - 48.2610324271 - ], - [ - 11.4319999124, - 48.2612510570 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Contraflow" - }, - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4166563357, - 48.1301594004 - ], - [ - 11.4177010561, - 48.1302411908 - ], - [ - 11.4179518426, - 48.1302586454 - ], - [ - 11.4181905592, - 48.1302747573 - ], - [ - 11.4185218121, - 48.1302908132 - ], - [ - 11.4187940563, - 48.1303015545 - ], - [ - 11.4189496244, - 48.1303055825 - ], - [ - 11.4192419852, - 48.1303149811 - ], - [ - 11.4195866490, - 48.1303216943 - ], - [ - 11.4199567939, - 48.1303284076 - ], - [ - 11.4203470553, - 48.1303297503 - ], - [ - 11.4205710197, - 48.1303297503 - ], - [ - 11.4208325351, - 48.1303297503 - ], - [ - 11.4209921266, - 48.1303297503 - ], - [ - 11.4213515426, - 48.1303257223 - ], - [ - 11.4216358567, - 48.1303082678 - ], - [ - 11.4218638445, - 48.1302948412 - ], - [ - 11.4222339893, - 48.1302613307 - ], - [ - 11.4226457084, - 48.1302264775 - ], - [ - 11.4231472815, - 48.1301714843 - ], - [ - 11.4233766104, - 48.1301446311 - ], - [ - 11.4236756767, - 48.1301030645 - ], - [ - 11.4237427319, - 48.1300950085 - ], - [ - 11.4237762595, - 48.1300923232 - ], - [ - 11.4245608056, - 48.1299435111 - ], - [ - 11.4247284437, - 48.1299126298 - ], - [ - 11.4249001051, - 48.1298737483 - ], - [ - 11.4253533984, - 48.1297651039 - ], - [ - 11.4266784097, - 48.1293735458 - ], - [ - 11.4268554355, - 48.1293172090 - ], - [ - 11.4271370674, - 48.1292233330 - ], - [ - 11.4275219644, - 48.1290878894 - ], - [ - 11.4276265706, - 48.1290502940 - ], - [ - 11.4278693105, - 48.1289631310 - ], - [ - 11.4281361903, - 48.1288652262 - ], - [ - 11.4284298922, - 48.1287552929 - ], - [ - 11.4286391045, - 48.1286841858 - ], - [ - 11.4289328063, - 48.1285755388 - ], - [ - 11.4291299487, - 48.1285018020 - ], - [ - 11.4296798016, - 48.1283059905 - ], - [ - 11.4302189256, - 48.1281074928 - ], - [ - 11.4307204987, - 48.1279345061 - ], - [ - 11.4309002067, - 48.1278674819 - ], - [ - 11.4310758913, - 48.1278084581 - ], - [ - 11.4315265025, - 48.1276756962 - ], - [ - 11.4319194461, - 48.1275737608 - ], - [ - 11.4320133234, - 48.1275495916 - ], - [ - 11.4322413112, - 48.1274919661 - ], - [ - 11.4325497652, - 48.1273592034 - ], - [ - 11.4326825345, - 48.1273296632 - ], - [ - 11.4329601432, - 48.1272719815 - ], - [ - 11.4331666733, - 48.1272411545 - ], - [ - 11.4334174598, - 48.1272116702 - ], - [ - 11.4337446893, - 48.1271807872 - ], - [ - 11.4339753593, - 48.1271526456 - ], - [ - 11.4343334342, - 48.1271191331 - ], - [ - 11.4345600809, - 48.1271016774 - ], - [ - 11.4348511005, - 48.1270895927 - ], - [ - 11.4349087680, - 48.1270882500 - ], - [ - 11.4352279509, - 48.1270815922 - ], - [ - 11.4352453853, - 48.1270815922 - ], - [ - 11.4353003705, - 48.1270802495 - ], - [ - 11.4357442761, - 48.1270869632 - ], - [ - 11.4360634590, - 48.1271083911 - ], - [ - 11.4366951192, - 48.1271566738 - ], - [ - 11.4368775094, - 48.1271861582 - ], - [ - 11.4371537770, - 48.1272277271 - ], - [ - 11.4373442138, - 48.1272612956 - ], - [ - 11.4376379157, - 48.1273175786 - ], - [ - 11.4377103353, - 48.1273310060 - ], - [ - 11.4379396642, - 48.1273766030 - ], - [ - 11.4382856692, - 48.1274530829 - ], - [ - 11.4385042692, - 48.1275026520 - ], - [ - 11.4388113821, - 48.1275710753 - ], - [ - 11.4394229258, - 48.1277038375 - ], - [ - 11.4398923124, - 48.1277950309 - ], - [ - 11.4405883456, - 48.1278795105 - ], - [ - 11.4413044954, - 48.1279425624 - ], - [ - 11.4414319004, - 48.1279546469 - ], - [ - 11.4419965054, - 48.1279666754 - ], - [ - 11.4424605275, - 48.1279506187 - ], - [ - 11.4427233840, - 48.1279412197 - ], - [ - 11.4429366196, - 48.1279331634 - ], - [ - 11.4431364442, - 48.1279171067 - ], - [ - 11.4431793595, - 48.1279117358 - ], - [ - 11.4433107878, - 48.1278983086 - ], - [ - 11.4433416332, - 48.1278956231 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4463980103, - 48.1273913731 - ], - [ - 11.4461928214, - 48.1274503974 - ], - [ - 11.4457904900, - 48.1275670471 - ], - [ - 11.4454310740, - 48.1276662971 - ], - [ - 11.4449227954, - 48.1277856318 - ], - [ - 11.4444064702, - 48.1278956231 - ], - [ - 11.4442240799, - 48.1279264498 - ], - [ - 11.4440309609, - 48.1279586750 - ], - [ - 11.4440229143, - 48.1279600177 - ], - [ - 11.4437694455, - 48.1279935298 - ], - [ - 11.4437064136, - 48.1280029288 - ], - [ - 11.4436380173, - 48.1280122719 - ], - [ - 11.4435548688, - 48.1280230136 - ], - [ - 11.4432839657, - 48.1280498679 - ], - [ - 11.4432745779, - 48.1280512107 - ], - [ - 11.4429325963, - 48.1280806945 - ], - [ - 11.4426268245, - 48.1280968071 - ], - [ - 11.4422794784, - 48.1281115210 - ], - [ - 11.4422204698, - 48.1281128637 - ], - [ - 11.4418530072, - 48.1281128637 - ], - [ - 11.4416531826, - 48.1281074928 - ], - [ - 11.4415016378, - 48.1281035206 - ], - [ - 11.4414037372, - 48.1281008352 - ], - [ - 11.4413219298, - 48.1280954643 - ], - [ - 11.4412977899, - 48.1280927789 - ], - [ - 11.4412857200, - 48.1280927789 - ], - [ - 11.4411998893, - 48.1280874081 - ], - [ - 11.4407801236, - 48.1280525534 - ], - [ - 11.4405320192, - 48.1280324126 - ], - [ - 11.4401605333, - 48.1279827880 - ], - [ - 11.4399808253, - 48.1279586750 - ], - [ - 11.4398292805, - 48.1279318206 - ], - [ - 11.4397032166, - 48.1279117358 - ], - [ - 11.4393867160, - 48.1278500266 - ], - [ - 11.4390769208, - 48.1277842891 - ], - [ - 11.4386263097, - 48.1276877248 - ], - [ - 11.4383084680, - 48.1276153294 - ], - [ - 11.4378712679, - 48.1275174221 - ], - [ - 11.4376540090, - 48.1274745106 - ], - [ - 11.4374488200, - 48.1274342846 - ], - [ - 11.4371551181, - 48.1273819739 - ], - [ - 11.4369392003, - 48.1273444333 - ], - [ - 11.4364416505, - 48.1272840662 - ], - [ - 11.4360688234, - 48.1272572674 - ], - [ - 11.4357670749, - 48.1272384690 - ], - [ - 11.4353017117, - 48.1272357836 - ], - [ - 11.4349986220, - 48.1272451827 - ], - [ - 11.4346727336, - 48.1272599528 - ], - [ - 11.4343562330, - 48.1272880944 - ], - [ - 11.4342663790, - 48.1273028645 - ], - [ - 11.4340491200, - 48.1273216068 - ], - [ - 11.4338023568, - 48.1273511470 - ], - [ - 11.4335797335, - 48.1273766030 - ], - [ - 11.4333597923, - 48.1274114581 - ], - [ - 11.4324129725, - 48.1275858453 - ], - [ - 11.4322949553, - 48.1276139867 - ], - [ - 11.4320656265, - 48.1276783817 - ], - [ - 11.4319958890, - 48.1276984666 - ], - [ - 11.4314634706, - 48.1278527120 - ], - [ - 11.4310879613, - 48.1279774171 - ], - [ - 11.4309632386, - 48.1280216709 - ], - [ - 11.4308023060, - 48.1280753236 - ], - [ - 11.4301022495, - 48.1283261312 - ], - [ - 11.4297790433, - 48.1284347227 - ], - [ - 11.4293351377, - 48.1286023929 - ], - [ - 11.4290213192, - 48.1287150119 - ], - [ - 11.4287544394, - 48.1288156024 - ], - [ - 11.4286122824, - 48.1288705970 - ], - [ - 11.4282770062, - 48.1289926702 - ], - [ - 11.4279001559, - 48.1291240860 - ], - [ - 11.4277311767, - 48.1291857378 - ], - [ - 11.4276265706, - 48.1292206476 - ], - [ - 11.4272698368, - 48.1293480348 - ], - [ - 11.4269761349, - 48.1294486240 - ], - [ - 11.4265966023, - 48.1295706399 - ], - [ - 11.4264276231, - 48.1296216057 - ], - [ - 11.4261392857, - 48.1297087676 - ], - [ - 11.4259461666, - 48.1297624186 - ], - [ - 11.4257959629, - 48.1298039855 - ], - [ - 11.4256551469, - 48.1298456082 - ], - [ - 11.4254352058, - 48.1298992591 - ], - [ - 11.4253775383, - 48.1299139725 - ], - [ - 11.4251093174, - 48.1299797072 - ], - [ - 11.4250892008, - 48.1299837352 - ], - [ - 11.4249805714, - 48.1300051619 - ], - [ - 11.4249027873, - 48.1300212739 - ], - [ - 11.4247659946, - 48.1300547846 - ], - [ - 11.4247512425, - 48.1300574699 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4632610584, - 48.1426611901 - ], - [ - 11.4619749392, - 48.1426156067 - ], - [ - 11.4609731341, - 48.1425431764 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Lane closed" - }, - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4583727325, - 48.1504221501 - ], - [ - 11.4585551227, - 48.1503510730 - ], - [ - 11.4587214197, - 48.1502893907 - ], - [ - 11.4588890577, - 48.1502303926 - ], - [ - 11.4590124393, - 48.1501901285 - ], - [ - 11.4597956444, - 48.1499125289 - ], - [ - 11.4604487623, - 48.1496966109 - ], - [ - 11.4612413550, - 48.1494551910 - ], - [ - 11.4617469514, - 48.1493010105 - ], - [ - 11.4619843269, - 48.1492326161 - ], - [ - 11.4621761049, - 48.1491735609 - ], - [ - 11.4627125467, - 48.1490099844 - ], - [ - 11.4635386671, - 48.1487900361 - ], - [ - 11.4642534758, - 48.1485888773 - ], - [ - 11.4646598304, - 48.1484628241 - ], - [ - 11.4653451348, - 48.1482388468 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Lane closed" - }, - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4659607018, - 48.1481476338 - ], - [ - 11.4657622183, - 48.1482079765 - ], - [ - 11.4657327140, - 48.1482160296 - ], - [ - 11.4655610527, - 48.1482710034 - ], - [ - 11.4649615789, - 48.1484574554 - ], - [ - 11.4645230378, - 48.1485929038 - ], - [ - 11.4644626881, - 48.1486116384 - ], - [ - 11.4641515518, - 48.1487041927 - ], - [ - 11.4639812315, - 48.1487497708 - ], - [ - 11.4632396008, - 48.1489536692 - ], - [ - 11.4624926055, - 48.1491588531 - ], - [ - 11.4622082914, - 48.1492446397 - ], - [ - 11.4620178546, - 48.1493023526 - ], - [ - 11.4617885257, - 48.1493707469 - ], - [ - 11.4612882937, - 48.1495222988 - ], - [ - 11.4606700445, - 48.1497113746 - ], - [ - 11.4603723193, - 48.1498172925 - ], - [ - 11.4601403082, - 48.1498923968 - ], - [ - 11.4598895217, - 48.1499822645 - ], - [ - 11.4595113302, - 48.1501177090 - ], - [ - 11.4590593780, - 48.1502786536 - ], - [ - 11.4588112737, - 48.1503712050 - ], - [ - 11.4585832859, - 48.1504530191 - ], - [ - 11.4583955313, - 48.1505147011 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4658788944, - 48.1869511360 - ], - [ - 11.4659902061, - 48.1867889093 - ], - [ - 11.4661806429, - 48.1865139666 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4661806429, - 48.1865139666 - ], - [ - 11.4659902061, - 48.1867889093 - ], - [ - 11.4658788944, - 48.1869511360 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4671033228, - 48.1856918680 - ], - [ - 11.4672495032, - 48.1857307630 - ], - [ - 11.4675069953, - 48.1857790465 - ], - [ - 11.4677255953, - 48.1857468575 - ], - [ - 11.4679093267, - 48.1856932092 - ], - [ - 11.4680581893, - 48.1856234663 - ], - [ - 11.4681332911, - 48.1855456760 - ], - [ - 11.4681815709, - 48.1854128958 - ], - [ - 11.4686630274, - 48.1840678058 - ], - [ - 11.4687998200, - 48.1836882302 - ], - [ - 11.4691163207, - 48.1828044431 - ], - [ - 11.4691726471, - 48.1826556162 - ], - [ - 11.4691941048, - 48.1825550194 - ], - [ - 11.4691873992, - 48.1824812484 - ], - [ - 11.4691458250, - 48.1823860165 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4691458250, - 48.1823860165 - ], - [ - 11.4691873992, - 48.1824812484 - ], - [ - 11.4691941048, - 48.1825550194 - ], - [ - 11.4691726471, - 48.1826556162 - ], - [ - 11.4691163207, - 48.1828044431 - ], - [ - 11.4687998200, - 48.1836882302 - ], - [ - 11.4686630274, - 48.1840678058 - ], - [ - 11.4681815709, - 48.1854128958 - ], - [ - 11.4681332911, - 48.1855456760 - ], - [ - 11.4680581893, - 48.1856234663 - ], - [ - 11.4679093267, - 48.1856932092 - ], - [ - 11.4677255953, - 48.1857468575 - ], - [ - 11.4675069953, - 48.1857790465 - ], - [ - 11.4672495032, - 48.1857307630 - ], - [ - 11.4671033228, - 48.1856918680 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Lane closed" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4695816840, - 48.1470171049 - ], - [ - 11.4694650079, - 48.1470479201 - ], - [ - 11.4690291489, - 48.1471699501 - ], - [ - 11.4685329402, - 48.1473080864 - ], - [ - 11.4681654776, - 48.1474113808 - ], - [ - 11.4680152739, - 48.1474583022 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4763180519, - 48.2918148200 - ], - [ - 11.4765822495, - 48.2919462090 - ], - [ - 11.4769725109, - 48.2921795966 - ], - [ - 11.4772165919, - 48.2923834264 - ], - [ - 11.4775625969, - 48.2927213750 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4775625969, - 48.2927213750 - ], - [ - 11.4772165919, - 48.2923834264 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4767512287, - 48.1124474245 - ], - [ - 11.4767592753, - 48.1125010934 - ], - [ - 11.4767767097, - 48.1126124047 - ], - [ - 11.4768048729, - 48.1128336832 - ], - [ - 11.4768129195, - 48.1129248471 - ], - [ - 11.4768316949, - 48.1130790809 - ], - [ - 11.4768451060, - 48.1131622416 - ], - [ - 11.4768518115, - 48.1132145667 - ], - [ - 11.4768571759, - 48.1132654927 - ], - [ - 11.4768652226, - 48.1133057298 - ], - [ - 11.4768786336, - 48.1133607410 - ], - [ - 11.4768933858, - 48.1134599625 - ], - [ - 11.4771025981, - 48.1144845682 - ], - [ - 11.4771267379, - 48.1146025905 - ], - [ - 11.4771535600, - 48.1147232986 - ], - [ - 11.4772501195, - 48.1151618075 - ], - [ - 11.4772702361, - 48.1152395926 - ], - [ - 11.4773252214, - 48.1154823486 - ], - [ - 11.4773574079, - 48.1156205142 - ], - [ - 11.4774714018, - 48.1159209070 - ], - [ - 11.4775652791, - 48.1162172689 - ], - [ - 11.4777476693, - 48.1168288457 - ], - [ - 11.4778187479, - 48.1170433911 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4834111537, - 48.1336154068 - ], - [ - 11.4838121439, - 48.1344093637 - ], - [ - 11.4840508605, - 48.1348572701 - ], - [ - 11.4842091108, - 48.1351697450 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - }, - { - "description": "Construction work" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4859471823, - 48.1366369421 - ], - [ - 11.4862878228, - 48.1366262022 - ], - [ - 11.4866686965, - 48.1366127773 - ], - [ - 11.4869315530, - 48.1366423121 - ], - [ - 11.4871193076, - 48.1366476821 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - }, - { - "description": "Construction work" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4895198847, - 48.1364585582 - ], - [ - 11.4899047817, - 48.1364304217 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - }, - { - "description": "Construction work" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4907201732, - 48.1363620102 - ], - [ - 11.4899047817, - 48.1364304217 - ], - [ - 11.4895198847, - 48.1364585582 - ], - [ - 11.4890800024, - 48.1364921206 - ], - [ - 11.4885958637, - 48.1365296545 - ], - [ - 11.4885019864, - 48.1365403945 - ], - [ - 11.4884134735, - 48.1365511344 - ], - [ - 11.4882230366, - 48.1365739009 - ], - [ - 11.4880553986, - 48.1365926958 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4912056531, - 48.1363217911 - ], - [ - 11.4914363230, - 48.1370272143 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4914363230, - 48.1370272143 - ], - [ - 11.4912056531, - 48.1363217911 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4928458239, - 48.1362171879 - ], - [ - 11.4930188264, - 48.1371412133 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4930188264, - 48.1371412133 - ], - [ - 11.4928458239, - 48.1362171879 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - }, - { - "description": "Construction work" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4941735173, - 48.1360817067 - ], - [ - 11.4928458239, - 48.1362171879 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4942660535, - 48.1370942824 - ], - [ - 11.4941735173, - 48.1360817067 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - }, - { - "description": "Construction work" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4926848913, - 48.1361058719 - ], - [ - 11.4933675135, - 48.1360508850 - ], - [ - 11.4941748584, - 48.1359703904 - ], - [ - 11.4947515334, - 48.1359167460 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4954877998, - 48.1359677054 - ], - [ - 11.4955159629, - 48.1363714077 - ], - [ - 11.4956956709, - 48.1378318581 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4956956709, - 48.1378318581 - ], - [ - 11.4955159629, - 48.1363714077 - ], - [ - 11.4954877998, - 48.1359677054 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - }, - { - "description": "Construction work" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4963917042, - 48.1358014577 - ], - [ - 11.4966854061, - 48.1358121419 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4966854061, - 48.0950184358 - ], - [ - 11.4965928699, - 48.0952451085 - ], - [ - 11.4964761938, - 48.0953805294 - ], - [ - 11.4963997508, - 48.0954570009 - ], - [ - 11.4960671569, - 48.0957211794 - ], - [ - 11.4962173606, - 48.0957936197 - ], - [ - 11.4962374772, - 48.0958526243 - ], - [ - 11.4962079729, - 48.0959250085 - ], - [ - 11.4952919985, - 48.0967726176 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4974203313, - 48.1253622942 - ], - [ - 11.4970796908, - 48.1252925252 - ], - [ - 11.4969254638, - 48.1252576686 - ], - [ - 11.4957841838, - 48.1249934741 - ], - [ - 11.4949138070, - 48.1247829343 - ], - [ - 11.4947971309, - 48.1247520499 - ], - [ - 11.4946603383, - 48.1247145073 - ], - [ - 11.4944806303, - 48.1246662223 - ], - [ - 11.4943156744, - 48.1246233085 - ], - [ - 11.4938100780, - 48.1245079949 - ], - [ - 11.4933299626, - 48.1244100816 - ], - [ - 11.4930738116, - 48.1243604535 - ], - [ - 11.4928900803, - 48.1243242535 - ], - [ - 11.4924287404, - 48.1242343967 - ], - [ - 11.4919218029, - 48.1241552824 - ], - [ - 11.4919003452, - 48.1241525968 - ], - [ - 11.4917018617, - 48.1241231107 - ], - [ - 11.4914671684, - 48.1240908830 - ], - [ - 11.4914309586, - 48.1240855677 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4997712875, - 48.1313127337 - ], - [ - 11.4996291305, - 48.1310230602 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4996291305, - 48.1310230602 - ], - [ - 11.4997712875, - 48.1313127337 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5009045209, - 48.1026372578 - ], - [ - 11.5008723343, - 48.1025688573 - ], - [ - 11.5008321012, - 48.1024749883 - ], - [ - 11.5008012558, - 48.1023998706 - ], - [ - 11.5007677282, - 48.1023556508 - ], - [ - 11.5007328595, - 48.1023073448 - ], - [ - 11.5007046963, - 48.1022684424 - ], - [ - 11.5006389822, - 48.1021986980 - ], - [ - 11.5005437637, - 48.1021196057 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.4994038249, - 48.1120759372 - ], - [ - 11.5018620695, - 48.1120316698 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5021074916, - 48.1057915314 - ], - [ - 11.5020551885, - 48.1056681717 - ], - [ - 11.5019881333, - 48.1054388024 - ], - [ - 11.5019277836, - 48.1052725119 - ], - [ - 11.5018459762, - 48.1050499134 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5023006106, - 48.1074276990 - ], - [ - 11.5023059751, - 48.1075886096 - ], - [ - 11.5023140217, - 48.1078850196 - ], - [ - 11.5023180450, - 48.1079802219 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5024266745, - 48.1121832200 - ], - [ - 11.5022483076, - 48.1121779034 - ], - [ - 11.5018540228, - 48.1121752172 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Lane closed" - }, - { - "description": "Left lane closed" - }, - { - "description": "Carriageway reduced to one lane" - }, - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5030181016, - 48.1396141678 - ], - [ - 11.5030113960, - 48.1394599578 - ], - [ - 11.5029832328, - 48.1387142949 - ], - [ - 11.5029711629, - 48.1383535694 - ], - [ - 11.5029644574, - 48.1379284034 - ], - [ - 11.5029523874, - 48.1373919766 - ], - [ - 11.5029483641, - 48.1372189651 - ], - [ - 11.5029322709, - 48.1368756814 - ], - [ - 11.5029255654, - 48.1366986408 - ], - [ - 11.5029202009, - 48.1364572157 - ], - [ - 11.5029134954, - 48.1362171879 - ], - [ - 11.5029014255, - 48.1357893751 - ], - [ - 11.5028987433, - 48.1355533158 - ], - [ - 11.5028960611, - 48.1355184662 - ], - [ - 11.5028920377, - 48.1354433408 - ], - [ - 11.5028893555, - 48.1353990935 - ], - [ - 11.5028880144, - 48.1353642438 - ], - [ - 11.5028866733, - 48.1352730638 - ], - [ - 11.5028826500, - 48.1350638528 - ], - [ - 11.5028826500, - 48.1349994671 - ], - [ - 11.5028786267, - 48.1347097585 - ], - [ - 11.5028611923, - 48.1341800108 - ], - [ - 11.5028598512, - 48.1341210502 - ], - [ - 11.5028518046, - 48.1338393919 - ], - [ - 11.5028491224, - 48.1337669493 - ], - [ - 11.5028477813, - 48.1337186728 - ], - [ - 11.5028343702, - 48.1331889708 - ], - [ - 11.5028370525, - 48.1330521951 - ], - [ - 11.5028155948, - 48.1322408193 - ], - [ - 11.5028129126, - 48.1320999572 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Lane closed" - }, - { - "description": "Left lane closed" - }, - { - "description": "Carriageway reduced to one lane" - }, - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5030905212, - 48.1423098328 - ], - [ - 11.5030932034, - 48.1422735895 - ], - [ - 11.5030918623, - 48.1421636290 - ], - [ - 11.5030918623, - 48.1421354956 - ], - [ - 11.5030905212, - 48.1419772101 - ], - [ - 11.5030891801, - 48.1417733959 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 7, - "events": [ - { - "description": "Lane closed" - }, - { - "description": "Left lane closed" - }, - { - "description": "Carriageway reduced to one lane" - }, - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5029108132, - 48.1302814706 - ], - [ - 11.5029134954, - 48.1303592328 - ], - [ - 11.5029497052, - 48.1310203749 - ], - [ - 11.5029564108, - 48.1314213748 - ], - [ - 11.5029644574, - 48.1317942326 - ], - [ - 11.5029725040, - 48.1322515042 - ], - [ - 11.5029953028, - 48.1331849431 - ], - [ - 11.5030154194, - 48.1337656627 - ], - [ - 11.5030181016, - 48.1338367068 - ], - [ - 11.5030274893, - 48.1341303921 - ], - [ - 11.5030288304, - 48.1341773816 - ], - [ - 11.5030328537, - 48.1346414006 - ], - [ - 11.5030368770, - 48.1350396872 - ], - [ - 11.5030422414, - 48.1352703788 - ], - [ - 11.5030422414, - 48.1353494760 - ], - [ - 11.5030422414, - 48.1353910383 - ], - [ - 11.5030449237, - 48.1354379708 - ], - [ - 11.5030489470, - 48.1355184662 - ], - [ - 11.5030516292, - 48.1355519732 - ], - [ - 11.5030502881, - 48.1358041427 - ], - [ - 11.5030610169, - 48.1363794627 - ], - [ - 11.5030623580, - 48.1364317642 - ], - [ - 11.5030851568, - 48.1369212700 - ], - [ - 11.5030945445, - 48.1371908290 - ], - [ - 11.5031025911, - 48.1374348797 - ], - [ - 11.5031160022, - 48.1376011781 - ], - [ - 11.5031253899, - 48.1380679070 - ], - [ - 11.5031347777, - 48.1382596539 - ], - [ - 11.5031508709, - 48.1385748490 - ], - [ - 11.5031709875, - 48.1391354271 - ], - [ - 11.5031937863, - 48.1396302768 - ], - [ - 11.5031964685, - 48.1396892870 - ], - [ - 11.5031978096, - 48.1397509820 - ], - [ - 11.5032125617, - 48.1400943024 - ], - [ - 11.5032206083, - 48.1402780434 - ], - [ - 11.5032273139, - 48.1404268814 - ], - [ - 11.5032286550, - 48.1405207929 - ], - [ - 11.5032340194, - 48.1407755668 - ], - [ - 11.5032340194, - 48.1408386029 - ], - [ - 11.5032514537, - 48.1412811956 - ], - [ - 11.5032541360, - 48.1414380850 - ], - [ - 11.5032581593, - 48.1416057127 - ], - [ - 11.5032554771, - 48.1417063339 - ], - [ - 11.5032541360, - 48.1417787094 - ], - [ - 11.5032581593, - 48.1419798948 - ], - [ - 11.5032581593, - 48.1420000301 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5029979850, - 48.1255782027 - ], - [ - 11.5030771102, - 48.1255674605 - ], - [ - 11.5032045151, - 48.1255553754 - ], - [ - 11.5032876636, - 48.1255460319 - ], - [ - 11.5034767593, - 48.1255285757 - ], - [ - 11.5038415397, - 48.1254789487 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5039407815, - 48.1508875321 - ], - [ - 11.5037610735, - 48.1505656461 - ], - [ - 11.5036873127, - 48.1504208079 - ], - [ - 11.5034593249, - 48.1498723205 - ], - [ - 11.5033453311, - 48.1492889310 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5033453311, - 48.1492889310 - ], - [ - 11.5034593249, - 48.1498723205 - ], - [ - 11.5036873127, - 48.1504208079 - ], - [ - 11.5037610735, - 48.1505656461 - ], - [ - 11.5039407815, - 48.1508875321 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Queuing traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5030851568, - 48.1369212700 - ], - [ - 11.5032179261, - 48.1369038177 - ], - [ - 11.5034003163, - 48.1368796530 - ], - [ - 11.5039783324, - 48.1368032431 - ], - [ - 11.5044262613, - 48.1367428870 - ], - [ - 11.5048728491, - 48.1366838734 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5062340702, - 48.0989371736 - ], - [ - 11.5062380935, - 48.0988432980 - ], - [ - 11.5062327291, - 48.0987842409 - ], - [ - 11.5062112714, - 48.0987373309 - ], - [ - 11.5061670149, - 48.0986890215 - ], - [ - 11.5061160530, - 48.0986407680 - ], - [ - 11.5060932542, - 48.0986179847 - ], - [ - 11.5060717965, - 48.0985991759 - ], - [ - 11.5060650910, - 48.0985777361 - ], - [ - 11.5059913303, - 48.0985804231 - ], - [ - 11.5059323217, - 48.0985804231 - ], - [ - 11.5056211854, - 48.0985790796 - ], - [ - 11.5040225888, - 48.0985616702 - ], - [ - 11.5029805506, - 48.0985562963 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5071272458, - 48.1397308459 - ], - [ - 11.5067611242, - 48.1397482972 - ], - [ - 11.5065049733, - 48.1397617213 - ], - [ - 11.5053060259, - 48.1397670910 - ], - [ - 11.5048634614, - 48.1397697758 - ], - [ - 11.5044718588, - 48.1397711182 - ], - [ - 11.5043605472, - 48.1397724606 - ], - [ - 11.5041687692, - 48.1397724606 - ], - [ - 11.5039568747, - 48.1397738030 - ], - [ - 11.5036578084, - 48.1397751454 - ], - [ - 11.5033574010, - 48.1397684334 - ], - [ - 11.5031978096, - 48.1397509820 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5080780889, - 48.1528737187 - ], - [ - 11.5085675920, - 48.1523989601 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5086708571, - 48.1060624293 - ], - [ - 11.5083100999, - 48.1059431001 - ], - [ - 11.5076516176, - 48.1056426490 - ], - [ - 11.5068134273, - 48.1052765418 - ], - [ - 11.5065049733, - 48.1051357177 - ], - [ - 11.5063936616, - 48.1050820970 - ], - [ - 11.5061911548, - 48.1049855460 - ], - [ - 11.5059376861, - 48.1048634717 - ], - [ - 11.5055621768, - 48.1046838020 - ], - [ - 11.5052885915, - 48.1045537229 - ], - [ - 11.5050619448, - 48.1044370209 - ], - [ - 11.5049291755, - 48.1043713095 - ], - [ - 11.5048098172, - 48.1043096279 - ], - [ - 11.5046046282, - 48.1041915820 - ], - [ - 11.5045429374, - 48.1041526811 - ], - [ - 11.5044852699, - 48.1041151795 - ], - [ - 11.5044262613, - 48.1040695618 - ], - [ - 11.5043565239, - 48.1040065366 - ], - [ - 11.5043028797, - 48.1039528587 - ], - [ - 11.5042210723, - 48.1038643657 - ], - [ - 11.5041231717, - 48.1037610956 - ], - [ - 11.5040842796, - 48.1037128469 - ], - [ - 11.5040427054, - 48.1036498212 - ], - [ - 11.5039877201, - 48.1035626151 - ], - [ - 11.5039112772, - 48.1034258164 - ], - [ - 11.5038656796, - 48.1033306056 - ], - [ - 11.5037771667, - 48.1031254065 - ], - [ - 11.5037060882, - 48.1029390139 - ], - [ - 11.5036792661, - 48.1028424588 - ], - [ - 11.5036551262, - 48.1027164053 - ], - [ - 11.5036336685, - 48.1025634837 - ], - [ - 11.5036175753, - 48.1023918103 - ], - [ - 11.5036068464, - 48.1022201923 - ], - [ - 11.5036095286, - 48.1020418007 - ], - [ - 11.5036229397, - 48.1018916200 - ], - [ - 11.5036470796, - 48.1017091971 - ], - [ - 11.5036739017, - 48.1015657324 - ], - [ - 11.5037007238, - 48.1014597709 - ], - [ - 11.5037436391, - 48.1013310271 - ], - [ - 11.5037583912, - 48.1012974977 - ], - [ - 11.5037785078, - 48.1012559078 - ], - [ - 11.5038388575, - 48.1011003510 - ], - [ - 11.5039206649, - 48.1009434504 - ], - [ - 11.5040091778, - 48.1007865493 - ], - [ - 11.5041164662, - 48.1006470564 - ], - [ - 11.5041835214, - 48.1005773098 - ], - [ - 11.5042680110, - 48.1004780634 - ], - [ - 11.5044664944, - 48.1002782827 - ], - [ - 11.5048741902, - 48.0999148242 - ], - [ - 11.5050243939, - 48.0998007986 - ], - [ - 11.5052577461, - 48.0996237981 - ], - [ - 11.5058062578, - 48.0992214863 - ], - [ - 11.5059537793, - 48.0991182069 - ], - [ - 11.5061240996, - 48.0990095534 - ], - [ - 11.5062340702, - 48.0989371736 - ], - [ - 11.5066967512, - 48.0986970824 - ], - [ - 11.5069113279, - 48.0986259897 - ], - [ - 11.5069435145, - 48.0986152978 - ], - [ - 11.5070508028, - 48.0985790796 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5092971529, - 48.1516854719 - ], - [ - 11.5085675920, - 48.1523989601 - ], - [ - 11.5080780889, - 48.1528737187 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5080780889, - 48.1528737187 - ], - [ - 11.5085582043, - 48.1531164087 - ], - [ - 11.5085944141, - 48.1531338555 - ], - [ - 11.5086373294, - 48.1531647229 - ], - [ - 11.5088237430, - 48.1533564693 - ], - [ - 11.5093293394, - 48.1539157118 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5093722547, - 48.1351550331 - ], - [ - 11.5093400682, - 48.1346990181 - ], - [ - 11.5093360449, - 48.1346279752 - ], - [ - 11.5093145872, - 48.1343624303 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - }, - { - "description": "New roadworks layout" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5089028681, - 48.0979822880 - ], - [ - 11.5090342964, - 48.0979541304 - ], - [ - 11.5092515553, - 48.0979098508 - ], - [ - 11.5095425750, - 48.0978589095 - ], - [ - 11.5095734204, - 48.0978535355 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5096485222, - 48.1823538254 - ], - [ - 11.5093963946, - 48.1824906374 - ], - [ - 11.5090222264, - 48.1826945135 - ], - [ - 11.5089296902, - 48.1827360934 - ], - [ - 11.5088344718, - 48.1827789587 - ], - [ - 11.5086480583, - 48.1828634596 - ], - [ - 11.5085474754, - 48.1828983329 - ], - [ - 11.5085206534, - 48.1829077219 - ], - [ - 11.5084589625, - 48.1829318650 - ], - [ - 11.5080941821, - 48.1830659929 - ], - [ - 11.5079681183, - 48.1831129376 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5100508536, - 48.1544642678 - ], - [ - 11.5099905039, - 48.1544508475 - ], - [ - 11.5098979677, - 48.1544334012 - ], - [ - 11.5098242069, - 48.1544038766 - ], - [ - 11.5097598339, - 48.1543730659 - ], - [ - 11.5096726621, - 48.1543180427 - ], - [ - 11.5095465983, - 48.1542242123 - ], - [ - 11.5095077063, - 48.1541195896 - ], - [ - 11.5094138290, - 48.1540109406 - ], - [ - 11.5093293394, - 48.1539157118 - ], - [ - 11.5088237430, - 48.1533564693 - ], - [ - 11.5086373294, - 48.1531647229 - ], - [ - 11.5085944141, - 48.1531338555 - ], - [ - 11.5085582043, - 48.1531164087 - ], - [ - 11.5080780889, - 48.1528737187 - ], - [ - 11.5077629293, - 48.1527623829 - ], - [ - 11.5074893440, - 48.1526752042 - ], - [ - 11.5068818236, - 48.1524927938 - ], - [ - 11.5054428185, - 48.1521347374 - ], - [ - 11.5048889423, - 48.1519966141 - ], - [ - 11.5047776307, - 48.1519483548 - ], - [ - 11.5046837534, - 48.1519054078 - ], - [ - 11.5046019460, - 48.1518517800 - ], - [ - 11.5045415963, - 48.1518021784 - ], - [ - 11.5045000220, - 48.1517538629 - ], - [ - 11.5044477190, - 48.1517029192 - ], - [ - 11.5042760576, - 48.1514454034 - ], - [ - 11.5042492355, - 48.1514038541 - ], - [ - 11.5041473116, - 48.1512294918 - ], - [ - 11.5040762330, - 48.1511168663 - ], - [ - 11.5040534342, - 48.1510792871 - ], - [ - 11.5039823557, - 48.1509559242 - ], - [ - 11.5039407815, - 48.1508875321 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5079681183, - 48.1831129376 - ], - [ - 11.5080941821, - 48.1830659929 - ], - [ - 11.5084589625, - 48.1829318650 - ], - [ - 11.5085206534, - 48.1829077219 - ], - [ - 11.5085474754, - 48.1828983329 - ], - [ - 11.5086480583, - 48.1828634596 - ], - [ - 11.5088344718, - 48.1827789587 - ], - [ - 11.5089296902, - 48.1827360934 - ], - [ - 11.5090222264, - 48.1826945135 - ], - [ - 11.5093963946, - 48.1824906374 - ], - [ - 11.5096485222, - 48.1823538254 - ], - [ - 11.5096793677, - 48.1823351031 - ], - [ - 11.5097263063, - 48.1823082772 - ], - [ - 11.5100320781, - 48.1821365908 - ], - [ - 11.5100763346, - 48.1821111061 - ], - [ - 11.5101286377, - 48.1820789148 - ], - [ - 11.5102667714, - 48.1819957539 - ], - [ - 11.5106744672, - 48.1817503503 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5175275112, - 48.0548027490 - ], - [ - 11.5173263456, - 48.0548456651 - ], - [ - 11.5169387664, - 48.0549033161 - ], - [ - 11.5164814497, - 48.0549355311 - ], - [ - 11.5159369613, - 48.0549395090 - ], - [ - 11.5155145134, - 48.0549046607 - ], - [ - 11.5151068176, - 48.0548496990 - ], - [ - 11.5143276359, - 48.0547128828 - ], - [ - 11.5132413412, - 48.0545761223 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5178225542, - 48.0945624563 - ], - [ - 11.5174550916, - 48.0945584256 - ], - [ - 11.5172968413, - 48.0945557384 - ], - [ - 11.5169655884, - 48.0945531072 - ], - [ - 11.5166598166, - 48.0945504200 - ], - [ - 11.5165699626, - 48.0945504200 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5175275112, - 48.0548027490 - ], - [ - 11.5177635456, - 48.0547370302 - ], - [ - 11.5181444193, - 48.0546096261 - ], - [ - 11.5183724071, - 48.0545398731 - ], - [ - 11.5186164881, - 48.0544795324 - ], - [ - 11.5187599863, - 48.0544513510 - ], - [ - 11.5189101900, - 48.0544245703 - ], - [ - 11.5200849975, - 48.0543172791 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5206911768, - 48.1243068528 - ], - [ - 11.5209647621, - 48.1244905383 - ], - [ - 11.5210264529, - 48.1245079949 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5202848221, - 48.0763878358 - ], - [ - 11.5202982331, - 48.0763878358 - ], - [ - 11.5204672123, - 48.0763838036 - ], - [ - 11.5207609142, - 48.0763757392 - ], - [ - 11.5208521093, - 48.0763730510 - ], - [ - 11.5218472089, - 48.0763422495 - ], - [ - 11.5221905316, - 48.0763328410 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5221905316, - 48.0763328410 - ], - [ - 11.5218472089, - 48.0763422495 - ], - [ - 11.5208547915, - 48.0763730510 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5210344995, - 48.1952029514 - ], - [ - 11.5219625438, - 48.1950836058 - ], - [ - 11.5229831244, - 48.1959298584 - ], - [ - 11.5235544349, - 48.1963603545 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5235544349, - 48.1963603545 - ], - [ - 11.5229831244, - 48.1959298584 - ], - [ - 11.5219625438, - 48.1950836058 - ], - [ - 11.5210344995, - 48.1952029514 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5209003891, - 48.0786194423 - ], - [ - 11.5212732161, - 48.0790123393 - ], - [ - 11.5221422518, - 48.0797687248 - ], - [ - 11.5225110556, - 48.0800074484 - ], - [ - 11.5233546103, - 48.0804325899 - ], - [ - 11.5235745515, - 48.0805425706 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5243523921, - 48.1779751441 - ], - [ - 11.5227470900, - 48.1780998952 - ], - [ - 11.5213805045, - 48.1781414229 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Slow traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5336784328, - 48.1551535613 - ], - [ - 11.5332412327, - 48.1550355763 - ], - [ - 11.5330668892, - 48.1549886058 - ], - [ - 11.5328563358, - 48.1549269292 - ], - [ - 11.5326873566, - 48.1548893528 - ], - [ - 11.5319162215, - 48.1547163444 - ], - [ - 11.5314213539, - 48.1546184887 - ], - [ - 11.5306703354, - 48.1544709220 - ], - [ - 11.5299246813, - 48.1543006522 - ], - [ - 11.5295585598, - 48.1542242123 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5363096799, - 48.1536193437 - ], - [ - 11.5365135277, - 48.1536743117 - ], - [ - 11.5365416909, - 48.1536622892 - ], - [ - 11.5365658308, - 48.1536542369 - ], - [ - 11.5367374922, - 48.1536072652 - ], - [ - 11.5368783082, - 48.1535643756 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5368984247, - 48.1999383890 - ], - [ - 11.5366395916, - 48.2007081908 - ], - [ - 11.5362117792, - 48.2019245758 - ], - [ - 11.5361500884, - 48.2020935702 - ], - [ - 11.5361111964, - 48.2022732903 - ], - [ - 11.5360870565, - 48.2026071980 - ], - [ - 11.5360655988, - 48.2028083684 - ], - [ - 11.5360763277, - 48.2029277519 - ], - [ - 11.5361058320, - 48.2029947897 - ], - [ - 11.5361567939, - 48.2030725535 - ], - [ - 11.5362184848, - 48.2031342841 - ], - [ - 11.5362935866, - 48.2031879141 - ], - [ - 11.5366650726, - 48.2034507565 - ], - [ - 11.5366932358, - 48.2035137715 - ], - [ - 11.5367160345, - 48.2035929311 - ], - [ - 11.5367160345, - 48.2037578978 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5402726437, - 48.1262071800 - ], - [ - 11.5401197578, - 48.1264861387 - ], - [ - 11.5400795246, - 48.1265665922 - ], - [ - 11.5400325860, - 48.1266497310 - ], - [ - 11.5399977173, - 48.1267141272 - ], - [ - 11.5399789418, - 48.1267476400 - ], - [ - 11.5398448313, - 48.1269756274 - ], - [ - 11.5395886804, - 48.1273242923 - ], - [ - 11.5394948031, - 48.1274450265 - ], - [ - 11.5392078067, - 48.1277977163 - ], - [ - 11.5390441920, - 48.1279975579 - ], - [ - 11.5390280987, - 48.1280176427 - ], - [ - 11.5389892067, - 48.1280605537 - ], - [ - 11.5389704312, - 48.1280887508 - ], - [ - 11.5389650668, - 48.1280954643 - ], - [ - 11.5388846005, - 48.1281960560 - ], - [ - 11.5388296152, - 48.1282818777 - ], - [ - 11.5387920643, - 48.1283529294 - ], - [ - 11.5387692655, - 48.1284306946 - ], - [ - 11.5387746299, - 48.1285460553 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5407594646, - 48.1617223255 - ], - [ - 11.5417424942, - 48.1624545714 - ], - [ - 11.5420268084, - 48.1626731194 - ], - [ - 11.5420496072, - 48.1626905629 - ], - [ - 11.5420871581, - 48.1627187410 - ], - [ - 11.5421233679, - 48.1627549698 - ], - [ - 11.5421743299, - 48.1628126117 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5484600867, - 48.1241499111 - ], - [ - 11.5486330892, - 48.1242370824 - ], - [ - 11.5487269665, - 48.1242893962 - ], - [ - 11.5488543714, - 48.1243913382 - ], - [ - 11.5489039923, - 48.1244315666 - ], - [ - 11.5489603187, - 48.1244744806 - ], - [ - 11.5490260328, - 48.1245147089 - ], - [ - 11.5490971113, - 48.1245817374 - ], - [ - 11.5491735543, - 48.1247038208 - ], - [ - 11.5493908132, - 48.1248848193 - ], - [ - 11.5496590341, - 48.1250766155 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5523372198, - 48.2078335178 - ], - [ - 11.5526201929, - 48.2082841349 - ], - [ - 11.5527140702, - 48.2085563354 - ], - [ - 11.5527677144, - 48.2087629007 - ], - [ - 11.5527771021, - 48.2087977565 - ], - [ - 11.5527918543, - 48.2089171260 - ], - [ - 11.5528857316, - 48.2096453465 - ], - [ - 11.5528937782, - 48.2097029915 - ], - [ - 11.5529098715, - 48.2098250400 - ], - [ - 11.5529420580, - 48.2100785203 - ], - [ - 11.5529755856, - 48.2103346803 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5534691120, - 48.1500372364 - ], - [ - 11.5534892286, - 48.1500855535 - ], - [ - 11.5536260213, - 48.1502585216 - ], - [ - 11.5538499857, - 48.1505267803 - ], - [ - 11.5540162827, - 48.1507359842 - ], - [ - 11.5542053784, - 48.1509693454 - ], - [ - 11.5544052030, - 48.1512160707 - ], - [ - 11.5545822288, - 48.1514319824 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5602054800, - 48.1392427093 - ], - [ - 11.5600338186, - 48.1376078904 - ], - [ - 11.5600190665, - 48.1373973464 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5609283353, - 48.1363325311 - ], - [ - 11.5609176065, - 48.1362198729 - ], - [ - 11.5608921255, - 48.1359234585 - ], - [ - 11.5606815721, - 48.1342363422 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5661546196, - 48.1378828157 - ], - [ - 11.5659574772, - 48.1366905859 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Slow traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5623016263, - 48.1417666841 - ], - [ - 11.5623619760, - 48.1417465487 - ], - [ - 11.5625094975, - 48.1416955950 - ], - [ - 11.5630928780, - 48.1415212557 - ], - [ - 11.5638868119, - 48.1412798533 - ], - [ - 11.5645251776, - 48.1410853769 - ], - [ - 11.5650173630, - 48.1409419103 - ], - [ - 11.5654921140, - 48.1408037569 - ], - [ - 11.5658045913, - 48.1407125307 - ], - [ - 11.5659454073, - 48.1406615759 - ], - [ - 11.5660218502, - 48.1405771173 - ], - [ - 11.5660889055, - 48.1405623511 - ], - [ - 11.5663490797, - 48.1405060266 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Queuing traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5600096787, - 48.1302371628 - ], - [ - 11.5623713638, - 48.1313369011 - ], - [ - 11.5631250645, - 48.1316896201 - ], - [ - 11.5632189418, - 48.1317352133 - ], - [ - 11.5637044216, - 48.1319658638 - ], - [ - 11.5650884415, - 48.1326860594 - ], - [ - 11.5655940379, - 48.1329059649 - ], - [ - 11.5656449999, - 48.1329287889 - ], - [ - 11.5658354367, - 48.1330159452 - ], - [ - 11.5659252907, - 48.1330575095 - ], - [ - 11.5660070981, - 48.1330937593 - ], - [ - 11.5662417914, - 48.1331849431 - ], - [ - 11.5663906540, - 48.1332385904 - ], - [ - 11.5665381755, - 48.1332922377 - ], - [ - 11.5666615571, - 48.1333324591 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5690406765, - 48.1361648862 - ], - [ - 11.5684103574, - 48.1362882286 - ], - [ - 11.5682735647, - 48.1363056811 - ], - [ - 11.5677880849, - 48.1363982017 - ], - [ - 11.5671389903, - 48.1365189146 - ], - [ - 11.5670477952, - 48.1365323395 - ], - [ - 11.5668519939, - 48.1365511344 - ], - [ - 11.5667540933, - 48.1365497919 - ], - [ - 11.5666897203, - 48.1365538194 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5701309944, - 48.1148077997 - ], - [ - 11.5701041724, - 48.1140085032 - ], - [ - 11.5701403822, - 48.1130522747 - ], - [ - 11.5701055135, - 48.1127612669 - ], - [ - 11.5700558926, - 48.1125118384 - ], - [ - 11.5700102950, - 48.1123870957 - ], - [ - 11.5699298288, - 48.1121644721 - ], - [ - 11.5699123944, - 48.1121309498 - ], - [ - 11.5698332692, - 48.1120102356 - ], - [ - 11.5697890128, - 48.1119351318 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5693544949, - 48.1374831527 - ], - [ - 11.5698922778, - 48.1373611556 - ], - [ - 11.5700532104, - 48.1373289363 - ], - [ - 11.5700800325, - 48.1373249088 - ], - [ - 11.5701081957, - 48.1373235664 - ], - [ - 11.5701524521, - 48.1373249088 - ], - [ - 11.5702020730, - 48.1373329637 - ], - [ - 11.5702436472, - 48.1373517583 - ], - [ - 11.5702718104, - 48.1373692105 - ], - [ - 11.5703415479, - 48.1374107712 - ], - [ - 11.5703804399, - 48.1374295098 - ], - [ - 11.5704367663, - 48.1374402496 - ], - [ - 11.5705038215, - 48.1374362222 - ], - [ - 11.5706111099, - 48.1374295098 - ], - [ - 11.5708069111, - 48.1374121136 - ], - [ - 11.5710872020, - 48.1373825793 - ], - [ - 11.5711193885, - 48.1373798943 - ], - [ - 11.5711341406, - 48.1373785518 - ], - [ - 11.5711971725, - 48.1373678680 - ], - [ - 11.5712454523, - 48.1373598131 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5710724498, - 48.2720428888 - ], - [ - 11.5718167628, - 48.2718149324 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Queuing traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5726388599, - 48.1329261037 - ], - [ - 11.5724430586, - 48.1328107528 - ], - [ - 11.5718127395, - 48.1324325879 - ], - [ - 11.5716705824, - 48.1323427454 - ], - [ - 11.5715539063, - 48.1322649302 - ], - [ - 11.5713835861, - 48.1321683744 - ], - [ - 11.5711327995, - 48.1320248828 - ], - [ - 11.5710094179, - 48.1319604933 - ], - [ - 11.5708900596, - 48.1319095299 - ], - [ - 11.5708015467, - 48.1318827335 - ], - [ - 11.5707599725, - 48.1318746778 - ], - [ - 11.5707090105, - 48.1318652795 - ], - [ - 11.5706486608, - 48.1318545385 - ], - [ - 11.5705976988, - 48.1318505666 - ], - [ - 11.5705628301, - 48.1318438535 - ], - [ - 11.5703965331, - 48.1318425109 - ], - [ - 11.5702610816, - 48.1318357978 - ], - [ - 11.5702141429, - 48.1318384831 - ], - [ - 11.5701189245, - 48.1318425109 - ], - [ - 11.5700505282, - 48.1318545385 - ], - [ - 11.5693813170, - 48.1320704757 - ], - [ - 11.5691372360, - 48.1321643465 - ], - [ - 11.5690795685, - 48.1321858283 - ], - [ - 11.5689736213, - 48.1322273932 - ], - [ - 11.5689052249, - 48.1322582172 - ], - [ - 11.5688488985, - 48.1322850693 - ], - [ - 11.5688260998, - 48.1323414028 - ], - [ - 11.5687992777, - 48.1323668563 - ], - [ - 11.5686061586, - 48.1325304859 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5730747188, - 48.1298589790 - ], - [ - 11.5725114549, - 48.1295076460 - ], - [ - 11.5717751886, - 48.1290462660 - ], - [ - 11.5709209050, - 48.1285125437 - ], - [ - 11.5707036461, - 48.1283757554 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5727515127, - 48.1362480095 - ], - [ - 11.5729339029, - 48.1361112419 - ], - [ - 11.5731444563, - 48.1359958981 - ], - [ - 11.5732571091, - 48.1358859241 - ], - [ - 11.5733469631, - 48.1358242245 - ], - [ - 11.5733737851, - 48.1358041427 - ], - [ - 11.5734555925, - 48.1357571547 - ], - [ - 11.5735615398, - 48.1356794007 - ], - [ - 11.5736312772, - 48.1356338110 - ], - [ - 11.5736902858, - 48.1355948779 - ], - [ - 11.5738109852, - 48.1355198087 - ], - [ - 11.5739853288, - 48.1354473684 - ], - [ - 11.5741315092, - 48.1354017785 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5718395616, - 48.1414836695 - ], - [ - 11.5721989776, - 48.1414139783 - ], - [ - 11.5727059151, - 48.1412959617 - ], - [ - 11.5732544268, - 48.1411618364 - ], - [ - 11.5745271350, - 48.1408077840 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5745271350, - 48.1408077840 - ], - [ - 11.5732544268, - 48.1411618364 - ], - [ - 11.5727059151, - 48.1412959617 - ], - [ - 11.5721989776, - 48.1414139783 - ], - [ - 11.5718395616, - 48.1414836695 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5737962331, - 48.1341116523 - ], - [ - 11.5739397312, - 48.1342001491 - ], - [ - 11.5741945411, - 48.1343624303 - ], - [ - 11.5742723252, - 48.1344160764 - ], - [ - 11.5743192638, - 48.1344455566 - ], - [ - 11.5743782724, - 48.1344885181 - ], - [ - 11.5745217706, - 48.1345823846 - ], - [ - 11.5745646859, - 48.1346158923 - ], - [ - 11.5746008958, - 48.1346427432 - ], - [ - 11.5746987964, - 48.1347339242 - ], - [ - 11.5747443940, - 48.1347821998 - ], - [ - 11.5748127903, - 48.1348559276 - ], - [ - 11.5748758222, - 48.1349511918 - ], - [ - 11.5749187375, - 48.1350115499 - ], - [ - 11.5749589707, - 48.1350812498 - ], - [ - 11.5749898161, - 48.1351483205 - ], - [ - 11.5750126149, - 48.1352046508 - ], - [ - 11.5750421192, - 48.1352944883 - ], - [ - 11.5749160553, - 48.1352985159 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5746143068, - 48.1481972390 - ], - [ - 11.5747940148, - 48.1481422651 - ], - [ - 11.5749589707, - 48.1480966865 - ], - [ - 11.5759768690, - 48.1478110224 - ], - [ - 11.5766916777, - 48.1476112020 - ], - [ - 11.5769531931, - 48.1475307255 - ], - [ - 11.5771235133, - 48.1474811197 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5804266537, - 48.2705851443 - ], - [ - 11.5794583763, - 48.2706172799 - ], - [ - 11.5782849099, - 48.2706589000 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5834790076, - 48.1894174435 - ], - [ - 11.5821030344, - 48.1894013502 - ], - [ - 11.5820467080, - 48.1894281724 - ], - [ - 11.5819984282, - 48.1896427498 - ], - [ - 11.5819823350, - 48.1897916123 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5819823350, - 48.1897916123 - ], - [ - 11.5819984282, - 48.1896427498 - ], - [ - 11.5820467080, - 48.1894281724 - ], - [ - 11.5821030344, - 48.1894013502 - ], - [ - 11.5834790076, - 48.1894174435 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5835044886, - 48.1265330792 - ], - [ - 11.5836372579, - 48.1266108471 - ], - [ - 11.5841468777, - 48.1271539884 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5837820972, - 48.1688234457 - ], - [ - 11.5846497918, - 48.1686718949 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5851111318, - 48.1325371989 - ], - [ - 11.5849287416, - 48.1323775972 - ], - [ - 11.5848429109, - 48.1322796989 - ], - [ - 11.5846538152, - 48.1321160685 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5846538152, - 48.1321160685 - ], - [ - 11.5848429109, - 48.1322796989 - ], - [ - 11.5849287416, - 48.1323775972 - ], - [ - 11.5851111318, - 48.1325371989 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5851687993, - 48.1426397128 - ], - [ - 11.5851352717, - 48.1425780212 - ], - [ - 11.5850910152, - 48.1424855118 - ], - [ - 11.5847919489, - 48.1416794867 - ], - [ - 11.5847825612, - 48.1416231634 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5903065707, - 48.1387223495 - ], - [ - 11.5901255215, - 48.1388175506 - ], - [ - 11.5899592246, - 48.1389020680 - ], - [ - 11.5891384686, - 48.1393151442 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5907665695, - 48.1393070896 - ], - [ - 11.5906633045, - 48.1391233452 - ], - [ - 11.5905922259, - 48.1390294871 - ], - [ - 11.5905278529, - 48.1389516821 - ], - [ - 11.5904044713, - 48.1388282901 - ], - [ - 11.5903065707, - 48.1387223495 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - }, - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.5918166543, - 48.1417277557 - ], - [ - 11.5917402114, - 48.1415923450 - ], - [ - 11.5913217868, - 48.1408962694 - ], - [ - 11.5912654604, - 48.1407863059 - ], - [ - 11.5912399794, - 48.1406991627 - ], - [ - 11.5911219622, - 48.1402807282 - ], - [ - 11.5910777058, - 48.1401211505 - ], - [ - 11.5910455192, - 48.1400071581 - ], - [ - 11.5909905340, - 48.1398019377 - ], - [ - 11.5909301843, - 48.1396289344 - ], - [ - 11.5907665695, - 48.1393070896 - ], - [ - 11.5906633045, - 48.1391233452 - ], - [ - 11.5905922259, - 48.1390294871 - ], - [ - 11.5905278529, - 48.1389516821 - ], - [ - 11.5904044713, - 48.1388282901 - ], - [ - 11.5903065707, - 48.1387223495 - ], - [ - 11.5902462210, - 48.1386633381 - ], - [ - 11.5899659301, - 48.1383897595 - ], - [ - 11.5899082626, - 48.1383334327 - ], - [ - 11.5897419657, - 48.1381711640 - ], - [ - 11.5895220245, - 48.1379633073 - ], - [ - 11.5894241239, - 48.1378707336 - ], - [ - 11.5893637742, - 48.1377983525 - ], - [ - 11.5893396343, - 48.1377500798 - ], - [ - 11.5892967190, - 48.1376548208 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6014618780, - 48.1271687585 - ], - [ - 11.6001824643, - 48.1280444971 - ], - [ - 11.6001408900, - 48.1280806945 - ], - [ - 11.6001167501, - 48.1281276336 - ], - [ - 11.6001127268, - 48.1281866570 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6016549970, - 48.1500842114 - ], - [ - 11.6018065418, - 48.1501029454 - ], - [ - 11.6019661332, - 48.1501150247 - ], - [ - 11.6021310891, - 48.1501351568 - ], - [ - 11.6021994854, - 48.1501539467 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6045745815, - 48.0917421235 - ], - [ - 11.6047502662, - 48.0895882943 - ], - [ - 11.6049085165, - 48.0889110540 - ], - [ - 11.6050654258, - 48.0884913016 - ], - [ - 11.6050721313, - 48.0884738328 - ], - [ - 11.6052008773, - 48.0881640413 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6068262960, - 48.0710461810 - ], - [ - 11.6069550420, - 48.0710797301 - ], - [ - 11.6071347500, - 48.0711065582 - ], - [ - 11.6071696187, - 48.0711105908 - ], - [ - 11.6076430286, - 48.0711038698 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6076430286, - 48.0711038698 - ], - [ - 11.6071696187, - 48.0711105908 - ], - [ - 11.6071347500, - 48.0711065582 - ], - [ - 11.6069550420, - 48.0710797301 - ], - [ - 11.6068262960, - 48.0710461810 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6122161950, - 48.0623692697 - ], - [ - 11.6123489643, - 48.0623625476 - ], - [ - 11.6135908271, - 48.0622995272 - ], - [ - 11.6143579389, - 48.0622593062 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Queuing traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6177938486, - 48.1516251333 - ], - [ - 11.6177992131, - 48.1519174867 - ], - [ - 11.6178072597, - 48.1521588950 - ], - [ - 11.6178072597, - 48.1522017858 - ], - [ - 11.6178018953, - 48.1522353379 - ], - [ - 11.6177925075, - 48.1522674920 - ], - [ - 11.6177858020, - 48.1523090966 - ], - [ - 11.6177871431, - 48.1524619819 - ], - [ - 11.6177884842, - 48.1525075566 - ], - [ - 11.6177898253, - 48.1525558714 - ], - [ - 11.6177911664, - 48.1526094985 - ], - [ - 11.6177911664, - 48.1528146677 - ], - [ - 11.6177911664, - 48.1532170073 - ], - [ - 11.6177925075, - 48.1532653213 - ], - [ - 11.6178126241, - 48.1534839085 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6412967051, - 48.1932328755 - ], - [ - 11.6414093579, - 48.1934059216 - ], - [ - 11.6415193285, - 48.1935815932 - ], - [ - 11.6415528561, - 48.1936620533 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6643462683, - 48.1334209574 - ], - [ - 11.6644374634, - 48.1332412756 - ], - [ - 11.6645876671, - 48.1330964445 - ], - [ - 11.6647445764, - 48.1329985476 - ], - [ - 11.6649323310, - 48.1329099927 - ], - [ - 11.6670418884, - 48.1322166523 - ], - [ - 11.6679082419, - 48.1318975023 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.6850341465, - 48.0710167205 - ], - [ - 11.6852433588, - 48.0710676323 - ], - [ - 11.6853077318, - 48.0710864512 - ], - [ - 11.6855008508, - 48.0711481165 - ], - [ - 11.6855920459, - 48.0711789772 - ], - [ - 11.6857020165, - 48.0712138145 - ], - [ - 11.6859380509, - 48.0712715031 - ], - [ - 11.6864342596, - 48.0714270941 - ], - [ - 11.6868151332, - 48.0715464474 - ], - [ - 11.6877445187, - 48.0717851531 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 6, - "events": [ - { - "description": "Stationary traffic" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.7324851062, - 48.1093065996 - ], - [ - 11.7320023085, - 48.1082806033 - ], - [ - 11.7319473232, - 48.1081505334 - ], - [ - 11.7315476741, - 48.1073512453 - ], - [ - 11.7314739134, - 48.1072023673 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.7541493084, - 48.1697903751 - ], - [ - 11.7542458679, - 48.1695503355 - ], - [ - 11.7544966544, - 48.1691775283 - ], - [ - 11.7546468581, - 48.1689240134 - ], - [ - 11.7546656336, - 48.1688905281 - ], - [ - 11.7547031845, - 48.1688086875 - ], - [ - 11.7548413183, - 48.1684988771 - ], - [ - 11.7549794521, - 48.1681274039 - ], - [ - 11.7549955453, - 48.1680483013 - ], - [ - 11.7550116386, - 48.1679718260 - ], - [ - 11.7550223674, - 48.1679208984 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 8, - "events": [ - { - "description": "Closed" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.7550223674, - 48.1679208984 - ], - [ - 11.7550116386, - 48.1679718260 - ], - [ - 11.7549955453, - 48.1680483013 - ], - [ - 11.7549794521, - 48.1681274039 - ], - [ - 11.7548413183, - 48.1684988771 - ], - [ - 11.7547031845, - 48.1688086875 - ], - [ - 11.7546656336, - 48.1688905281 - ], - [ - 11.7546468581, - 48.1689240134 - ], - [ - 11.7544966544, - 48.1691775283 - ], - [ - 11.7542458679, - 48.1695503355 - ], - [ - 11.7541493084, - 48.1697903751 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "iconCategory": 9, - "events": [ - { - "description": "Roadworks" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - 11.7475939895, - 48.0938744767 - ], - [ - 11.7476757969, - 48.0939965211 - ], - [ - 11.7477321233, - 48.0940836875 - ], - [ - 11.7477669920, - 48.0941346325 - ], - [ - 11.7481451835, - 48.0947086277 - ], - [ - 11.7484670486, - 48.0952129187 - ], - [ - 11.7488278057, - 48.0957815277 - ], - [ - 11.7490624990, - 48.0961516771 - ], - [ - 11.7493293788, - 48.0965982378 - ], - [ - 11.7495707776, - 48.0969925649 - ], - [ - 11.7498550917, - 48.0974633015 - ], - [ - 11.7500575985, - 48.0978092558 - ], - [ - 11.7500777151, - 48.0978441310 - ], - [ - 11.7503472771, - 48.0983001374 - ], - [ - 11.7505511250, - 48.0986595208 - ], - [ - 11.7507281508, - 48.0989707046 - ], - [ - 11.7508045937, - 48.0991074591 - ], - [ - 11.7511036600, - 48.0996452374 - ], - [ - 11.7512417938, - 48.0998839808 - ], - [ - 11.7524782922, - 48.1022040716 - ], - [ - 11.7526459302, - 48.1025152339 - ], - [ - 11.7526834811, - 48.1026104461 - ], - [ - 11.7530348505, - 48.1033051377 - ], - [ - 11.7530817892, - 48.1034070653 - ], - [ - 11.7532051708, - 48.1036726023 - ], - [ - 11.7534237708, - 48.1041366170 - ], - [ - 11.7535055782, - 48.1043136579 - ], - [ - 11.7538408543, - 48.1050740371 - ], - [ - 11.7540111746, - 48.1054763591 - ], - [ - 11.7541788127, - 48.1058747039 - ], - [ - 11.7542928066, - 48.1061496312 - ], - [ - 11.7543853428, - 48.1063722249 - ], - [ - 11.7544537391, - 48.1065344821 - ], - [ - 11.7546763624, - 48.1070857273 - ], - [ - 11.7547031845, - 48.1071554651 - ], - [ - 11.7547621931, - 48.1072949404 - ], - [ - 11.7548560704, - 48.1075269319 - ], - [ - 11.7550129797, - 48.1079145149 - ], - [ - 11.7552168276, - 48.1083986398 - ], - [ - 11.7552758362, - 48.1085502008 - ], - [ - 11.7553026582, - 48.1086132204 - ], - [ - 11.7554595675, - 48.1090544679 - ], - [ - 11.7556097712, - 48.1095037148 - ], - [ - 11.7558095958, - 48.1100777064 - ], - [ - 11.7558471467, - 48.1101836501 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ba900ac..f546c43 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,33 +13,34 @@ junitVersion = "1.3.0" espressoCore = "3.7.0" kotlinxSerializationJson = "1.10.0" lifecycleRuntimeKtx = "2.10.0" -composeBom = "2026.01.01" +composeBom = "2026.02.00" appcompat = "1.7.1" material = "1.13.0" carApp = "1.7.0" androidx-car = "1.7.0" -objectboxKotlin = "5.1.0" -objectboxProcessor = "5.0.1" +objectboxKotlin = "5.2.0" +objectboxProcessor = "5.2.0" ui = "1.10.0" material3 = "1.4.0" -runtimeLivedata = "1.10.2" -foundation = "1.10.0" +runtimeLivedata = "1.10.3" +foundation = "1.10.3" maplibre-composeMaterial3 = "0.12.2" maplibre-compose = "0.12.1" playServicesLocation = "21.3.0" -runtime = "1.10.2" +runtime = "1.10.3" accompanist = "0.37.3" -uiVersion = "1.10.2" -uiText = "1.10.2" +uiVersion = "1.10.3" +uiText = "1.10.3" navigationCompose = "2.9.7" -uiToolingPreview = "1.10.2" -uiTooling = "1.10.2" +uiToolingPreview = "1.10.3" +uiTooling = "1.10.3" material3WindowSizeClass = "1.4.0" -uiGraphics = "1.10.2" +uiGraphics = "1.10.3" window = "1.5.1" -foundationLayout = "1.10.2" -foundationLayoutVersion = "1.10.2" - +foundationLayout = "1.10.3" +foundationLayoutVersion = "1.10.3" +datastorePreferences = "1.2.0" +datastoreCore = "1.2.0" [libraries] android-sdk-turf = { module = "org.maplibre.gl:android-sdk-turf", version.ref = "androidSdkTurf" } @@ -81,6 +82,8 @@ androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graph androidx-window = { group = "androidx.window", name = "window", version.ref = "window" } androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "foundationLayout" } androidx-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "foundationLayoutVersion" } +androidx-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "datastorePreferences" } +androidx-datastore-core = { group = "androidx.datastore", name = "datastore-core", version.ref = "datastoreCore" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" }