mirror of
https://github.com/rt-bishop/Look4Sat.git
synced 2026-10-03 19:47:21 +00:00
Added more satellite info to the MapFragment.kt
This commit is contained in:
1 parent
2fac5814d8
commit
e9eba47429
4 files changed
+70
-31
No files matched your search
@@ -18,6 +18,7 @@ import com.rtbishop.look4sat.SharedViewModel
|
|||||||
import com.rtbishop.look4sat.data.Result
|
import com.rtbishop.look4sat.data.Result
|
||||||
import com.rtbishop.look4sat.data.SatPass
|
import com.rtbishop.look4sat.data.SatPass
|
||||||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||||
|
import com.rtbishop.look4sat.utility.Utilities
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import org.osmdroid.config.Configuration
|
import org.osmdroid.config.Configuration
|
||||||
import org.osmdroid.tileprovider.tilesource.ITileSource
|
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 trackPaint: Paint
|
||||||
private lateinit var footprintPaint: Paint
|
private lateinit var footprintPaint: Paint
|
||||||
private lateinit var nameFormat: String
|
private lateinit var nameFormat: String
|
||||||
|
private lateinit var qthFormat: String
|
||||||
private lateinit var altFormat: String
|
private lateinit var altFormat: String
|
||||||
private lateinit var distFormat: String
|
private lateinit var distFormat: String
|
||||||
private lateinit var velFormat: String
|
private lateinit var velFormat: String
|
||||||
private lateinit var latLonFormat: String
|
private lateinit var latLonFormat: String
|
||||||
|
private lateinit var coverageFormat: String
|
||||||
private lateinit var selectedSat: SatPass
|
private lateinit var selectedSat: SatPass
|
||||||
private val dateNow = Date()
|
private val dateNow = Date()
|
||||||
private val viewModel: MapViewModel by viewModels()
|
private val viewModel: MapViewModel by viewModels()
|
||||||
@@ -72,10 +75,12 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
isAntiAlias = true
|
isAntiAlias = true
|
||||||
}
|
}
|
||||||
nameFormat = getString(R.string.pat_osm_idName)
|
nameFormat = getString(R.string.pat_osm_idName)
|
||||||
|
qthFormat = getString(R.string.map_qth)
|
||||||
altFormat = getString(R.string.pat_altitude)
|
altFormat = getString(R.string.pat_altitude)
|
||||||
distFormat = getString(R.string.pat_distance)
|
distFormat = getString(R.string.pat_distance)
|
||||||
velFormat = getString(R.string.pat_osm_vel)
|
velFormat = getString(R.string.pat_osm_vel)
|
||||||
latLonFormat = getString(R.string.pat_osm_latLon)
|
latLonFormat = getString(R.string.pat_osm_latLon)
|
||||||
|
coverageFormat = getString(R.string.map_coverage)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupMapView() {
|
private fun setupMapView() {
|
||||||
@@ -135,12 +140,15 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
private fun setSelectedSatDetails(satPass: SatPass) {
|
private fun setSelectedSatDetails(satPass: SatPass) {
|
||||||
val satPos = satPass.predictor.getSatPos(dateNow)
|
val satPos = satPass.predictor.getSatPos(dateNow)
|
||||||
val osmPos = viewModel.getOsmPosition(satPos.latitude, satPos.longitude, true)
|
val osmPos = viewModel.getOsmPosition(satPos.latitude, satPos.longitude, true)
|
||||||
|
val qthLoc = Utilities.locToQTH(osmPos.lat, osmPos.lon)
|
||||||
binding?.apply {
|
binding?.apply {
|
||||||
idName.text = String.format(nameFormat, satPass.tle.catnum, satPass.tle.name)
|
idName.text = String.format(nameFormat, satPass.tle.catnum, satPass.tle.name)
|
||||||
|
qthLocator.text = String.format(qthFormat, qthLoc)
|
||||||
altitude.text = String.format(altFormat, satPos.altitude)
|
altitude.text = String.format(altFormat, satPos.altitude)
|
||||||
distance.text = String.format(distFormat, satPos.range)
|
distance.text = String.format(distFormat, satPos.range)
|
||||||
velocity.text = String.format(velFormat, viewModel.getSatVelocity(satPos.altitude))
|
velocity.text = String.format(velFormat, viewModel.getSatVelocity(satPos.altitude))
|
||||||
latLon.text = String.format(latLonFormat, osmPos.lat, osmPos.lon)
|
latLon.text = String.format(latLonFormat, osmPos.lat, osmPos.lon)
|
||||||
|
mapCoverage.text = String.format(coverageFormat, satPos.rangeCircleRadiusKm * 2)
|
||||||
mapView.overlays[1] = getSatTrack(satPass)
|
mapView.overlays[1] = getSatTrack(satPass)
|
||||||
mapView.overlays[2] = getSatFootprint(satPass)
|
mapView.overlays[2] = getSatFootprint(satPass)
|
||||||
mapView.invalidate()
|
mapView.invalidate()
|
||||||
@@ -178,7 +186,6 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
val trackOverlay = FolderOverlay()
|
val trackOverlay = FolderOverlay()
|
||||||
val trackPoints = mutableListOf<GeoPoint>()
|
val trackPoints = mutableListOf<GeoPoint>()
|
||||||
var oldLon = 0.0
|
var oldLon = 0.0
|
||||||
|
|
||||||
positions.forEach {
|
positions.forEach {
|
||||||
val osmPos = viewModel.getOsmPosition(it.latitude, it.longitude, true)
|
val osmPos = viewModel.getOsmPosition(it.latitude, it.longitude, true)
|
||||||
if (oldLon < -170.0 && osmPos.lon > 170.0 || oldLon > 170.0 && osmPos.lon < -170.0) {
|
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
|
oldLon = osmPos.lon
|
||||||
trackPoints.add(GeoPoint(osmPos.lat, osmPos.lon))
|
trackPoints.add(GeoPoint(osmPos.lat, osmPos.lon))
|
||||||
}
|
}
|
||||||
|
|
||||||
Polyline().apply {
|
Polyline().apply {
|
||||||
outlinePaint.set(trackPaint)
|
outlinePaint.set(trackPaint)
|
||||||
setPoints(trackPoints)
|
setPoints(trackPoints)
|
||||||
@@ -204,17 +210,11 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getSatFootprint(pass: SatPass): Overlay {
|
private fun getSatFootprint(pass: SatPass): Overlay {
|
||||||
val rangeCircle = pass.predictor.getSatPos(dateNow).rangeCircle
|
|
||||||
val rangePoints = mutableListOf<GeoPoint>()
|
val rangePoints = mutableListOf<GeoPoint>()
|
||||||
var zeroPoint = GeoPoint(0.0, 0.0)
|
pass.predictor.getSatPos(dateNow).rangeCircle.withIndex().forEach {
|
||||||
|
|
||||||
rangeCircle.withIndex().forEach {
|
|
||||||
val osmPos = viewModel.getOsmPosition(it.value.lat, it.value.lon, false)
|
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(GeoPoint(osmPos.lat, osmPos.lon))
|
||||||
}
|
}
|
||||||
|
|
||||||
rangePoints.add(zeroPoint)
|
|
||||||
return Polygon().apply {
|
return Polygon().apply {
|
||||||
fillPaint.set(footprintPaint)
|
fillPaint.set(footprintPaint)
|
||||||
outlinePaint.set(footprintPaint)
|
outlinePaint.set(footprintPaint)
|
||||||
|
|||||||
@@ -24,13 +24,15 @@
|
|||||||
android:keepScreenOn="true">
|
android:keepScreenOn="true">
|
||||||
|
|
||||||
<org.osmdroid.views.MapView
|
<org.osmdroid.views.MapView
|
||||||
android:id="@+id/map_view"
|
android:id="@+id/mapView"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
|
</org.osmdroid.views.MapView>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -41,56 +43,89 @@
|
|||||||
app:layout_constraintTop_toTopOf="parent">
|
app:layout_constraintTop_toTopOf="parent">
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/id_name"
|
android:id="@+id/qthLocator"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="4dp"
|
android:text="@string/map_qth"
|
||||||
|
android:textColor="@color/themeLight"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@+id/velocity"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/distance"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/velocity" />
|
||||||
|
|
||||||
|
<com.google.android.material.textview.MaterialTextView
|
||||||
|
android:id="@+id/idName"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="2dp"
|
||||||
android:text="@string/pat_osm_idName"
|
android:text="@string/pat_osm_idName"
|
||||||
android:textColor="@color/themeLight"
|
android:textColor="@color/themeLight"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
android:textSize="15sp"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/distance"
|
||||||
app:layout_constraintHorizontal_bias="0.5"
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="@+id/altitude"
|
||||||
app:layout_constraintTop_toTopOf="parent" />
|
app:layout_constraintTop_toBottomOf="@+id/latLon" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/altitude"
|
android:id="@+id/altitude"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginStart="6dp"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
android:text="@string/pat_altitude"
|
android:text="@string/pat_altitude"
|
||||||
android:textColor="@color/themeLight"
|
android:textColor="@color/themeLight"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/distance"
|
||||||
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintHorizontal_chainStyle="spread_inside"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/id_name" />
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/distance"
|
android:id="@+id/distance"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="4dp"
|
android:layout_marginEnd="6dp"
|
||||||
android:text="@string/pat_distance"
|
android:text="@string/pat_distance"
|
||||||
android:textColor="@color/themeLight"
|
android:textColor="@color/themeLight"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBaseline_toBaselineOf="@+id/altitude"
|
||||||
app:layout_constraintStart_toStartOf="@+id/altitude"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/altitude" />
|
app:layout_constraintHorizontal_bias="0.5"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/altitude" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/velocity"
|
android:id="@+id/velocity"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginEnd="4dp"
|
android:layout_marginTop="2dp"
|
||||||
|
android:layout_marginBottom="4dp"
|
||||||
android:text="@string/pat_osm_vel"
|
android:text="@string/pat_osm_vel"
|
||||||
android:textColor="@color/themeLight"
|
android:textColor="@color/themeLight"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/altitude"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="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" />
|
||||||
|
|
||||||
<com.google.android.material.textview.MaterialTextView
|
<com.google.android.material.textview.MaterialTextView
|
||||||
android:id="@+id/lat_lon"
|
android:id="@+id/latLon"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/pat_osm_latLon"
|
android:text="@string/pat_osm_latLon"
|
||||||
android:textColor="@color/themeLight"
|
android:textColor="@color/themeLight"
|
||||||
app:layout_constraintBaseline_toBaselineOf="@+id/distance"
|
app:layout_constraintBaseline_toBaselineOf="@+id/altitude"
|
||||||
app:layout_constraintEnd_toEndOf="@+id/velocity" />
|
app:layout_constraintEnd_toEndOf="@+id/distance"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/altitude" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/mapCoverage"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/map_coverage"
|
||||||
|
android:textColor="@color/themeLight"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@+id/velocity"
|
||||||
|
app:layout_constraintEnd_toEndOf="@+id/qthLocator"
|
||||||
|
app:layout_constraintStart_toStartOf="@+id/velocity" />
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
|||||||
@@ -49,10 +49,12 @@
|
|||||||
<string name="trans_inverted">Инверсия: %s</string>
|
<string name="trans_inverted">Инверсия: %s</string>
|
||||||
<string name="trans_no_data">Не найдены трансиверы для этого спутника</string>
|
<string name="trans_no_data">Не найдены трансиверы для этого спутника</string>
|
||||||
|
|
||||||
|
<string name="map_coverage">Покрытие: %.0f км</string>
|
||||||
|
|
||||||
<string name="pat_azimuth">Азим: %.1f°</string>
|
<string name="pat_azimuth">Азим: %.1f°</string>
|
||||||
<string name="pat_elevation">Элев: %.1f°</string>
|
<string name="pat_elevation">Элев: %.1f°</string>
|
||||||
<string name="pat_distance">Дист: %.0fкм</string>
|
<string name="pat_distance">Дист: %.0f км</string>
|
||||||
<string name="pat_altitude">Выс: %.0fкм</string>
|
<string name="pat_altitude">Выс: %.0f км</string>
|
||||||
<string name="pat_osm_latLon">Шир: %.1f°, Дол: %.1f°</string>
|
<string name="pat_osm_latLon">Шир: %.1f°, Дол: %.1f°</string>
|
||||||
<string name="pat_osm_vel">Скор: %.2f км/с</string>
|
<string name="pat_osm_vel">Скор: %.2f км/с</string>
|
||||||
|
|
||||||
|
|||||||
@@ -63,13 +63,15 @@
|
|||||||
<string name="trans_link_lowHigh" translatable="false">%.4f - %.4f</string>
|
<string name="trans_link_lowHigh" translatable="false">%.4f - %.4f</string>
|
||||||
<string name="trans_no_data">No transceivers found for this satellite</string>
|
<string name="trans_no_data">No transceivers found for this satellite</string>
|
||||||
|
|
||||||
|
<string name="map_qth" translatable="false">QTH: %s</string>
|
||||||
|
<string name="map_coverage">Coverage: %.0f km</string>
|
||||||
<string name="map_copyright" translatable="false">Wikimedia maps | Map data © OpenStreetMap contributors</string>
|
<string name="map_copyright" translatable="false">Wikimedia maps | Map data © OpenStreetMap contributors</string>
|
||||||
|
|
||||||
<string name="pat_azimuth">Az: %.1f°</string>
|
<string name="pat_azimuth">Az: %.1f°</string>
|
||||||
<string name="pat_elevation">El: %.1f°</string>
|
<string name="pat_elevation">El: %.1f°</string>
|
||||||
<string name="pat_distance">Dst: %.0f km</string>
|
<string name="pat_distance">Dst: %.0f km</string>
|
||||||
<string name="pat_altitude">Alt: %.0f km</string>
|
<string name="pat_altitude">Alt: %.0f km</string>
|
||||||
<string name="pat_osm_idName" translatable="false">%s / %s</string>
|
<string name="pat_osm_idName" translatable="false">Id:%s / %s</string>
|
||||||
<string name="pat_osm_latLon">Lat: %.1f°, Lon: %.1f°</string>
|
<string name="pat_osm_latLon">Lat: %.1f°, Lon: %.1f°</string>
|
||||||
<string name="pat_osm_vel">Vel: %.2f km/s</string>
|
<string name="pat_osm_vel">Vel: %.2f km/s</string>
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user