mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
Fixed an old issue regarding satellite footprint rendering #36
This commit is contained in:
1 parent
74cbad5127
commit
03323172ea
9 files changed
+44
-25
No files matched your search
@@ -2,8 +2,9 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.rtbishop.look4sat">
|
||||
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
<application
|
||||
|
||||
@@ -32,6 +32,7 @@ import androidx.navigation.fragment.navArgs
|
||||
import com.rtbishop.look4sat.R
|
||||
import com.rtbishop.look4sat.databinding.FragmentMapBinding
|
||||
import com.rtbishop.look4sat.domain.predict.GeoPos
|
||||
import com.rtbishop.look4sat.domain.predict.SatPos
|
||||
import com.rtbishop.look4sat.domain.predict.Satellite
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import org.osmdroid.config.Configuration
|
||||
@@ -41,7 +42,6 @@ import org.osmdroid.views.CustomZoomButtonsController
|
||||
import org.osmdroid.views.MapView
|
||||
import org.osmdroid.views.overlay.FolderOverlay
|
||||
import org.osmdroid.views.overlay.Marker
|
||||
import org.osmdroid.views.overlay.Polygon
|
||||
import org.osmdroid.views.overlay.Polyline
|
||||
|
||||
@AndroidEntryPoint
|
||||
@@ -59,8 +59,9 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
||||
strokeJoin = Paint.Join.ROUND
|
||||
}
|
||||
private val footprintPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
|
||||
strokeWidth = 2f
|
||||
style = Paint.Style.FILL_AND_STROKE
|
||||
color = Color.parseColor("#26FFE082")
|
||||
color = Color.parseColor("#FFE082")
|
||||
}
|
||||
private lateinit var binding: FragmentMapBinding
|
||||
|
||||
@@ -124,7 +125,7 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
||||
posMap.entries.forEach {
|
||||
Marker(mapView).apply {
|
||||
setInfoWindow(null)
|
||||
textLabelFontSize = 24
|
||||
textLabelFontSize = 28
|
||||
textLabelBackgroundColor = Color.TRANSPARENT
|
||||
textLabelForegroundColor =
|
||||
ContextCompat.getColor(requireContext(), R.color.accent)
|
||||
@@ -164,13 +165,17 @@ class MapFragment : Fragment(R.layout.fragment_map) {
|
||||
binding.mapView.overlays[1] = trackOverlay
|
||||
}
|
||||
|
||||
private fun handleFootprint(satFootprint: List<GeoPos>) {
|
||||
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<GeoPoint>()
|
||||
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)
|
||||
|
||||
@@ -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<List<List<GeoPos>>>()
|
||||
val track: LiveData<List<List<GeoPos>>> = _track
|
||||
|
||||
private val _footprint = MutableLiveData<List<GeoPos>>()
|
||||
val footprint: LiveData<List<GeoPos>> = _footprint
|
||||
private val _footprint = MutableLiveData<SatPos>()
|
||||
val footprint: LiveData<SatPos> = _footprint
|
||||
|
||||
private val _mapData = MutableLiveData<MapData>()
|
||||
val mapData: LiveData<MapData> = 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) {
|
||||
|
||||
@@ -18,11 +18,13 @@
|
||||
<EditText
|
||||
android:id="@+id/entries_search"
|
||||
style="@style/ToolbarTitle"
|
||||
android:inputType="text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="52dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="52dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:inputType="text"
|
||||
android:hint="@string/entries_search_hint"
|
||||
android:importantForAutofill="no" />
|
||||
|
||||
|
||||
@@ -22,6 +22,12 @@
|
||||
<TextView
|
||||
android:id="@+id/map_title"
|
||||
style="@style/ToolbarTitle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="52dp"
|
||||
android:layout_marginTop="4dp"
|
||||
android:layout_marginEnd="52dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:text="@string/map_title" />
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
@@ -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" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/map_data_name"
|
||||
android:id="@+id/map_data_id"
|
||||
style="@style/WorldMapText"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
@@ -181,7 +187,7 @@
|
||||
android:ellipsize="end"
|
||||
android:gravity="center_horizontal"
|
||||
android:maxLines="1"
|
||||
android:text="@string/pat_osm_idName"
|
||||
android:text="@string/map_sat_id"
|
||||
app:layout_constraintBaseline_toBaselineOf="@+id/map_prev_btn"
|
||||
app:layout_constraintEnd_toStartOf="@+id/map_next_btn"
|
||||
app:layout_constraintStart_toEndOf="@+id/map_prev_btn" />
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
<string name="map_title">Карта Мира</string>
|
||||
<string name="map_qth">QTH Локатор: %s</string>
|
||||
<string name="map_coverage">Покрытие: %.0fкм</string>
|
||||
<string name="map_sat_id">Id: %d</string>
|
||||
<string name="map_sat_name">%s</string>
|
||||
|
||||
<string name="radar_az_text">Азим.</string>
|
||||
<string name="radar_az_value">%.1f°</string>
|
||||
|
||||
@@ -74,6 +74,8 @@
|
||||
<string name="map_title">World Map</string>
|
||||
<string name="map_qth">QTH Locator: %s</string>
|
||||
<string name="map_coverage">Coverage: %.0f km</string>
|
||||
<string name="map_sat_id">Id: %d</string>
|
||||
<string name="map_sat_name">%s</string>
|
||||
<string name="map_copyright" translatable="false">Wikimedia maps | Map data © OpenStreetMap contributors</string>
|
||||
|
||||
<string name="radar_az_text">Azimuth</string>
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
<item name="android:layout_gravity">center</item>
|
||||
<item name="android:background">@color/transparent</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:maxLines">1</item>
|
||||
<item name="android:ellipsize">end</item>
|
||||
<item name="android:includeFontPadding">false</item>
|
||||
<item name="android:textColor">@color/accent</item>
|
||||
<item name="android:textColorHint">@color/accent</item>
|
||||
|
||||
Reference in new issue
Block a user