diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 870b38e9..998bbbdc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,8 +2,9 @@ - + + ) { - val footprintPoints = satFootprint.map { GeoPoint(it.latitude, it.longitude) } - val footprintOverlay = Polygon().apply { - fillPaint.set(footprintPaint) + private fun handleFootprint(satPos: SatPos) { + val center = GeoPoint(Math.toDegrees(satPos.latitude), Math.toDegrees(satPos.longitude)) + val radiusM = satPos.getRangeCircleRadiusKm() * 1000 + val footprintPoints = mutableListOf() + for (i in 0..720) { + footprintPoints.add(center.destinationPoint(radiusM, i.toDouble())) + } + val footprintOverlay = Polyline().apply { outlinePaint.set(footprintPaint) try { - this.points = footprintPoints + setPoints(footprintPoints) } catch (exception: IllegalArgumentException) { println(exception.stackTraceToString()) } @@ -180,8 +185,8 @@ class MapFragment : Fragment(R.layout.fragment_map) { private fun handleMapData(mapData: MapData) { binding.apply { - mapDataName.text = - String.format(getString(R.string.pat_osm_idName), mapData.catNum, mapData.name) + mapTitle.text = mapData.name + mapDataId.text = String.format(getString(R.string.map_sat_id), mapData.catNum) mapDataQth.text = String.format(getString(R.string.map_qth), mapData.qthLoc) mapDataAlt.text = String.format(getString(R.string.pat_altitude), mapData.altitude) mapDataDst.text = String.format(getString(R.string.pat_distance), mapData.range) diff --git a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt index e5b282ed..6b9ab4c0 100644 --- a/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt +++ b/app/src/main/java/com/rtbishop/look4sat/presentation/mapScreen/MapViewModel.kt @@ -23,6 +23,7 @@ import com.rtbishop.look4sat.domain.ISettings import com.rtbishop.look4sat.domain.QthConverter import com.rtbishop.look4sat.domain.predict.GeoPos import com.rtbishop.look4sat.domain.predict.Predictor +import com.rtbishop.look4sat.domain.predict.SatPos import com.rtbishop.look4sat.domain.predict.Satellite import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.* @@ -53,8 +54,8 @@ class MapViewModel @Inject constructor( private val _track = MutableLiveData>>() val track: LiveData>> = _track - private val _footprint = MutableLiveData>() - val footprint: LiveData> = _footprint + private val _footprint = MutableLiveData() + val footprint: LiveData = _footprint private val _mapData = MutableLiveData() val mapData: LiveData = this._mapData @@ -151,12 +152,7 @@ class MapViewModel @Inject constructor( private suspend fun getSatFootprint(satellite: Satellite, pos: GeoPos, date: Date) { val satPos = predictor.getSatPos(satellite, pos, date.time) - val satFootprint = satPos.getRangeCircle().map { rangePos -> - val osmLat = clipLat(rangePos.latitude) - val osmLon = clipLon(rangePos.longitude) - GeoPos(osmLat, osmLon) - } - _footprint.postValue(satFootprint) + _footprint.postValue(satPos) } private suspend fun getSatData(satellite: Satellite, pos: GeoPos, date: Date) { diff --git a/app/src/main/res/layout/fragment_entries.xml b/app/src/main/res/layout/fragment_entries.xml index 331afbbd..8173b5eb 100644 --- a/app/src/main/res/layout/fragment_entries.xml +++ b/app/src/main/res/layout/fragment_entries.xml @@ -18,11 +18,13 @@ diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml index 7a3c2708..857d4001 100644 --- a/app/src/main/res/layout/fragment_map.xml +++ b/app/src/main/res/layout/fragment_map.xml @@ -22,6 +22,12 @@ @@ -86,7 +92,7 @@ style="@style/WorldMapText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginStart="8dp" + android:layout_marginStart="10dp" android:layout_marginTop="6dp" android:text="@string/pat_osm_lat" app:layout_constraintStart_toStartOf="parent" @@ -119,7 +125,7 @@ style="@style/WorldMapText" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginEnd="8dp" + android:layout_marginEnd="10dp" android:text="@string/pat_altitude" app:layout_constraintBaseline_toBaselineOf="@+id/map_data_lat" app:layout_constraintEnd_toEndOf="parent" /> @@ -172,7 +178,7 @@ app:layout_constraintTop_toTopOf="@+id/map_coordinator" /> diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f762042d..bc9b94bc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -63,6 +63,8 @@ Карта Мира QTH Локатор: %s Покрытие: %.0fкм + Id: %d + %s Азим. %.1f° diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4a42bf73..5def0cdd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,6 +74,8 @@ World Map QTH Locator: %s Coverage: %.0f km + Id: %d + %s Wikimedia maps | Map data © OpenStreetMap contributors Azimuth diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index b6701ce1..1056313f 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -57,6 +57,8 @@ center @color/transparent center + 1 + end false @color/accent @color/accent diff --git a/core/src/main/java/com/rtbishop/look4sat/domain/predict/SatPos.kt b/core/src/main/java/com/rtbishop/look4sat/domain/predict/SatPos.kt index e6006c63..0d338910 100644 --- a/core/src/main/java/com/rtbishop/look4sat/domain/predict/SatPos.kt +++ b/core/src/main/java/com/rtbishop/look4sat/domain/predict/SatPos.kt @@ -51,7 +51,6 @@ data class SatPos( fun getRangeCircle(): List { val positions = mutableListOf() val beta = acos(earthRadiusKm / (earthRadiusKm + altitude)) -// val radiusKm = earthRadiusKm * acos(earthRadiusKm / (earthRadiusKm + altitude)) var tempAzimuth = 0 while (tempAzimuth < 360) { val azimuth = tempAzimuth / 360.0 * 2.0 * Math.PI @@ -80,4 +79,8 @@ data class SatPos( } return positions } + + fun getRangeCircleRadiusKm(): Double { + return earthRadiusKm * acos(earthRadiusKm / (earthRadiusKm + altitude)) + } }