Navigation Image
This commit is contained in:
@@ -52,22 +52,29 @@ import com.example.places.ui.theme.PlacesTheme
|
||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
||||
import com.google.accompanist.permissions.rememberMultiplePermissionsState
|
||||
import com.kouros.android.cars.carappservice.R
|
||||
import com.kouros.navigation.car.BuildingLayer
|
||||
import com.kouros.navigation.car.Puck
|
||||
import com.kouros.navigation.car.RouteLayer
|
||||
|
||||
import com.kouros.navigation.data.Category
|
||||
import com.kouros.navigation.data.Constants
|
||||
import com.kouros.navigation.data.Constants.SHOW_THREED_BUILDING
|
||||
import com.kouros.navigation.data.NavigationRepository
|
||||
import com.kouros.navigation.data.StepData
|
||||
import com.kouros.navigation.model.RouteModel
|
||||
import com.kouros.navigation.model.ViewModel
|
||||
import com.kouros.navigation.utils.NavigationUtils.getBooleanKeyValue
|
||||
import com.kouros.navigation.utils.NavigationUtils.snapLocation
|
||||
import com.kouros.navigation.utils.calculateZoom
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import org.maplibre.compose.camera.CameraPosition
|
||||
import org.maplibre.compose.camera.rememberCameraState
|
||||
import org.maplibre.compose.expressions.dsl.const
|
||||
import org.maplibre.compose.layers.Anchor
|
||||
import org.maplibre.compose.layers.CircleLayer
|
||||
import org.maplibre.compose.layers.FillLayer
|
||||
import org.maplibre.compose.layers.LineLayer
|
||||
import org.maplibre.compose.location.DesiredAccuracy
|
||||
@@ -88,6 +95,7 @@ import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
|
||||
private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO)
|
||||
val routeData = MutableLiveData("")
|
||||
|
||||
val vieModel = ViewModel(NavigationRepository())
|
||||
@@ -115,10 +123,16 @@ class MainActivity : ComponentActivity() {
|
||||
|
||||
var locationIndex = 0
|
||||
|
||||
var test = false
|
||||
var simulate = false
|
||||
|
||||
init {
|
||||
vieModel.route.observe(this, observer)
|
||||
if (simulate) {
|
||||
vieModel.loadRoute(
|
||||
Constants.homeLocation,
|
||||
Constants.home2Location
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -262,10 +276,10 @@ class MainActivity : ComponentActivity() {
|
||||
)
|
||||
val userLocationState = rememberUserLocationState(locationProvider)
|
||||
val locationState = locationProvider.location.collectAsState()
|
||||
if (!test) {
|
||||
if (!simulate) {
|
||||
updateLocation(locationState.value)
|
||||
} else {
|
||||
test()
|
||||
simulate()
|
||||
}
|
||||
if (locationState.value != null && lastLocation.latitude == 0.0) {
|
||||
lastLocation.latitude = locationState.value?.position!!.latitude
|
||||
@@ -290,8 +304,16 @@ class MainActivity : ComponentActivity() {
|
||||
baseStyle = BaseStyle.Uri(Constants.STYLE),
|
||||
) {
|
||||
getBaseSource(id = "openmaptiles")?.let { tiles ->
|
||||
FillLayer(id = "example", visible = false, source = tiles, sourceLayer = "building")
|
||||
RouteLayer(route)
|
||||
if (!getBooleanKeyValue(context = applicationContext, SHOW_THREED_BUILDING) && Constants.STYLE.contains("liberty")) {
|
||||
BuildingLayer(tiles)
|
||||
}
|
||||
RouteLayer(route, "")
|
||||
}
|
||||
if (userLocationState.location != null) {
|
||||
val location = Location(LocationManager.GPS_PROVIDER)
|
||||
location.longitude = userLocationState.location!!.position.longitude
|
||||
location.latitude = userLocationState.location!!.position.latitude
|
||||
Puck(cameraState, location,)
|
||||
}
|
||||
LocationPuck(
|
||||
idPrefix = "user-location1",
|
||||
@@ -321,39 +343,6 @@ class MainActivity : ComponentActivity() {
|
||||
duration = 1.seconds
|
||||
)
|
||||
}
|
||||
|
||||
// LaunchedEffect(position) {
|
||||
// println("CameraPosition ${position!!.target.latitude}")
|
||||
// cameraState.animateTo(
|
||||
// finalPosition = CameraPosition(
|
||||
// bearing = position!!.bearing,
|
||||
// zoom = position!!.zoom,
|
||||
// target = position!!.target,
|
||||
// tilt = tilt
|
||||
// ),
|
||||
// duration = 3.seconds
|
||||
// )
|
||||
// }
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun RouteLayer(routeData: String?) {
|
||||
if (routeData!!.isNotEmpty()) {
|
||||
val routes =
|
||||
rememberGeoJsonSource(GeoJsonData.JsonString(routeData!!))
|
||||
LineLayer(
|
||||
id = "routes-casing",
|
||||
source = routes,
|
||||
color = const(Color.White),
|
||||
width = const(10.dp),
|
||||
)
|
||||
LineLayer(
|
||||
id = "routes",
|
||||
source = routes,
|
||||
color = const(Color.Blue),
|
||||
width = const(8.dp),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun updateLocation(location: org.maplibre.compose.location.Location?) {
|
||||
@@ -380,7 +369,7 @@ class MainActivity : ComponentActivity() {
|
||||
snapedLocation = snapLocation(location, routeModel.route.maneuverLocations())
|
||||
bearing = routeModel.currentStep().bearing
|
||||
routeModel.updateLocation(snapedLocation)
|
||||
instruction.value = routeModel.currentStep()
|
||||
instruction.postValue(routeModel.currentStep())
|
||||
} else {
|
||||
bearing = cameraPosition.value!!.bearing
|
||||
}
|
||||
@@ -394,14 +383,19 @@ class MainActivity : ComponentActivity() {
|
||||
)
|
||||
}
|
||||
|
||||
fun test() {
|
||||
fun simulate() {
|
||||
if (routeModel.isNavigating() && locationIndex < routeModel.route.waypoints.size) {
|
||||
val loc = routeModel.route.waypoints[locationIndex]
|
||||
lastLocation.longitude = loc[0]
|
||||
lastLocation.latitude = loc[1]
|
||||
updateTestLocation(lastLocation)
|
||||
Thread.sleep(1_000)
|
||||
locationIndex++
|
||||
coroutineScope.launch {
|
||||
delay(
|
||||
100
|
||||
)
|
||||
val loc = routeModel.route.waypoints[locationIndex]
|
||||
lastLocation.longitude = loc[0]
|
||||
lastLocation.latitude = loc[1]
|
||||
updateTestLocation(lastLocation)
|
||||
Thread.sleep(1_000)
|
||||
locationIndex++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user