import QtQuick import QtPositioning import QtLocation import QtQuick.Controls Rectangle { id: mapContainer width: parent.width * 3 / 4 height: parent.height property real bookmarkTimestamp: 0 function statusGen() { var random = Math.random(); var status; if (random < 0.01) { status = 'damaged'; } else if (random < 0.10) { status = 'destroyed'; } else { status = 'fully_capable'; } return status } function partieGen() { var random = Math.random(); var status; if (random < 0.33) { status = 'Red'; } else { status = 'Blue'; } return status } function createMarker() { var centerLat = 53.5200; var centerLng = 9.4050; var latRange = 0.1; // Beschränke auf ±0.1 Grad um centerLat var lngRange = 0.1; // Beschränke auf ±0.1 Grad um centerLng for (var i = 1; i <= 200; i++) { var lat = centerLat + (Math.random() * latRange * 2 - latRange); var lng = centerLng + (Math.random() * lngRange * 2 - lngRange); var component = Qt.createComponent("marker.qml"); var sprite = component.createObject(map, { "lat": lat, "lng": lng }); logic.markerHelper.postObject(replay_uuid, i, lng, lat, statusGen(), partieGen()); markers.push(sprite); } return markers; } Timer { id: moveTimer interval: 1000 // Move every second repeat: true onTriggered: { for (var i = 0 ; i < markers.length; i++) { var newLat = markers[i].lat + (Math.random() * 0.01 - 0.005) var newLng = markers[i].lng + (Math.random() * 0.01 - 0.005) markers[i].lat = newLat markers[i].lng = newLng logic.markerHelper.postObject(replay_uuid, i+1, newLng, newLat, statusGen(), partieGen()) } } } Plugin { id: mapPlugin name: "osm" PluginParameter { name: "osm.mapping.custom.host" value: "https://tile.openstreetmap.de/" } } Map { id: map anchors.fill: parent plugin: mapPlugin center: QtPositioning.coordinate(53.5200, 9.4050) // Berlin zoomLevel: 14 z: 1 property geoCoordinate startCentroid property var markers: [] PinchHandler { id: pinch target: null onActiveChanged: if (active) { map.startCentroid = map.toCoordinate( pinch.centroid.position, false) } onScaleChanged: delta => { map.zoomLevel += Math.log2(delta) map.alignCoordinateToPoint( map.startCentroid, pinch.centroid.position) } onRotationChanged: {} // Deaktiviert Rotation grabPermissions: PointerHandler.TakeOverForbidden } DragHandler { id: drag target: map onTranslationChanged: delta => map.pan(-delta.x, -delta.y) } activeMapType: supportedMapTypes[supportedMapTypes.length - 1] Button { text: "Start Simulation" width: parent.width z: 10 onClicked: { var sprites = createMarker() for (var i = 0; i < sprites.length; i++) { map.addMapItem(sprites[i]) } moveTimer.start() } } Button { text: "Add Lesezeichen" width: parent.width z:10 y:25 onClicked: { bookmarkTimestamp = Date.now(); bookmarkDialog.open(); } } } Dialog { id: bookmarkDialog title: "Add Lesezeichen" modal: true standardButtons: Dialog.Ok | Dialog.Cancel Column { spacing: 10 padding: 20 TextField { id: nameField placeholderText: "Name" } TextArea { id: descriptionField placeholderText: "Description" } } onAccepted: { var name = nameField.text; var description = descriptionField.text; logic.bookmarkHelper.postBookmark(replay_uuid, name, description, bookmarkTimestamp) } } }