Fixed an old issue regarding satellite footprint rendering #36

This commit is contained in:
Arty Bishop committed 2022-02-23 19:17:41 +00:00
1 parent 74cbad5127
commit 03323172ea
9 files changed
+44 -25

No files matched your search

@@ -32,6 +32,7 @@ import androidx.navigation.fragment.navArgs
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.databinding.FragmentMapBinding
import com.rtbishop.look4sat.domain.predict.GeoPos
import com.rtbishop.look4sat.domain.predict.SatPos
import com.rtbishop.look4sat.domain.predict.Satellite
import dagger.hilt.android.AndroidEntryPoint
import org.osmdroid.config.Configuration
@@ -41,7 +42,6 @@ import org.osmdroid.views.CustomZoomButtonsController
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.FolderOverlay
import org.osmdroid.views.overlay.Marker
import org.osmdroid.views.overlay.Polygon
import org.osmdroid.views.overlay.Polyline
@AndroidEntryPoint
@@ -59,8 +59,9 @@ class MapFragment : Fragment(R.layout.fragment_map) {
strokeJoin = Paint.Join.ROUND
}
private val footprintPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
strokeWidth = 2f
style = Paint.Style.FILL_AND_STROKE
color = Color.parseColor("#26FFE082")
color = Color.parseColor("#FFE082")
}
private lateinit var binding: FragmentMapBinding
@@ -124,7 +125,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
posMap.entries.forEach {
Marker(mapView).apply {
setInfoWindow(null)
textLabelFontSize = 24
textLabelFontSize = 28
textLabelBackgroundColor = Color.TRANSPARENT
textLabelForegroundColor =
ContextCompat.getColor(requireContext(), R.color.accent)
@@ -164,13 +165,17 @@ class MapFragment : Fragment(R.layout.fragment_map) {
binding.mapView.overlays[1] = trackOverlay
}
private fun handleFootprint(satFootprint: List<GeoPos>) {
val footprintPoints = satFootprint.map { GeoPoint(it.latitude, it.longitude) }
val footprintOverlay = Polygon().apply {
fillPaint.set(footprintPaint)
private fun handleFootprint(satPos: SatPos) {
val center = GeoPoint(Math.toDegrees(satPos.latitude), Math.toDegrees(satPos.longitude))
val radiusM = satPos.getRangeCircleRadiusKm() * 1000
val footprintPoints = mutableListOf<GeoPoint>()
for (i in 0..720) {
footprintPoints.add(center.destinationPoint(radiusM, i.toDouble()))
}
val footprintOverlay = Polyline().apply {
outlinePaint.set(footprintPaint)
try {
this.points = footprintPoints
setPoints(footprintPoints)
} catch (exception: IllegalArgumentException) {
println(exception.stackTraceToString())
}
@@ -180,8 +185,8 @@ class MapFragment : Fragment(R.layout.fragment_map) {
private fun handleMapData(mapData: MapData) {
binding.apply {
mapDataName.text =
String.format(getString(R.string.pat_osm_idName), mapData.catNum, mapData.name)
mapTitle.text = mapData.name
mapDataId.text = String.format(getString(R.string.map_sat_id), mapData.catNum)
mapDataQth.text = String.format(getString(R.string.map_qth), mapData.qthLoc)
mapDataAlt.text = String.format(getString(R.string.pat_altitude), mapData.altitude)
mapDataDst.text = String.format(getString(R.string.pat_distance), mapData.range)
@@ -23,6 +23,7 @@ import com.rtbishop.look4sat.domain.ISettings
import com.rtbishop.look4sat.domain.QthConverter
import com.rtbishop.look4sat.domain.predict.GeoPos
import com.rtbishop.look4sat.domain.predict.Predictor
import com.rtbishop.look4sat.domain.predict.SatPos
import com.rtbishop.look4sat.domain.predict.Satellite
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.*
@@ -53,8 +54,8 @@ class MapViewModel @Inject constructor(
private val _track = MutableLiveData<List<List<GeoPos>>>()
val track: LiveData<List<List<GeoPos>>> = _track
private val _footprint = MutableLiveData<List<GeoPos>>()
val footprint: LiveData<List<GeoPos>> = _footprint
private val _footprint = MutableLiveData<SatPos>()
val footprint: LiveData<SatPos> = _footprint
private val _mapData = MutableLiveData<MapData>()
val mapData: LiveData<MapData> = this._mapData
@@ -151,12 +152,7 @@ class MapViewModel @Inject constructor(
private suspend fun getSatFootprint(satellite: Satellite, pos: GeoPos, date: Date) {
val satPos = predictor.getSatPos(satellite, pos, date.time)
val satFootprint = satPos.getRangeCircle().map { rangePos ->
val osmLat = clipLat(rangePos.latitude)
val osmLon = clipLon(rangePos.longitude)
GeoPos(osmLat, osmLon)
}
_footprint.postValue(satFootprint)
_footprint.postValue(satPos)
}
private suspend fun getSatData(satellite: Satellite, pos: GeoPos, date: Date) {