- GPS Location zu DraftReport
This commit is contained in:
@@ -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 = {
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user