Now showing satellite current azimuth, elevation, altitude and range in RadarFragment

This commit is contained in:
Arty Bishop committed 2019-12-05 22:28:15 +00:00
1 parent 4e4256bc3f
commit a32171c96f
6 files changed
+67 -63

No files matched your search

@@ -18,7 +18,6 @@ import com.rtbishop.lookingsat.MainViewModel
import com.rtbishop.lookingsat.R
import com.rtbishop.lookingsat.repo.SatPass
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
@@ -27,7 +26,7 @@ import kotlin.math.sin
class RadarFragment : Fragment() {
private val delay = 5000L
private val delay = 2000L
private val service = Executors.newSingleThreadScheduledExecutor()
private lateinit var viewModel: MainViewModel
@@ -36,11 +35,12 @@ class RadarFragment : Fragment() {
private lateinit var radarSkyFrame: FrameLayout
private lateinit var transRecycler: RecyclerView
private lateinit var transAdapter: TransAdapter
private lateinit var radarSatName: TextView
private lateinit var radarMaxEl: TextView
private lateinit var radarAos: TextView
private lateinit var radarLos: TextView
private lateinit var radarAzimuth: TextView
private lateinit var radarElevation: TextView
private lateinit var radarRange: TextView
private lateinit var radarAltitude: TextView
private lateinit var transNoFound: TextView
private lateinit var mainActivity: MainActivity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -58,22 +58,28 @@ class RadarFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
satPass = arguments?.get("satPass") as SatPass
mainActivity = activity as MainActivity
mainActivity.supportActionBar?.title = satPass.tle.name
radarSkyFrame = view.findViewById(R.id.radar_sky_frame)
transRecycler = view.findViewById(R.id.radar_recycler)
radarSatName = view.findViewById(R.id.radar_sat_name)
radarMaxEl = view.findViewById(R.id.radar_maxEl)
radarAos = view.findViewById(R.id.radar_aos)
radarLos = view.findViewById(R.id.radar_los)
transNoFound = view.findViewById(R.id.radar_trans_no_found)
radarAzimuth = view.findViewById(R.id.radar_azimuth)
radarElevation = view.findViewById(R.id.radar_elevation)
radarRange = view.findViewById(R.id.radar_range)
radarAltitude = view.findViewById(R.id.radar_altitude)
transNoFound = view.findViewById(R.id.radar_no_trans)
radarView = RadarView(mainActivity)
radarSkyFrame.addView(radarView)
service.scheduleAtFixedRate({ radarView.invalidate() }, 0, delay, TimeUnit.MILLISECONDS)
setupRadarView()
setupTransRecycler()
}
private fun setupTransRecycler() {
transAdapter = TransAdapter()
transRecycler.apply {
layoutManager = LinearLayoutManager(activity as MainActivity)
layoutManager = LinearLayoutManager(mainActivity)
adapter = transAdapter
}
lifecycleScope.launch {
@@ -88,22 +94,6 @@ class RadarFragment : Fragment() {
}
}
private fun setupRadarView() {
radarView = RadarView(activity as MainActivity)
radarSkyFrame.addView(radarView)
val aosTime =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.startTime)
val losTime =
SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(satPass.pass.endTime)
radarSatName.text = satPass.tle.name
radarMaxEl.text = String.format("MaxEl: %.1f°", satPass.pass.maxEl)
radarAos.text = String.format("AOS - %s", aosTime)
radarLos.text = String.format("LOS - %s", losTime)
service.scheduleAtFixedRate({ radarView.invalidate() }, delay, delay, TimeUnit.MILLISECONDS)
}
inner class RadarView(context: Context) : View(context) {
private val radarSize = resources.displayMetrics.widthPixels
@@ -153,6 +143,7 @@ class RadarFragment : Fragment() {
override fun onDraw(canvas: Canvas) {
bmp.eraseColor(Color.TRANSPARENT)
setPassText()
drawRadarView()
drawRadarText()
drawPassTrajectory()
@@ -160,6 +151,14 @@ class RadarFragment : Fragment() {
canvas.drawBitmap(bmp, left.toFloat(), top.toFloat(), null)
}
private fun setPassText() {
satPos = satPass.predictor.getSatPos(Date())
radarAzimuth.text = String.format("Azimuth: %.1f°", rad2Deg(satPos.azimuth))
radarElevation.text = String.format("Elevation: %.1f°", rad2Deg(satPos.elevation))
radarRange.text = String.format("Range: %.0f km", satPos.range)
radarAltitude.text = String.format("Altitude: %.0f km", satPos.altitude)
}
private fun drawRadarView() {
cvs.drawLine(center - radius, center, center + radius, center, radarPaint)
cvs.drawLine(center, center - radius, center, center + radius, radarPaint)
@@ -213,5 +212,9 @@ class RadarFragment : Fragment() {
val radius = r * (piDiv2 - elevation) / piDiv2
return (radius * sin(piDiv2 - azimuth)).toFloat()
}
private fun rad2Deg(value: Double): Double {
return value * 180 / Math.PI
}
}
}