mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Now showing satellite current azimuth, elevation, altitude and range in RadarFragment
This commit is contained in:
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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,8 @@
|
||||
<androidx.appcompat.widget.Toolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize">
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
app:titleTextColor="@color/themeAccent">
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/toolbar_layout_timer"
|
||||
|
||||
@@ -16,33 +16,34 @@
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_sat_name"
|
||||
style="@style/RadarText"
|
||||
android:text="@string/card_sat_name"
|
||||
app:layout_constraintStart_toStartOf="@+id/radar_aos"
|
||||
app:layout_constraintTop_toTopOf="@+id/radar_maxEl" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_maxEl"
|
||||
style="@style/RadarText"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:text="@string/card_max_el"
|
||||
app:layout_constraintEnd_toEndOf="@+id/radar_sky_frame"
|
||||
app:layout_constraintTop_toTopOf="@+id/radar_sky_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_aos"
|
||||
android:id="@+id/radar_azimuth"
|
||||
style="@style/RadarText"
|
||||
android:layout_marginStart="4dp"
|
||||
android:text="@string/card_pass_aos_time"
|
||||
android:text="@string/radar_azimuth"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/radar_sky_frame"
|
||||
app:layout_constraintStart_toStartOf="@+id/radar_sky_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_los"
|
||||
android:id="@+id/radar_elevation"
|
||||
style="@style/RadarText"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:text="@string/card_pass_los_time"
|
||||
android:text="@string/radar_elevation"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/radar_sky_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_altitude"
|
||||
style="@style/RadarText"
|
||||
android:layout_marginStart="4dp"
|
||||
android:text="@string/radar_altitude"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/radar_sky_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_range"
|
||||
style="@style/RadarText"
|
||||
android:layout_marginEnd="4dp"
|
||||
android:text="@string/radar_range"
|
||||
app:layout_constraintBottom_toBottomOf="@+id/radar_sky_frame"
|
||||
app:layout_constraintEnd_toEndOf="@+id/radar_sky_frame" />
|
||||
|
||||
@@ -53,24 +54,16 @@
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/radar_trans_header" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_trans_header"
|
||||
style="@style/RadarText"
|
||||
android:text="@string/trans_header"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/radar_sky_frame" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/radar_trans_no_found"
|
||||
android:id="@+id/radar_no_trans"
|
||||
style="@style/RadarText"
|
||||
android:layout_marginTop="8dp"
|
||||
android:text="@string/no_trans"
|
||||
android:visibility="invisible"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/radar_trans_header" />
|
||||
app:layout_constraintTop_toBottomOf="@+id/radar_sky_frame" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -27,6 +27,11 @@
|
||||
<string name="card_pass_aos_time">AOS - 13:14:15</string>
|
||||
<string name="card_pass_los_time">LOS - 16:17:18</string>
|
||||
|
||||
<string name="radar_azimuth">Azimuth: 180.00°</string>
|
||||
<string name="radar_elevation">Elevation: 75.50°</string>
|
||||
<string name="radar_altitude">Altitude: 850 km</string>
|
||||
<string name="radar_range">Range: 12000 km</string>
|
||||
|
||||
<string name="btn_ok">OK</string>
|
||||
<string name="btn_cancel">Cancel</string>
|
||||
<string name="btn_clear">Clear All</string>
|
||||
|
||||
@@ -88,13 +88,15 @@
|
||||
<style name="RadarText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textSize">14sp</item>
|
||||
<item name="android:textColor">@color/lightOnDark</item>
|
||||
<item name="android:textSize">15sp</item>
|
||||
</style>
|
||||
|
||||
<style name="CardTransText">
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:textSize">16sp</item>
|
||||
<item name="android:textColor">@color/lightOnDark</item>
|
||||
<item name="android:textSize">15sp</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
Reference in new issue
Block a user