package map import application.model.observableVessel fun clearMap(map: LeafletMapView) { clearMapCanvas(map) clearMapCluster(map) clearHeatMap(map) } fun clearMapCluster(map: LeafletMapView) { map.execScript( """ |myMap.removeLayer(markerClusters); |var markerClusters = L.markerClusterGroup({spiderfyOnMaxZoom: false, disableClusteringAtZoom: 10}); """.trimMargin() ) } fun clearMapCanvas(map: LeafletMapView) { map.execScript( """ |myRenderer.removeFrom(myMap); |var myRenderer = L.canvas({ padding: 0.5 }); """.trimMargin() ) } fun clearHeatMap(map: LeafletMapView) { map.execScript( """ |heatLayer.removeFrom(myMap); |var heatLayer = L.heatLayer([]).addTo(myMap); """.trimMargin() ) } fun displayAllMessageOnMap(map: LeafletMapView) { clearMap(map) observableVessel.vessels.forEach { (_, value) -> value.messages.forEach { (_, message) -> map.execScript("L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}).addTo(myMap)") } } } fun displayAllMessageOnMap(map: LeafletMapView, selectedMMSI: Int) { clearMap(map) observableVessel.vessels.forEach { (_, value) -> value.messages.forEach { (_, message) -> if (selectedMMSI == message.mmsi.value) { map.execScript("L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap)") } else { map.execScript("L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}).addTo(myMap)") } } } } fun displayClusterMessageOnMap(map: LeafletMapView) { clearMap(map) observableVessel.vessels.forEach { (_, value) -> value.messages.forEach { (_, message) -> map.execScript("markerClusters.addLayer(L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}));") } } map.execScript("myMap.addLayer(markerClusters);") } fun displayClusterMessageOnMap(map: LeafletMapView, selectedMMSI: Int) { clearMap(map) observableVessel.vessels.forEach { (_, value) -> value.messages.forEach { (_, message) -> if (selectedMMSI == message.mmsi.value) { map.execScript("L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap);") } else { map.execScript("markerClusters.addLayer(L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 0.01, color: '#${message.getHexColorStroke()}'}));") } } } map.execScript("myMap.addLayer(markerClusters);") } fun displayHeatMapOnMap(map: LeafletMapView) { clearMap(map) observableVessel.vessels.forEach { (_, value) -> value.messages.forEach { (_, message) -> map.execScript("heatLayer.addLatLng([${message.latitude.value}, ${message.longitude.value}]);") } } } fun displayHeatMapOnMap(map: LeafletMapView, selectedMMSI: Int) { clearMap(map) observableVessel.vessels.forEach { (_, value) -> value.messages.forEach { (_, message) -> if (selectedMMSI == message.mmsi.value) { map.execScript("L.circleMarker([${message.latitude.value}, ${message.longitude.value}], {renderer: myRenderer, radius: 2, color: '#ff4040'}).addTo(myMap);") } else { map.execScript("heatLayer.addLatLng([${message.latitude.value}, ${message.longitude.value}]);") } } } map.execScript("myMap.addLayer(markerClusters);") }