Added radar

This commit is contained in:
2026-05-21 12:38:18 +03:00
parent b22cdd93eb
commit c8ae5fc341
13 changed files with 630 additions and 50 deletions
@@ -191,6 +191,7 @@ public class BottomSheetsManager {
TextView tvSignal = aisBottomSheetView.findViewById(R.id.bottom_sheet_ais_signal);
TextView tvDistance = aisBottomSheetView.findViewById(R.id.bottom_sheet_ais_distance);
TextView tvBearing = aisBottomSheetView.findViewById(R.id.bottom_sheet_ais_bearing);
TextView tvCpa = aisBottomSheetView.findViewById(R.id.bottom_sheet_ais_cpa);
TextView tvLastUpdate = aisBottomSheetView.findViewById(R.id.bottom_sheet_ais_last_update);
TextView tvTimeAgo = aisBottomSheetView.findViewById(R.id.bottom_sheet_ais_time_ago);
@@ -233,17 +234,52 @@ public class BottomSheetsManager {
}
if (tvLastUpdate != null) tvLastUpdate.setText(vessel.getLastUpdate() != null ? String.format("Обновлено: %s", vessel.getLastUpdate().format(java.time.format.DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"))) : "Обновлено: --");
if (tvDistance != null || tvBearing != null) {
Vessel ourVessel = appCoordinator.getOwnVessel();
if (ourVessel != null && ourVessel.getLatitude() != 0 && ourVessel.getLongitude() != 0 && vessel.getLatitude() != 0 && vessel.getLongitude() != 0) {
double distance = com.grigowashere.aismap.utils.NavigationUtils.calculateDistance(ourVessel.getLatitude(), ourVessel.getLongitude(), vessel.getLatitude(), vessel.getLongitude());
if (tvDistance != null) tvDistance.setText("Расстояние: " + com.grigowashere.aismap.utils.NavigationUtils.formatDistance(distance));
double bearing = com.grigowashere.aismap.utils.NavigationUtils.calculateBearing(ourVessel.getLatitude(), ourVessel.getLongitude(), vessel.getLatitude(), vessel.getLongitude());
double relativeBearing = com.grigowashere.aismap.utils.NavigationUtils.calculateRelativeBearing(ourVessel.getCourse(), bearing);
if (tvBearing != null) tvBearing.setText("Пеленг: " + com.grigowashere.aismap.utils.NavigationUtils.formatRelativeBearing(relativeBearing));
if (tvDistance != null || tvBearing != null || tvCpa != null) {
Vessel ourVessel = appCoordinator.getOwnVessel();
String cpaNa = context.getString(R.string.cpa_na);
if (ourVessel != null && ourVessel.getLatitude() != 0 && ourVessel.getLongitude() != 0
&& vessel.getLatitude() != 0 && vessel.getLongitude() != 0) {
double distance = com.grigowashere.aismap.utils.NavigationUtils.calculateDistance(
ourVessel.getLatitude(), ourVessel.getLongitude(),
vessel.getLatitude(), vessel.getLongitude());
if (tvDistance != null) {
tvDistance.setText("Расстояние: "
+ com.grigowashere.aismap.utils.NavigationUtils.formatDistance(distance));
}
double bearing = com.grigowashere.aismap.utils.NavigationUtils.calculateBearing(
ourVessel.getLatitude(), ourVessel.getLongitude(),
vessel.getLatitude(), vessel.getLongitude());
double relativeBearing = com.grigowashere.aismap.utils.NavigationUtils.calculateRelativeBearing(
ourVessel.getCourse(), bearing);
if (tvBearing != null) {
tvBearing.setText("Пеленг: "
+ com.grigowashere.aismap.utils.NavigationUtils.formatRelativeBearing(relativeBearing));
}
if (tvCpa != null) {
com.grigowashere.aismap.utils.SettingsManager sm =
new com.grigowashere.aismap.utils.SettingsManager(context);
boolean useNm = com.grigowashere.aismap.utils.SettingsManager.RANGE_UNIT_NM
.equals(sm.getRangeUnit());
com.grigowashere.aismap.utils.RangeMath.CpaResult cpa =
com.grigowashere.aismap.utils.RangeMath.calculateCpa(
ourVessel.getLatitude(), ourVessel.getLongitude(),
ourVessel.getSpeed(), ourVessel.getCourse(), ourVessel.getHeading(),
vessel.getLatitude(), vessel.getLongitude(),
vessel.getSpeed(), vessel.getCourse(), vessel.getHeading());
if (cpa.valid) {
String cpaDist = com.grigowashere.aismap.utils.RangeMath.formatCpaDistance(
cpa.cpaMeters, useNm, java.util.Locale.getDefault());
String tcpa = com.grigowashere.aismap.utils.RangeMath.formatTcpa(
cpa.tcpaMinutes, java.util.Locale.getDefault());
tvCpa.setText(context.getString(R.string.bottom_sheet_ais_cpa, cpaDist, tcpa));
} else {
tvCpa.setText(context.getString(R.string.bottom_sheet_ais_cpa, cpaNa, cpaNa));
}
}
} else {
if (tvDistance != null) tvDistance.setText("Расстояние: --");
if (tvBearing != null) tvBearing.setText("Пеленг: --");
if (tvCpa != null) tvCpa.setText(context.getString(R.string.bottom_sheet_ais_cpa, cpaNa, cpaNa));
}
}