Подготовка к крупным изменениям: карта, AIS и UI

- Яндекс/MapForge: правки в менеджерах и обёртках маркеров (улучшена отрисовка/логика)
- NMEAParser: корректировки парсинга и стабильности
- Модель AISVessel: уточнение полей/логики
- Настройки: правки в SettingsActivity и SettingsManager, актуализация AppController
- UI: обновлены activity_main, activity_settings, bottom_sheet_ais_vessel; меню main_menu
- Ресурсы: добавлен drawable/targetclassa.xml, обновлён drawable/target.xml
- Конфигурация: правки AndroidManifest и app/build.gradle
- Прочее: изменения в .idea (не влияют на сборку)
This commit is contained in:
2025-09-23 11:53:23 +03:00
parent a2f1775f9f
commit 41432665ea
37 changed files with 6561 additions and 161 deletions
@@ -46,7 +46,9 @@ public class YandexMapImpl implements MapInterface {
try {
this.mapObjects = mapView.getMap().getMapObjects().addCollection();
// Инициализируем менеджер маркеров
this.markerManager = new YandexMarkerManager(context, mapObjects, mapView);
com.grigowashere.aismap.utils.SettingsManager settingsManager =
new com.grigowashere.aismap.utils.SettingsManager(context);
this.markerManager = new YandexMarkerManager(context, mapObjects, mapView, settingsManager);
} catch (Exception e) {
// Ошибка создания коллекции объектов карты
}
@@ -129,7 +131,7 @@ public class YandexMapImpl implements MapInterface {
@Override
public void centerOnPosition(double latitude, double longitude) {
Point point = new Point(latitude, longitude);
CameraPosition cameraPosition = new CameraPosition(point, 15.0f, 0.0f, 0.0f);
CameraPosition cameraPosition = new CameraPosition(point, 13.0f, 0.0f, 0.0f);
mapView.getMap().move(cameraPosition, new Animation(Animation.Type.SMOOTH, 1.0f), null);
}
@@ -207,6 +209,15 @@ public class YandexMapImpl implements MapInterface {
}
}
/**
* Принудительно обновляет все маркеры при изменении зума
*/
public void forceRefreshMarkersOnZoomChange() {
if (markerManager != null) {
markerManager.forceRefreshAllMarkers();
}
}
/**
* Проверяет и восстанавливает финализированные маркеры
*/
@@ -226,6 +237,42 @@ public class YandexMapImpl implements MapInterface {
return 0;
}
/**
* Включает/выключает отображение путей движения
*/
public void setPathTrackingEnabled(boolean enabled) {
if (markerManager != null) {
markerManager.setPathTrackingEnabled(enabled);
}
}
/**
* Очищает путь конкретного судна
*/
public void clearVesselPath(String mmsi) {
if (markerManager != null) {
markerManager.clearVesselPath(mmsi);
}
}
/**
* Очищает все пути движения
*/
public void clearAllPaths() {
if (markerManager != null) {
markerManager.clearAllPaths();
}
}
/**
* Обновляет настройки отображения путей
*/
public void updatePathSettings(int pathColor, int predictionColor, float pathWidth, float predictionWidth) {
if (markerManager != null) {
markerManager.updatePathSettings(pathColor, predictionColor, pathWidth, predictionWidth);
}
}
/**
* Получение MapView для использования в layout
@@ -257,10 +304,11 @@ public class YandexMapImpl implements MapInterface {
// Включаем жесты поворота карты
mapView.getMap().setRotateGesturesEnabled(true);
// Добавляем слушатель изменений камеры для обновления маркеров при повороте
// Добавляем слушатель изменений камеры для обновления маркеров при повороте и зуме
mapView.getMap().addCameraListener(new com.yandex.mapkit.map.CameraListener() {
private long lastUpdateTime = 0;
private static final long UPDATE_THROTTLE = 50; // 50мс между обновлениями
private static final long UPDATE_THROTTLE = 200; // 200мс между обновлениями (увеличено для снижения нагрузки)
private float lastZoom = -1;
@Override
public void onCameraPositionChanged(com.yandex.mapkit.map.Map map,
@@ -270,9 +318,23 @@ public class YandexMapImpl implements MapInterface {
// Обновляем маркеры в реальном времени с throttling
long currentTime = System.currentTimeMillis();
if (currentTime - lastUpdateTime >= UPDATE_THROTTLE) {
onMapRotationChanged();
float currentZoom = cameraPosition.getZoom();
// Проверяем, изменился ли зум значительно (больше чем на 1.0)
boolean zoomChanged = Math.abs(currentZoom - lastZoom) > 1.0f;
if (currentTime - lastUpdateTime >= UPDATE_THROTTLE || zoomChanged) {
//onMapRotationChanged();
// Обновляем маркеры только при значительных изменениях
if (zoomChanged) {
// При изменении зума принудительно обновляем все маркеры
forceRefreshMarkersOnZoomChange();
} else {
// При повороте только проверяем валидность маркеров
checkAndRestoreMarkers();
}
lastUpdateTime = currentTime;
lastZoom = currentZoom;
}
}
});