Ground track revised

This commit is contained in:
Arty Bishop committed 2020-09-19 20:19:41 +01:00
1 parent 18d4d1319f
commit b47e94fee7
1 file changed
+37 -26
@@ -13,6 +13,7 @@ import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.github.amsacode.predict4java.GroundStationPosition import com.github.amsacode.predict4java.GroundStationPosition
import com.github.amsacode.predict4java.SatPos
import com.rtbishop.look4sat.Look4SatApp import com.rtbishop.look4sat.Look4SatApp
import com.rtbishop.look4sat.R import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.dagger.ViewModelFactory import com.rtbishop.look4sat.dagger.ViewModelFactory
@@ -43,7 +44,14 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
private lateinit var viewModel: SharedViewModel private lateinit var viewModel: SharedViewModel
private lateinit var binding: FragmentMapOsmBinding private lateinit var binding: FragmentMapOsmBinding
private var satLayer: FolderOverlay = FolderOverlay() private var satLayer: FolderOverlay = FolderOverlay()
private var groundTrackLayer = FolderOverlay() private val trackPaint = Paint().apply {
strokeWidth = 2f
style = Paint.Style.FILL_AND_STROKE
color = Color.RED
strokeCap = Paint.Cap.ROUND
strokeJoin = Paint.Join.ROUND
isAntiAlias = true
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@@ -149,41 +157,44 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
setInfoWindow(null) setInfoWindow(null)
setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM) setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
setOnMarkerClickListener { _, _ -> setOnMarkerClickListener { _, _ ->
showSatGroundTrack(pass) val period = (24 * 60 / pass.tle.meanmo).toInt()
val positions = pass.predictor.getPositions(date, 20, 0, period * 3)
showSatGroundTrack(positions)
return@setOnMarkerClickListener true return@setOnMarkerClickListener true
} }
} }
} }
private fun showSatGroundTrack(pass: SatPass) { private fun showSatGroundTrack(positions: List<SatPos>) {
val dateNow = Date(System.currentTimeMillis()) val tracksOverlay = FolderOverlay()
val period = (24 * 60 / pass.tle.meanmo).toInt()
val positions = pass.predictor.getPositions(dateNow, 15, 3, period)
val track = Polyline(binding.mapView)
val trackPoints = mutableListOf<GeoPoint>() val trackPoints = mutableListOf<GeoPoint>()
val trackPaint = Paint().apply { var oldLon = 0.0
strokeWidth = mainActivity.resources.displayMetrics.scaledDensity
style = Paint.Style.FILL_AND_STROKE
color = Color.RED
strokeCap = Paint.Cap.ROUND
strokeJoin = Paint.Join.ROUND
isAntiAlias = true
}
track.outlinePaint.set(trackPaint)
positions.forEach { positions.forEach {
val lat = Math.toDegrees(it.latitude) val newLat = Math.toDegrees(it.latitude)
var lon = Math.toDegrees(it.longitude) var newLon = Math.toDegrees(it.longitude)
if (lon > 180.0) lon -= 360.0 if (newLon > 180.0) newLon -= 360.0
trackPoints.add(GeoPoint(lat, lon))
if (oldLon < -170.0 && newLon > 170.0 || oldLon > 170.0 && newLon < -170.0) {
val currentPoints = mutableListOf<GeoPoint>()
currentPoints.addAll(trackPoints)
val completeTrack = Polyline()
completeTrack.outlinePaint.set(trackPaint)
completeTrack.setPoints(currentPoints)
tracksOverlay.add(completeTrack)
trackPoints.clear()
} }
track.setPoints(trackPoints) oldLon = newLon
groundTrackLayer = FolderOverlay() trackPoints.add(GeoPoint(newLat, newLon))
groundTrackLayer.add(track) }
binding.mapView.overlays.add(groundTrackLayer)
val completeTrack = Polyline()
completeTrack.outlinePaint.set(trackPaint)
completeTrack.setPoints(trackPoints)
tracksOverlay.add(completeTrack)
binding.mapView.overlays.add(tracksOverlay)
binding.mapView.invalidate() binding.mapView.invalidate()
} }