status hinzugefügt

regelbasiertes styling
architektur überarbeitet
This commit is contained in:
2026-02-06 15:34:39 +01:00
parent 8eeeb2ce99
commit 7781551e02
13 changed files with 960 additions and 301 deletions

View File

@@ -28,10 +28,13 @@ import com.arcgismaps.mapping.view.LocationDisplay
import com.arcgismaps.mapping.view.ScreenCoordinate
import com.arcgismaps.mapping.view.SingleTapConfirmedEvent
import com.arcgismaps.toolkit.geoviewcompose.MapViewProxy
import com.example.snapandsolve.view.createTypStatusRenderer
import com.example.snapandsolve.viewmodel.findNearbyDamageOfSameType
import kotlinx.coroutines.launch
import java.io.ByteArrayOutputStream
class MapViewModel(application: Application) : AndroidViewModel(application) {
companion object {
@@ -47,6 +50,8 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
val map: ArcGISMap = ArcGISMap(BasemapStyle.OpenOsmStyle).apply {
initialViewpoint = Viewpoint(53.14, 8.20, 20000.0)
}
var duplicateDamages by mutableStateOf<List<DamageWithDistance>>(emptyList())
private set
var selectedOperation by mutableStateOf(FeatureOperationType.DEFAULT)
var reopenReport by mutableStateOf(false)
private set
@@ -74,7 +79,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
init {
tempOverlay.graphics.add(pointGraphic)
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/251120_StrassenSchaeden/FeatureServer/0")
serviceFeatureTable.load().onSuccess {
val typeDamageField = serviceFeatureTable.fields.firstOrNull { it.name == "Typ" }
val attributeDomain = typeDamageField?.domain as? CodedValueDomain
@@ -94,6 +99,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
println("DEBUG: Fehler beim Laden der Tabelle: ${it.message}")
}
featureLayer = FeatureLayer.createWithFeatureTable(serviceFeatureTable)
featureLayer.renderer = createTypStatusRenderer()
map.operationalLayers.add(featureLayer)
// ===== DEBUG: Felder nach dem Hinzufügen zur Map =====
@@ -359,6 +365,7 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
geometry = draft.point
attributes["Beschreibung"] = draft.beschreibung
attributes["Typ"] = draft.typ
attributes["status"] = draft.status
}
// 2) Erst addFeature + applyEdits => Feature existiert am Server (ObjectID)
@@ -405,6 +412,17 @@ class MapViewModel(application: Application) : AndroidViewModel(application) {
selectedFeature = null
featureLayer.clearSelection()
}
suspend fun isDuplicateNearby(radiusMeters: Double): Boolean {
val p = reportDraft.point ?: return false
val t = reportDraft.typ
duplicateDamages = findNearbyDamageOfSameType(serviceFeatureTable, p, t, radiusMeters)
return duplicateDamages.isNotEmpty()
}
fun clearDuplicateDamages() {
duplicateDamages = emptyList()
}
}
enum class FeatureOperationType(val operationName: String, val instruction: String) {
@@ -419,7 +437,8 @@ data class ReportDraft(
val beschreibung: String = "",
val typ: String = "Schadenstyp wählen...",
val photos: List<ImageBitmap> = emptyList(),
val point: Point? = null
val point: Point? = null,
val status: String = "neu"
) {
val isValid: Boolean
get() =