mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Ground track revised
This commit is contained in:
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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user