Added satellite orbital velocity calculation function

This commit is contained in:
Arty Bishop committed 2020-09-19 20:19:42 +01:00
1 parent 7402b73ffe
commit e37ac8e2ba
2 files changed
+28 -15

No files matched your search

@@ -5,11 +5,10 @@ import android.graphics.ColorMatrix
import android.graphics.ColorMatrixColorFilter
import android.graphics.Paint
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
@@ -37,6 +36,8 @@ import org.osmdroid.views.CustomZoomButtonsController
import org.osmdroid.views.overlay.*
import java.util.*
import javax.inject.Inject
import kotlin.math.pow
import kotlin.math.sqrt
class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
@@ -120,7 +121,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
}
private fun setupObservers() {
viewModel.getGSP().observe(viewLifecycleOwner, Observer { stationPosition ->
viewModel.getGSP().observe(viewLifecycleOwner, { stationPosition ->
when (stationPosition) {
is Result.Success -> {
setupPosOverlay(stationPosition.data)
@@ -128,7 +129,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
}
})
viewModel.getPassList().observe(viewLifecycleOwner, Observer { satPasses ->
viewModel.getPassList().observe(viewLifecycleOwner, { satPasses ->
when (satPasses) {
is Result.Success -> {
if (satPasses.data.isNotEmpty()) {
@@ -145,7 +146,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
Marker(binding.mapView).apply {
setInfoWindow(null)
setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
icon = resources.getDrawable(R.drawable.ic_map_pos, mainActivity.theme)
icon = ResourcesCompat.getDrawable(resources, R.drawable.ic_map_pos, mainActivity.theme)
position = GeoPoint(gsp.latitude, gsp.longitude)
binding.mapView.overlays[0] = this
binding.mapView.invalidate()
@@ -166,7 +167,8 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
private suspend fun getSatIcons(passList: List<SatPass>): Overlay =
withContext(Dispatchers.Default) {
val icon = resources.getDrawable(R.drawable.ic_map_sat, mainActivity.theme)
val icon =
ResourcesCompat.getDrawable(resources, R.drawable.ic_map_sat, mainActivity.theme)
val items = mutableListOf<SatItem>()
passList.forEach {
@@ -196,7 +198,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
}
}
return@withContext ItemizedIconOverlay<SatItem>(items, icon, listener, mainActivity)
return@withContext ItemizedIconOverlay(items, icon, listener, mainActivity)
}
private fun setSatDetails(satPass: SatPass) {
@@ -208,7 +210,19 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
private fun setSatInfo(satPass: SatPass) {
val satPos = satPass.predictor.getSatPos(dateNow)
Log.d("myTag", satPos.toString())
val satRng = satPos.range
val satAlt = satPos.altitude
val satVel = getSatVelocity(satAlt)
val satLat = Math.toDegrees(satPos.latitude).toFloat()
var satLon = Math.toDegrees(satPos.longitude).toFloat()
if (satLon > 180f) satLon -= 360f
}
private fun getSatVelocity(satAlt: Double): Double {
val earthG = 6.674 * 10.0.pow(-11)
val earthM = 5.98 * 10.0.pow(24)
val orbitRadius = 6.37 * 10.0.pow(6) + satAlt * 10.0.pow(3)
return sqrt(earthG * earthM / orbitRadius) / 1000
}
private fun getSatTrack(pass: SatPass): Overlay {
@@ -67,13 +67,13 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) {
}
private fun setupObservers(binding: FragmentMapViewBinding) {
viewModel.getGSP().observe(viewLifecycleOwner, androidx.lifecycle.Observer { result ->
viewModel.getGSP().observe(viewLifecycleOwner, { result ->
when (result) {
is Result.Success -> gsp = result.data
}
})
viewModel.getPassList().observe(viewLifecycleOwner, androidx.lifecycle.Observer { result ->
viewModel.getPassList().observe(viewLifecycleOwner, { result ->
when (result) {
is Result.Success -> {
satPassList = result.data
@@ -135,11 +135,10 @@ class MapViewFragment : Fragment(R.layout.fragment_map_view) {
private fun setDataToTextViews() {
val currentTime = Date(System.currentTimeMillis())
val orbitalPeriod = (24 * 60 / selectedSat.meanmo).toInt()
val positions = predictor.getPositions(currentTime, 60, 0, orbitalPeriod * 3)
var lon = Math.toDegrees(positions[0].longitude).toFloat()
val lat = Math.toDegrees(positions[0].latitude).toFloat()
val rng = positions[0].range
val position = predictor.getSatPos(currentTime)
var lon = Math.toDegrees(position.longitude).toFloat()
val lat = Math.toDegrees(position.latitude).toFloat()
val rng = position.range
if (lon > 180f) lon -= 360f