- GPS Location zu DraftReport

This commit is contained in:
2026-01-18 17:24:28 +01:00
parent 30d5a17e6e
commit 407316a4c5
3 changed files with 25 additions and 8 deletions

View File

@@ -392,10 +392,10 @@ fun ReportOverlay(
) { ) {
Button( Button(
onClick = { onClick = {
mapViewModel.pickCurrentLocation()
}, },
) { ) {
Text("Position aus Standort") Text(if (hasPoint) "neue Position aus Standort" else "Position aus Standort")
} }
Button( Button(
onClick = { onClick = {

View File

@@ -45,6 +45,9 @@ fun MapSegment(
val locationDisplay = rememberLocationDisplay().apply { val locationDisplay = rememberLocationDisplay().apply {
setAutoPanMode(LocationDisplayAutoPanMode.Off) setAutoPanMode(LocationDisplayAutoPanMode.Off)
} }
LaunchedEffect(locationDisplay) {
mapViewModel.locationDisplay = locationDisplay
}
if (checkPermissions(context)) { if (checkPermissions(context)) {
// Permissions are already granted. // Permissions are already granted.

View File

@@ -1,11 +1,8 @@
import android.app.Application import android.app.Application
import android.graphics.Bitmap import android.graphics.Bitmap
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asAndroidBitmap import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.compose.ui.unit.dp 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.layers.FeatureLayer
import com.arcgismaps.mapping.symbology.SimpleMarkerSymbol import com.arcgismaps.mapping.symbology.SimpleMarkerSymbol
import com.arcgismaps.mapping.symbology.SimpleMarkerSymbolStyle import com.arcgismaps.mapping.symbology.SimpleMarkerSymbolStyle
import com.arcgismaps.mapping.symbology.SimpleRenderer
import com.arcgismaps.mapping.view.Graphic import com.arcgismaps.mapping.view.Graphic
import com.arcgismaps.mapping.view.GraphicsOverlay import com.arcgismaps.mapping.view.GraphicsOverlay
import com.arcgismaps.mapping.view.LocationDisplay import com.arcgismaps.mapping.view.LocationDisplay
@@ -65,6 +61,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
val tempOverlay = GraphicsOverlay() val tempOverlay = GraphicsOverlay()
init { init {
tempOverlay.graphics.add(pointGraphic)
viewModelScope.launch { viewModelScope.launch {
serviceFeatureTable = ServiceFeatureTable("https://services9.arcgis.com/UVxdrlZq3S3gqt7w/arcgis/rest/services/si_StrassenSchaeden/FeatureServer/0") serviceFeatureTable = ServiceFeatureTable("https://services9.arcgis.com/UVxdrlZq3S3gqt7w/arcgis/rest/services/si_StrassenSchaeden/FeatureServer/0")
serviceFeatureTable.load().onSuccess { 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<ImageBitmap>) { private suspend fun applyEditsWithPhotos(feature: ArcGISFeature, photos: List<ImageBitmap>) {
serviceFeatureTable.applyEdits().onSuccess { editResults -> serviceFeatureTable.applyEdits().onSuccess { editResults ->
val result = editResults.firstOrNull() val result = editResults.firstOrNull()
@@ -319,9 +335,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
if (p != null) { if (p != null) {
reportDraft = reportDraft.copy(point = p) reportDraft = reportDraft.copy(point = p)
tempOverlay.graphics.clear()
pointGraphic.geometry = p pointGraphic.geometry = p
tempOverlay.graphics.add(pointGraphic)
reopenReport = true reopenReport = true
snackBarMessage = "Position gesetzt." snackBarMessage = "Position gesetzt."
} else { } else {