mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-05 04:07:29 +00:00
Drawing all shortlisted satellites now, but showing the ground track only for the selected one.
This commit is contained in:
1 parent
ac56db3a56
commit
158fb84f5b
1 file changed
+29
-14
@@ -20,10 +20,7 @@
|
|||||||
package com.rtbishop.lookingsat.ui
|
package com.rtbishop.lookingsat.ui
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.*
|
||||||
import android.graphics.Paint
|
|
||||||
import android.graphics.Path
|
|
||||||
import android.graphics.Rect
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@@ -56,6 +53,8 @@ class WorldMapFragment : Fragment() {
|
|||||||
private lateinit var predictor: PassPredictor
|
private lateinit var predictor: PassPredictor
|
||||||
private lateinit var mainActivity: MainActivity
|
private lateinit var mainActivity: MainActivity
|
||||||
private lateinit var selectedSat: TLE
|
private lateinit var selectedSat: TLE
|
||||||
|
private lateinit var tleMainList: List<TLE>
|
||||||
|
private lateinit var selectionList: MutableList<Int>
|
||||||
private var checkedItem = 0
|
private var checkedItem = 0
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
@@ -75,8 +74,8 @@ class WorldMapFragment : Fragment() {
|
|||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
val delay = viewModel.updateFreq
|
val delay = viewModel.updateFreq
|
||||||
val tleMainList = viewModel.tleMainList
|
tleMainList = viewModel.tleMainList
|
||||||
val selectionList = viewModel.selectionList
|
selectionList = viewModel.selectionList
|
||||||
mapFrame = view.findViewById(R.id.worldmap_frame)
|
mapFrame = view.findViewById(R.id.worldmap_frame)
|
||||||
fab = view.findViewById(R.id.worldmap_fab)
|
fab = view.findViewById(R.id.worldmap_fab)
|
||||||
|
|
||||||
@@ -141,6 +140,14 @@ class WorldMapFragment : Fragment() {
|
|||||||
style = Paint.Style.FILL
|
style = Paint.Style.FILL
|
||||||
strokeWidth = scale
|
strokeWidth = scale
|
||||||
textSize = 16f
|
textSize = 16f
|
||||||
|
setShadowLayer(2f, 2f, 2f, Color.BLACK)
|
||||||
|
}
|
||||||
|
private val outlinePaint = Paint().apply {
|
||||||
|
isAntiAlias = true
|
||||||
|
color = Color.BLACK
|
||||||
|
style = Paint.Style.FILL_AND_STROKE
|
||||||
|
strokeWidth = scale
|
||||||
|
textSize = 16f
|
||||||
}
|
}
|
||||||
private val rect = Rect()
|
private val rect = Rect()
|
||||||
|
|
||||||
@@ -155,10 +162,9 @@ class WorldMapFragment : Fragment() {
|
|||||||
val satPosList = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3)
|
val satPosList = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3)
|
||||||
drawGroundTrack(canvas, degLon, degLat, satPosList)
|
drawGroundTrack(canvas, degLon, degLat, satPosList)
|
||||||
|
|
||||||
val satPosNow = predictor.getSatPos(currentTime)
|
selectionList.forEach {
|
||||||
val footprintPosList = satPosNow.rangeCircle
|
drawSat(it, currentTime, canvas, degLon, degLat)
|
||||||
drawFootprint(canvas, degLon, degLat, footprintPosList)
|
}
|
||||||
drawName(canvas, degLon, degLat, satPosNow)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun drawHomeLoc(cvs: Canvas, degLon: Float, degLat: Float) {
|
private fun drawHomeLoc(cvs: Canvas, degLon: Float, degLat: Float) {
|
||||||
@@ -193,6 +199,15 @@ class WorldMapFragment : Fragment() {
|
|||||||
cvs.drawPath(path, groundTrackPaint)
|
cvs.drawPath(path, groundTrackPaint)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun drawSat(index: Int, date: Date, canvas: Canvas, degLon: Float, degLat: Float) {
|
||||||
|
val tle = tleMainList[index]
|
||||||
|
val predictor = PassPredictor(tle, gsp)
|
||||||
|
val satPosNow = predictor.getSatPos(date)
|
||||||
|
val footprintPosList = satPosNow.rangeCircle
|
||||||
|
drawFootprint(canvas, degLon, degLat, footprintPosList)
|
||||||
|
drawName(canvas, degLon, degLat, satPosNow, tle.name)
|
||||||
|
}
|
||||||
|
|
||||||
private fun drawFootprint(cvs: Canvas, degLon: Float, degLat: Float, list: List<Position>) {
|
private fun drawFootprint(cvs: Canvas, degLon: Float, degLat: Float, list: List<Position>) {
|
||||||
val path = Path()
|
val path = Path()
|
||||||
var lon: Float
|
var lon: Float
|
||||||
@@ -216,15 +231,15 @@ class WorldMapFragment : Fragment() {
|
|||||||
cvs.drawPath(path, footprintPaint)
|
cvs.drawPath(path, footprintPaint)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun drawName(cvs: Canvas, degLon: Float, degLat: Float, satPosNow: SatPos) {
|
private fun drawName(cvs: Canvas, degLon: Float, degLat: Float, pos: SatPos, name: String) {
|
||||||
var lon = rad2Deg(satPosNow.longitude).toFloat()
|
var lon = rad2Deg(pos.longitude).toFloat()
|
||||||
val lat = rad2Deg(satPosNow.latitude).toFloat() * -1
|
val lat = rad2Deg(pos.latitude).toFloat() * -1
|
||||||
if (lon > 180f) lon -= 360f
|
if (lon > 180f) lon -= 360f
|
||||||
val cx = lon * degLon
|
val cx = lon * degLon
|
||||||
val cy = lat * degLat
|
val cy = lat * degLat
|
||||||
cvs.drawCircle(cx, cy, scale * 2, txtPaint)
|
cvs.drawCircle(cx, cy, scale * 2, txtPaint)
|
||||||
val name = selectedSat.name
|
|
||||||
txtPaint.getTextBounds(name, 0, name.length, rect)
|
txtPaint.getTextBounds(name, 0, name.length, rect)
|
||||||
|
cvs.drawText(name, cx - rect.width() / 2, cy - txtPaint.textSize, outlinePaint)
|
||||||
cvs.drawText(name, cx - rect.width() / 2, cy - txtPaint.textSize, txtPaint)
|
cvs.drawText(name, cx - rect.width() / 2, cy - txtPaint.textSize, txtPaint)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user