From 158fb84f5b21380cc5779d450d1ebb80a3d69ebc Mon Sep 17 00:00:00 2001 From: Arty Bishop Date: Sun, 22 Dec 2019 21:25:16 +0000 Subject: [PATCH] Drawing all shortlisted satellites now, but showing the ground track only for the selected one. --- .../lookingsat/ui/WorldMapFragment.kt | 43 +++++++++++++------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt b/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt index 37c49778..c5fbe560 100644 --- a/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt +++ b/app/src/main/java/com/rtbishop/lookingsat/ui/WorldMapFragment.kt @@ -20,10 +20,7 @@ package com.rtbishop.lookingsat.ui import android.content.Context -import android.graphics.Canvas -import android.graphics.Paint -import android.graphics.Path -import android.graphics.Rect +import android.graphics.* import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -56,6 +53,8 @@ class WorldMapFragment : Fragment() { private lateinit var predictor: PassPredictor private lateinit var mainActivity: MainActivity private lateinit var selectedSat: TLE + private lateinit var tleMainList: List + private lateinit var selectionList: MutableList private var checkedItem = 0 override fun onCreate(savedInstanceState: Bundle?) { @@ -75,8 +74,8 @@ class WorldMapFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val delay = viewModel.updateFreq - val tleMainList = viewModel.tleMainList - val selectionList = viewModel.selectionList + tleMainList = viewModel.tleMainList + selectionList = viewModel.selectionList mapFrame = view.findViewById(R.id.worldmap_frame) fab = view.findViewById(R.id.worldmap_fab) @@ -141,6 +140,14 @@ class WorldMapFragment : Fragment() { style = Paint.Style.FILL strokeWidth = scale 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() @@ -155,10 +162,9 @@ class WorldMapFragment : Fragment() { val satPosList = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3) drawGroundTrack(canvas, degLon, degLat, satPosList) - val satPosNow = predictor.getSatPos(currentTime) - val footprintPosList = satPosNow.rangeCircle - drawFootprint(canvas, degLon, degLat, footprintPosList) - drawName(canvas, degLon, degLat, satPosNow) + selectionList.forEach { + drawSat(it, currentTime, canvas, degLon, degLat) + } } private fun drawHomeLoc(cvs: Canvas, degLon: Float, degLat: Float) { @@ -193,6 +199,15 @@ class WorldMapFragment : Fragment() { 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) { val path = Path() var lon: Float @@ -216,15 +231,15 @@ class WorldMapFragment : Fragment() { cvs.drawPath(path, footprintPaint) } - private fun drawName(cvs: Canvas, degLon: Float, degLat: Float, satPosNow: SatPos) { - var lon = rad2Deg(satPosNow.longitude).toFloat() - val lat = rad2Deg(satPosNow.latitude).toFloat() * -1 + private fun drawName(cvs: Canvas, degLon: Float, degLat: Float, pos: SatPos, name: String) { + var lon = rad2Deg(pos.longitude).toFloat() + val lat = rad2Deg(pos.latitude).toFloat() * -1 if (lon > 180f) lon -= 360f val cx = lon * degLon val cy = lat * degLat cvs.drawCircle(cx, cy, scale * 2, txtPaint) - val name = selectedSat.name 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) }