mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Swapped the satellite FolderOverlay for an ItemizedOverlay
This commit is contained in:
1 parent
df39d5c70b
commit
57a9012f98
2 files changed
+47
-55
No files matched your search
@@ -7,6 +7,7 @@ import android.graphics.Paint
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -148,7 +149,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
||||
val positionMarker = Marker(binding.mapView).apply {
|
||||
this.position = startPoint
|
||||
textLabelBackgroundColor = Color.TRANSPARENT
|
||||
textLabelForegroundColor = Color.YELLOW
|
||||
textLabelForegroundColor = ContextCompat.getColor(mainActivity, R.color.themeAccent)
|
||||
textLabelFontSize = 24
|
||||
setTextIcon("GSP")
|
||||
setInfoWindow(null)
|
||||
@@ -161,15 +162,14 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
||||
private fun setupSatOverlay(passList: List<SatPass>) {
|
||||
lifecycleScope.launch {
|
||||
while (true) {
|
||||
val satRanges = getSatRanges(passList)
|
||||
val dateNow = Date(System.currentTimeMillis())
|
||||
|
||||
val satRanges = getSatRanges(passList, dateNow)
|
||||
satRanges.forEach { satRangeOverlay.add(it) }
|
||||
binding.mapView.overlays[2] = satRangeOverlay
|
||||
satRangeOverlay = FolderOverlay()
|
||||
|
||||
val satMarkers = getSatMarkers(passList)
|
||||
satMarkers.forEach { satNameOverlay.add(it) }
|
||||
binding.mapView.overlays[3] = satNameOverlay
|
||||
satNameOverlay = FolderOverlay()
|
||||
binding.mapView.overlays[3] = getSatOverlay(passList, dateNow)
|
||||
|
||||
binding.mapView.invalidate()
|
||||
delay(3000)
|
||||
@@ -177,10 +177,9 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun getSatRanges(passList: List<SatPass>): List<Overlay> =
|
||||
private suspend fun getSatRanges(passList: List<SatPass>, dateNow: Date): List<Overlay> =
|
||||
withContext(Dispatchers.Default) {
|
||||
val satRanges = mutableListOf<Overlay>()
|
||||
val dateNow = Date(System.currentTimeMillis())
|
||||
passList.forEach {
|
||||
val satRange = getRangeForPass(it, dateNow)
|
||||
satRanges.add(satRange)
|
||||
@@ -214,42 +213,43 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
||||
return satRange
|
||||
}
|
||||
|
||||
private suspend fun getSatMarkers(passList: List<SatPass>): List<Overlay> =
|
||||
private suspend fun getSatOverlay(passList: List<SatPass>, dateNow: Date): Overlay =
|
||||
withContext(Dispatchers.Default) {
|
||||
val satMarkers = mutableListOf<Overlay>()
|
||||
val dateNow = Date(System.currentTimeMillis())
|
||||
val satIcon = resources.getDrawable(R.drawable.ic_map_sat, mainActivity.theme)
|
||||
val overlayItems = mutableListOf<OverlayItem>()
|
||||
|
||||
passList.forEach {
|
||||
val satMarker = getMarkerForPass(it, dateNow)
|
||||
satMarkers.add(satMarker)
|
||||
val satPos = it.predictor.getSatPos(dateNow)
|
||||
var lat = Math.toDegrees(satPos.latitude)
|
||||
var lon = Math.toDegrees(satPos.longitude)
|
||||
|
||||
if (lat > 85.05) lat = 85.05
|
||||
else if (lat < -85.05) lat = -85.05
|
||||
if (lon > 180.0) lon -= 360.0
|
||||
|
||||
val item = OverlayItem(it.tle.name, it.tle.name, GeoPoint(lat, lon))
|
||||
item.markerHotspot = OverlayItem.HotspotPlace.CENTER
|
||||
overlayItems.add(item)
|
||||
}
|
||||
return@withContext satMarkers
|
||||
}
|
||||
|
||||
private fun getMarkerForPass(pass: SatPass, date: Date): Marker {
|
||||
val satPos = pass.predictor.getSatPos(date)
|
||||
var lat = Math.toDegrees(satPos.latitude)
|
||||
var lon = Math.toDegrees(satPos.longitude)
|
||||
val listener = object : ItemizedIconOverlay.OnItemGestureListener<OverlayItem> {
|
||||
override fun onItemLongPress(index: Int, item: OverlayItem): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
if (lat > 85.05) lat = 85.05
|
||||
else if (lat < -85.05) lat = -85.05
|
||||
if (lon > 180.0) lon -= 360.0
|
||||
|
||||
return Marker(binding.mapView).apply {
|
||||
position = GeoPoint(lat, lon)
|
||||
textLabelBackgroundColor = Color.TRANSPARENT
|
||||
textLabelForegroundColor = Color.YELLOW
|
||||
textLabelFontSize = 24
|
||||
setTextIcon(pass.tle.name)
|
||||
setInfoWindow(null)
|
||||
setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
|
||||
setOnMarkerClickListener { _, _ ->
|
||||
val period = (24 * 60 / pass.tle.meanmo).toInt()
|
||||
val positions = pass.predictor.getPositions(date, 20, 0, period * 3)
|
||||
showSatGroundTrack(positions)
|
||||
return@setOnMarkerClickListener true
|
||||
override fun onItemSingleTapUp(index: Int, item: OverlayItem): Boolean {
|
||||
Log.d("myTag", item.title)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return@withContext ItemizedIconOverlay<OverlayItem>(
|
||||
overlayItems,
|
||||
satIcon,
|
||||
listener,
|
||||
mainActivity
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun showSatGroundTrack(positions: List<SatPos>) {
|
||||
val trackPoints = mutableListOf<GeoPoint>()
|
||||
@@ -282,24 +282,6 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
||||
binding.mapView.invalidate()
|
||||
}
|
||||
|
||||
private fun getItemizedOverlay(): Overlay {
|
||||
val items = mutableListOf<OverlayItem>()
|
||||
items.add(OverlayItem("Title", "Description", GeoPoint(0.0, 0.0)))
|
||||
|
||||
val listener = object : ItemizedIconOverlay.OnItemGestureListener<OverlayItem> {
|
||||
override fun onItemLongPress(index: Int, item: OverlayItem): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onItemSingleTapUp(index: Int, item: OverlayItem): Boolean {
|
||||
Log.d("myTag", item.title)
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return ItemizedIconOverlay<OverlayItem>(mainActivity, items, listener)
|
||||
}
|
||||
|
||||
private fun getColorFilter(targetColor: Int): ColorMatrixColorFilter {
|
||||
val newR = Color.red(targetColor) / 255f
|
||||
val newG = Color.green(targetColor) / 255f
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:tint="@color/themeAccent"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/themeAccent"
|
||||
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z" />
|
||||
</vector>
|
||||
Reference in new issue
Block a user