diff --git a/app/src/main/java/com/example/snapandsolve/MainScreen.kt b/app/src/main/java/com/example/snapandsolve/MainScreen.kt index 7ebec38..1ffaa96 100644 --- a/app/src/main/java/com/example/snapandsolve/MainScreen.kt +++ b/app/src/main/java/com/example/snapandsolve/MainScreen.kt @@ -392,10 +392,10 @@ fun ReportOverlay( ) { Button( onClick = { - + mapViewModel.pickCurrentLocation() }, ) { - Text("Position aus Standort") + Text(if (hasPoint) "neue Position aus Standort" else "Position aus Standort") } Button( onClick = { diff --git a/app/src/main/java/com/example/snapandsolve/MapSegment.kt b/app/src/main/java/com/example/snapandsolve/MapSegment.kt index 413f430..898bfa3 100644 --- a/app/src/main/java/com/example/snapandsolve/MapSegment.kt +++ b/app/src/main/java/com/example/snapandsolve/MapSegment.kt @@ -45,6 +45,9 @@ fun MapSegment( val locationDisplay = rememberLocationDisplay().apply { setAutoPanMode(LocationDisplayAutoPanMode.Off) } + LaunchedEffect(locationDisplay) { + mapViewModel.locationDisplay = locationDisplay + } if (checkPermissions(context)) { // Permissions are already granted. diff --git a/app/src/main/java/com/example/snapandsolve/MapViewModel.kt b/app/src/main/java/com/example/snapandsolve/MapViewModel.kt index f6a5e85..08bd15f 100644 --- a/app/src/main/java/com/example/snapandsolve/MapViewModel.kt +++ b/app/src/main/java/com/example/snapandsolve/MapViewModel.kt @@ -1,11 +1,8 @@ import android.app.Application import android.graphics.Bitmap -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue -import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.asAndroidBitmap import androidx.compose.ui.unit.dp @@ -25,7 +22,6 @@ import com.arcgismaps.mapping.Viewpoint import com.arcgismaps.mapping.layers.FeatureLayer import com.arcgismaps.mapping.symbology.SimpleMarkerSymbol import com.arcgismaps.mapping.symbology.SimpleMarkerSymbolStyle -import com.arcgismaps.mapping.symbology.SimpleRenderer import com.arcgismaps.mapping.view.Graphic import com.arcgismaps.mapping.view.GraphicsOverlay import com.arcgismaps.mapping.view.LocationDisplay @@ -65,6 +61,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) { val tempOverlay = GraphicsOverlay() init { + tempOverlay.graphics.add(pointGraphic) viewModelScope.launch { serviceFeatureTable = ServiceFeatureTable("https://services9.arcgis.com/UVxdrlZq3S3gqt7w/arcgis/rest/services/si_StrassenSchaeden/FeatureServer/0") serviceFeatureTable.load().onSuccess { @@ -131,6 +128,25 @@ class MapViewModel(application: Application) : AndroidViewModel(application) { } } + fun pickCurrentLocation() { + // keine Coroutine nötig, das ist alles sync + val pos = locationDisplay?.location?.value?.position + if (pos == null) { + snackBarMessage = "Kein GPS Signal. Bitte kurz warten oder Standort aktivieren." + return + } + + // pos ist ggf. schon Point, aber wir erzwingen WGS84 (sicher für deinen Feature-Service) + val pointWgs84 = + if (pos.spatialReference == SpatialReference.wgs84()) pos + else GeometryEngine.projectOrNull(pos, SpatialReference.wgs84()) as Point + + updateReportDraft { copy(point = pointWgs84) } + pointGraphic.geometry = pointWgs84 + snackBarMessage = "Position aus GPS gesetzt." + } + + private suspend fun applyEditsWithPhotos(feature: ArcGISFeature, photos: List) { serviceFeatureTable.applyEdits().onSuccess { editResults -> val result = editResults.firstOrNull() @@ -319,9 +335,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) { if (p != null) { reportDraft = reportDraft.copy(point = p) - tempOverlay.graphics.clear() pointGraphic.geometry = p - tempOverlay.graphics.add(pointGraphic) reopenReport = true snackBarMessage = "Position gesetzt." } else {