mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-06 12:37:26 +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.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
@@ -148,7 +149,7 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
|||||||
val positionMarker = Marker(binding.mapView).apply {
|
val positionMarker = Marker(binding.mapView).apply {
|
||||||
this.position = startPoint
|
this.position = startPoint
|
||||||
textLabelBackgroundColor = Color.TRANSPARENT
|
textLabelBackgroundColor = Color.TRANSPARENT
|
||||||
textLabelForegroundColor = Color.YELLOW
|
textLabelForegroundColor = ContextCompat.getColor(mainActivity, R.color.themeAccent)
|
||||||
textLabelFontSize = 24
|
textLabelFontSize = 24
|
||||||
setTextIcon("GSP")
|
setTextIcon("GSP")
|
||||||
setInfoWindow(null)
|
setInfoWindow(null)
|
||||||
@@ -161,15 +162,14 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
|||||||
private fun setupSatOverlay(passList: List<SatPass>) {
|
private fun setupSatOverlay(passList: List<SatPass>) {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
while (true) {
|
while (true) {
|
||||||
val satRanges = getSatRanges(passList)
|
val dateNow = Date(System.currentTimeMillis())
|
||||||
|
|
||||||
|
val satRanges = getSatRanges(passList, dateNow)
|
||||||
satRanges.forEach { satRangeOverlay.add(it) }
|
satRanges.forEach { satRangeOverlay.add(it) }
|
||||||
binding.mapView.overlays[2] = satRangeOverlay
|
binding.mapView.overlays[2] = satRangeOverlay
|
||||||
satRangeOverlay = FolderOverlay()
|
satRangeOverlay = FolderOverlay()
|
||||||
|
|
||||||
val satMarkers = getSatMarkers(passList)
|
binding.mapView.overlays[3] = getSatOverlay(passList, dateNow)
|
||||||
satMarkers.forEach { satNameOverlay.add(it) }
|
|
||||||
binding.mapView.overlays[3] = satNameOverlay
|
|
||||||
satNameOverlay = FolderOverlay()
|
|
||||||
|
|
||||||
binding.mapView.invalidate()
|
binding.mapView.invalidate()
|
||||||
delay(3000)
|
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) {
|
withContext(Dispatchers.Default) {
|
||||||
val satRanges = mutableListOf<Overlay>()
|
val satRanges = mutableListOf<Overlay>()
|
||||||
val dateNow = Date(System.currentTimeMillis())
|
|
||||||
passList.forEach {
|
passList.forEach {
|
||||||
val satRange = getRangeForPass(it, dateNow)
|
val satRange = getRangeForPass(it, dateNow)
|
||||||
satRanges.add(satRange)
|
satRanges.add(satRange)
|
||||||
@@ -214,42 +213,43 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
|||||||
return satRange
|
return satRange
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun getSatMarkers(passList: List<SatPass>): List<Overlay> =
|
private suspend fun getSatOverlay(passList: List<SatPass>, dateNow: Date): Overlay =
|
||||||
withContext(Dispatchers.Default) {
|
withContext(Dispatchers.Default) {
|
||||||
val satMarkers = mutableListOf<Overlay>()
|
val satIcon = resources.getDrawable(R.drawable.ic_map_sat, mainActivity.theme)
|
||||||
val dateNow = Date(System.currentTimeMillis())
|
val overlayItems = mutableListOf<OverlayItem>()
|
||||||
|
|
||||||
passList.forEach {
|
passList.forEach {
|
||||||
val satMarker = getMarkerForPass(it, dateNow)
|
val satPos = it.predictor.getSatPos(dateNow)
|
||||||
satMarkers.add(satMarker)
|
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 listener = object : ItemizedIconOverlay.OnItemGestureListener<OverlayItem> {
|
||||||
val satPos = pass.predictor.getSatPos(date)
|
override fun onItemLongPress(index: Int, item: OverlayItem): Boolean {
|
||||||
var lat = Math.toDegrees(satPos.latitude)
|
return true
|
||||||
var lon = Math.toDegrees(satPos.longitude)
|
}
|
||||||
|
|
||||||
if (lat > 85.05) lat = 85.05
|
override fun onItemSingleTapUp(index: Int, item: OverlayItem): Boolean {
|
||||||
else if (lat < -85.05) lat = -85.05
|
Log.d("myTag", item.title)
|
||||||
if (lon > 180.0) lon -= 360.0
|
return true
|
||||||
|
}
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return@withContext ItemizedIconOverlay<OverlayItem>(
|
||||||
|
overlayItems,
|
||||||
|
satIcon,
|
||||||
|
listener,
|
||||||
|
mainActivity
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private fun showSatGroundTrack(positions: List<SatPos>) {
|
private fun showSatGroundTrack(positions: List<SatPos>) {
|
||||||
val trackPoints = mutableListOf<GeoPoint>()
|
val trackPoints = mutableListOf<GeoPoint>()
|
||||||
@@ -282,24 +282,6 @@ class MapOsmFragment : Fragment(R.layout.fragment_map_osm) {
|
|||||||
binding.mapView.invalidate()
|
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 {
|
private fun getColorFilter(targetColor: Int): ColorMatrixColorFilter {
|
||||||
val newR = Color.red(targetColor) / 255f
|
val newR = Color.red(targetColor) / 255f
|
||||||
val newG = Color.green(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