diff --git a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/MapFragment.kt b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/MapFragment.kt index bad93a9b..17ff9fa4 100644 --- a/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/MapFragment.kt +++ b/app/src/main/java/com/rtbishop/look4sat/ui/mainScreen/MapFragment.kt @@ -18,6 +18,7 @@ import com.rtbishop.look4sat.SharedViewModel import com.rtbishop.look4sat.data.Result import com.rtbishop.look4sat.data.SatPass import com.rtbishop.look4sat.databinding.FragmentMapBinding +import com.rtbishop.look4sat.utility.Utilities import dagger.hilt.android.AndroidEntryPoint import org.osmdroid.config.Configuration import org.osmdroid.tileprovider.tilesource.ITileSource @@ -38,10 +39,12 @@ class MapFragment : Fragment(R.layout.fragment_map) { private lateinit var trackPaint: Paint private lateinit var footprintPaint: Paint private lateinit var nameFormat: String + private lateinit var qthFormat: String private lateinit var altFormat: String private lateinit var distFormat: String private lateinit var velFormat: String private lateinit var latLonFormat: String + private lateinit var coverageFormat: String private lateinit var selectedSat: SatPass private val dateNow = Date() private val viewModel: MapViewModel by viewModels() @@ -72,10 +75,12 @@ class MapFragment : Fragment(R.layout.fragment_map) { isAntiAlias = true } nameFormat = getString(R.string.pat_osm_idName) + qthFormat = getString(R.string.map_qth) altFormat = getString(R.string.pat_altitude) distFormat = getString(R.string.pat_distance) velFormat = getString(R.string.pat_osm_vel) latLonFormat = getString(R.string.pat_osm_latLon) + coverageFormat = getString(R.string.map_coverage) } private fun setupMapView() { @@ -135,12 +140,15 @@ class MapFragment : Fragment(R.layout.fragment_map) { private fun setSelectedSatDetails(satPass: SatPass) { val satPos = satPass.predictor.getSatPos(dateNow) val osmPos = viewModel.getOsmPosition(satPos.latitude, satPos.longitude, true) + val qthLoc = Utilities.locToQTH(osmPos.lat, osmPos.lon) binding?.apply { idName.text = String.format(nameFormat, satPass.tle.catnum, satPass.tle.name) + qthLocator.text = String.format(qthFormat, qthLoc) altitude.text = String.format(altFormat, satPos.altitude) distance.text = String.format(distFormat, satPos.range) velocity.text = String.format(velFormat, viewModel.getSatVelocity(satPos.altitude)) latLon.text = String.format(latLonFormat, osmPos.lat, osmPos.lon) + mapCoverage.text = String.format(coverageFormat, satPos.rangeCircleRadiusKm * 2) mapView.overlays[1] = getSatTrack(satPass) mapView.overlays[2] = getSatFootprint(satPass) mapView.invalidate() @@ -178,7 +186,6 @@ class MapFragment : Fragment(R.layout.fragment_map) { val trackOverlay = FolderOverlay() val trackPoints = mutableListOf() var oldLon = 0.0 - positions.forEach { val osmPos = viewModel.getOsmPosition(it.latitude, it.longitude, true) if (oldLon < -170.0 && osmPos.lon > 170.0 || oldLon > 170.0 && osmPos.lon < -170.0) { @@ -194,7 +201,6 @@ class MapFragment : Fragment(R.layout.fragment_map) { oldLon = osmPos.lon trackPoints.add(GeoPoint(osmPos.lat, osmPos.lon)) } - Polyline().apply { outlinePaint.set(trackPaint) setPoints(trackPoints) @@ -204,17 +210,11 @@ class MapFragment : Fragment(R.layout.fragment_map) { } private fun getSatFootprint(pass: SatPass): Overlay { - val rangeCircle = pass.predictor.getSatPos(dateNow).rangeCircle val rangePoints = mutableListOf() - var zeroPoint = GeoPoint(0.0, 0.0) - - rangeCircle.withIndex().forEach { + pass.predictor.getSatPos(dateNow).rangeCircle.withIndex().forEach { val osmPos = viewModel.getOsmPosition(it.value.lat, it.value.lon, false) - if (it.index == 0) zeroPoint = GeoPoint(osmPos.lat, osmPos.lon) rangePoints.add(GeoPoint(osmPos.lat, osmPos.lon)) } - - rangePoints.add(zeroPoint) return Polygon().apply { fillPaint.set(footprintPaint) outlinePaint.set(footprintPaint) diff --git a/app/src/main/res/layout/fragment_map.xml b/app/src/main/res/layout/fragment_map.xml index 027bc1c8..3eef6cf7 100644 --- a/app/src/main/res/layout/fragment_map.xml +++ b/app/src/main/res/layout/fragment_map.xml @@ -24,13 +24,15 @@ android:keepScreenOn="true"> + app:layout_constraintTop_toTopOf="parent"> + + + + + app:layout_constraintStart_toStartOf="@+id/altitude" + app:layout_constraintTop_toBottomOf="@+id/latLon" /> + app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintBaseline_toBaselineOf="@+id/altitude" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toEndOf="@+id/altitude" /> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@+id/qthLocator" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintHorizontal_chainStyle="spread_inside" + app:layout_constraintStart_toStartOf="@+id/altitude" + app:layout_constraintTop_toBottomOf="@+id/idName" /> + app:layout_constraintBaseline_toBaselineOf="@+id/altitude" + app:layout_constraintEnd_toEndOf="@+id/distance" + app:layout_constraintStart_toStartOf="@+id/altitude" /> + + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c3d2dc3d..55dc33fd 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -49,10 +49,12 @@ Инверсия: %s Не найдены трансиверы для этого спутника + Покрытие: %.0f км + Азим: %.1f° Элев: %.1f° - Дист: %.0fкм - Выс: %.0fкм + Дист: %.0f км + Выс: %.0f км Шир: %.1f°, Дол: %.1f° Скор: %.2f км/с diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c3ff255a..714c36a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -63,13 +63,15 @@ %.4f - %.4f No transceivers found for this satellite + QTH: %s + Coverage: %.0f km Wikimedia maps | Map data © OpenStreetMap contributors Az: %.1f° El: %.1f° Dst: %.0f km Alt: %.0f km - %s / %s + Id:%s / %s Lat: %.1f°, Lon: %.1f° Vel: %.2f km/s