Fixed satellite track show issue, minor Map fixes

This commit is contained in:
Arty Bishop committed 2021-03-24 10:17:10 +00:00
1 parent 6f8db0b9b1
commit a8b43ca3fb
4 files changed
+6 -18

No files matched your search

@@ -32,9 +32,6 @@ interface SatelliteDao {
@Query("SELECT catNum, name, isSelected FROM entries ORDER BY name ASC") @Query("SELECT catNum, name, isSelected FROM entries ORDER BY name ASC")
fun getAllSatItems(): Flow<List<SatItem>> fun getAllSatItems(): Flow<List<SatItem>>
@Query("SELECT tle FROM entries WHERE isSelected = 1")
fun getSelectedSatellitesFlow(): Flow<List<Satellite>>
@Query("SELECT * FROM transmitters WHERE isAlive = 1 ORDER BY mode ASC") @Query("SELECT * FROM transmitters WHERE isAlive = 1 ORDER BY mode ASC")
fun getAllTransmitters(): Flow<List<SatTrans>> fun getAllTransmitters(): Flow<List<SatTrans>>
@@ -52,10 +52,6 @@ class SatelliteRepo @Inject constructor(
return satelliteDao.getAllSatItems() return satelliteDao.getAllSatItems()
} }
fun getSelectedSatellitesFlow(): Flow<List<Satellite>> {
return satelliteDao.getSelectedSatellitesFlow()
}
fun getAllTransmitters(): Flow<List<SatTrans>> { fun getAllTransmitters(): Flow<List<SatTrans>> {
return satelliteDao.getAllTransmitters() return satelliteDao.getAllTransmitters()
} }
@@ -29,7 +29,6 @@ import com.rtbishop.look4sat.data.repository.SatelliteRepo
import com.rtbishop.look4sat.utility.* import com.rtbishop.look4sat.utility.*
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.* import kotlinx.coroutines.*
import kotlinx.coroutines.flow.collect
import org.osmdroid.util.GeoPoint import org.osmdroid.util.GeoPoint
import org.osmdroid.views.overlay.FolderOverlay import org.osmdroid.views.overlay.FolderOverlay
import org.osmdroid.views.overlay.Overlay import org.osmdroid.views.overlay.Overlay
@@ -77,11 +76,10 @@ class MapViewModel @Inject constructor(
init { init {
viewModelScope.launch { viewModelScope.launch {
satelliteRepo.getSelectedSatellitesFlow().collect { satellites -> val satellites = satelliteRepo.getSelectedSatellites()
if (satellites.isNotEmpty()) { if (satellites.isNotEmpty()) {
filteredSats = satellites filteredSats = satellites
selectedSat = satellites.first() selectedSat = satellites.first()
try {
while (true) { while (true) {
ensureActive() ensureActive()
dateNow.time = System.currentTimeMillis() dateNow.time = System.currentTimeMillis()
@@ -89,10 +87,6 @@ class MapViewModel @Inject constructor(
_satMarkers.value = getDataForAllSatellites(filteredSats) _satMarkers.value = getDataForAllSatellites(filteredSats)
delay(2000) delay(2000)
} }
} catch (e: Exception) {
}
}
} }
} }
} }
@@ -147,7 +141,7 @@ class MapViewModel @Inject constructor(
} }
private fun getSatTrack(satellite: Satellite): Overlay { private fun getSatTrack(satellite: Satellite): Overlay {
val positions = satellite.getPredictor(gsp).getPositions(dateNow, 20, 5, 2) val positions = satellite.getPredictor(gsp).getPositions(dateNow, 15, 3, 3.2)
val trackOverlay = FolderOverlay() val trackOverlay = FolderOverlay()
val trackPoints = mutableListOf<GeoPoint>() val trackPoints = mutableListOf<GeoPoint>()
var oldLon = 0.0 var oldLon = 0.0
@@ -42,14 +42,15 @@ class PassPredictor(private val satellite: Satellite, private val qth: GroundSta
return satellite.getPosition(qth, date) return satellite.getPosition(qth, date)
} }
fun getPositions(refDate: Date, stepSeconds: Int, minBefore: Int, minAfter: Int): List<SatPos> { fun getPositions(refDate: Date, stepSec: Int, minBefore: Int, orbits: Double): List<SatPos> {
val positions = mutableListOf<SatPos>() val positions = mutableListOf<SatPos>()
val endDate = Date(refDate.time + minAfter * 60L * 1000L) val orbitalPeriod = 24 * 60 / satellite.tle.meanmo
val endDate = Date(refDate.time + (orbitalPeriod * orbits * 60L * 1000L).toLong())
val startDate = Date(refDate.time - minBefore * 60L * 1000L) val startDate = Date(refDate.time - minBefore * 60L * 1000L)
var currentDate = startDate var currentDate = startDate
while (currentDate.before(endDate)) { while (currentDate.before(endDate)) {
positions.add(getSatPos(currentDate)) positions.add(getSatPos(currentDate))
currentDate = Date(currentDate.time + stepSeconds * 1000) currentDate = Date(currentDate.time + stepSec * 1000)
} }
return positions return positions
} }