diff --git a/OsmAnd/res/layout/preference_with_descr.xml b/OsmAnd/res/layout/preference_with_descr.xml
index 1cbe632f2c..ca4938a51d 100644
--- a/OsmAnd/res/layout/preference_with_descr.xml
+++ b/OsmAnd/res/layout/preference_with_descr.xml
@@ -56,6 +56,7 @@
android:layout_height="wrap_content"
android:letterSpacing="@dimen/description_letter_spacing"
android:maxLines="4"
+ android:scrollbars="none"
android:textColor="?android:textColorSecondary"
android:textSize="@dimen/default_desc_text_size"
osmand:typeface="@string/font_roboto_regular" />
diff --git a/OsmAnd/res/values-de/phrases.xml b/OsmAnd/res/values-de/phrases.xml
index b20f6b4092..028d5b5da0 100644
--- a/OsmAnd/res/values-de/phrases.xml
+++ b/OsmAnd/res/values-de/phrases.xml
@@ -3902,4 +3902,7 @@
Fahrzeugwaage
Rangerstation
Schwimmbereich
+ Fledermaustunnel
+ Fledermausbrücke
+ Wildwechsel
\ No newline at end of file
diff --git a/OsmAnd/res/values-eo/phrases.xml b/OsmAnd/res/values-eo/phrases.xml
index 670f41c2be..8a4ea2f7c1 100644
--- a/OsmAnd/res/values-eo/phrases.xml
+++ b/OsmAnd/res/values-eo/phrases.xml
@@ -322,7 +322,7 @@
E85
biogaso
elektro
- Ŝargostacio
+ Ŝargostacio;shargostacio;sxargostacio;stacio de ŝargo;elektroaŭto;elektra aŭto;tesla
Aŭtomobil-ripara fosaĵeto
Taksistacio
Baraĵo trakfina
@@ -3891,4 +3891,8 @@
Oficejo de naturrezervejo
Vestaĵ-lavejo (ĉe rivero)
Stacio de rubmastrumado
+ Tunelo por vespertoj
+ Ponto por vespertoj
+ Trairejo por sovaĝaj bestoj
+ Naĝejo natura
\ No newline at end of file
diff --git a/OsmAnd/res/values-es-rAR/phrases.xml b/OsmAnd/res/values-es-rAR/phrases.xml
index 7aa4610509..38fd01127d 100644
--- a/OsmAnd/res/values-es-rAR/phrases.xml
+++ b/OsmAnd/res/values-es-rAR/phrases.xml
@@ -189,7 +189,7 @@
Biogás
Hidrógeno líquido
Electricidad
- Estación vehícular de carga eléctrica
+ Estación de carga para vehículos eléctricos;Estación vehícular de carga eléctrica;Suministro para vehículos eléctricos
Rampa de vehículos
Aire comprimido
Estacionamiento;Aparcamiento
@@ -3905,4 +3905,8 @@
Estación de guardabosques
Lavadero público de ropa
Estación de transferencia de residuos
+ Túnel para murciélagos
+ Puente para murciélagos
+ Cruce de vida silvestre
+ Área de natación
\ No newline at end of file
diff --git a/OsmAnd/res/values-es-rUS/phrases.xml b/OsmAnd/res/values-es-rUS/phrases.xml
index b46dce884c..c33e501c94 100644
--- a/OsmAnd/res/values-es-rUS/phrases.xml
+++ b/OsmAnd/res/values-es-rUS/phrases.xml
@@ -189,7 +189,7 @@
Biogás
Hidrógeno líquido
Electricidad
- Estación vehícular de carga eléctrica
+ Estación de carga para vehículos eléctricos;Estación vehícular de carga eléctrica;Suministro para vehículos eléctricos
Rampa de vehículos
Aire comprimido
Estacionamiento;Aparcamiento
@@ -3905,4 +3905,8 @@
Grifo
Planta potabilizadora
Pozo entubado
+ Túnel para murciélagos
+ Puente para murciélagos
+ Cruce de vida silvestre
+ Área de natación
\ No newline at end of file
diff --git a/OsmAnd/res/values-es/phrases.xml b/OsmAnd/res/values-es/phrases.xml
index 5dec11e335..64bb0ce9c9 100644
--- a/OsmAnd/res/values-es/phrases.xml
+++ b/OsmAnd/res/values-es/phrases.xml
@@ -124,7 +124,7 @@
Metanol
Hidrógeno líquido
Electricidad
- Estación de carga
+ Estación de carga;Estación de carga de vehículos eléctricos; Punto de recarga eléctrica; Punto de carga; Estación de carga electrónica; Equipo de suministro de vehículos eléctricos
Rampa de vehículos
Aire comprimido
Aparcamiento
@@ -3626,7 +3626,7 @@
Acceso de vehículos: militar
Acceso del vehículo: entrega
Acceso de vehículos: silvicultura
- Acceso a los coches:
+ Acceso a los coches: si
Acceso para automóviles: privado
Acceso para automóviles: no
Acceso para automóviles: destino
@@ -3851,4 +3851,56 @@
Azotea
Punto GPX
Gas natural licuado
+ Enlace
+ Enlace
+ Túnel para murciélagos
+ Puente para murciélagos
+ Cruce de vida silvestre
+ Área de natación
+ Lavadero público de ropa
+ Estación de guardabosques
+ Pozo
+ Pozo entubado
+ Enfermera
+ Agente de dinero móvil
+ Cónsul honorario
+ Oficina consular
+ Agencia consular
+ Dirigido por un cónsul
+ Nunciatura
+ Servicios al ciudadano
+ Visas de inmigrante
+ Visas de no inmigrante
+ Estación de transferencia de residuos
+ Báscula
+ Lago
+ Río
+ Bomba accionada
+ Depósito de agua
+ Grifo
+ Planta potabilizadora
+ Vacunación: COVID 19
+ Vacunación
+ Base de salvavidas
+ Sirena
+ No
+ Sí
+ No
+ Sí
+ No
+ Sí
+ Subnacional
+ Oficina representativa
+ Oficina
+ Consulado general
+ Residencia
+ Misión
+ Sección de intereses
+ Alto comisionado
+ Delegación
+ Rama/sucursal
+ Encabezado por un embajador
+ Embajada
+ Consulado
+ Embajada
\ No newline at end of file
diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml
index e8bec4e6ef..484933e2aa 100644
--- a/OsmAnd/res/values-es/strings.xml
+++ b/OsmAnd/res/values-es/strings.xml
@@ -14,7 +14,7 @@
Usar superpuestos fluorescentes
Usa colores fluorescentes para mostrar trazas y rutas.
Edición sin conexión
- Usa siempre edición sin conexión.
+ Si la edición sin conexión está habilitada, los cambios se guardarán primero localmente y se cargarán a pedido; de lo contrario, los cambios se cargarán inmediatamente.
Los cambios de PDI dentro de la aplicación no afectan a los archivos de mapa descargados; en su lugar, los cambios se guardan como un archivo en el dispositivo.
Subiendo…
{0} PDI/Notas de OSM subidos
@@ -64,7 +64,7 @@
Ajustes globales de la aplicación
Usuario de OSM
Necesario para envíos a openstreetmap.org.
- Contraseña de OSM
+ Contraseña
Modo reposo
OsmAnd se ejecuta en modo reposo con la pantalla apagada.
Descargar un mapa vectorial sin conexión de esta ubicación en «Ajustes → Gestionar mapas», o cambiar al complemento «Mapas en línea».
@@ -616,7 +616,7 @@
\nDescarga los mapas de teselas directamente a través de fuentes en línea, o prepararlos para tu uso sin conexión (copiándolos manualmente en la carpeta de datos OsmAnd) como una base de datos SQLite que puede generarse con varias herramientas de preparación de mapas de terceros.
Muestra los ajustes para activar en modo reposo el seguimiento y la navegación, activando periódicamente el dispositivo GPS (con la pantalla apagada).
Activa las funciones de accesibilidad del dispositivo directamente en OsmAnd. Facilita por ejemplo, el ajuste de la velocidad de la voz para voces de texto a voz, la configuración de navegación de pantalla con el panel direccional, usando la rueda de desplazamiento para el control del zoom, o la retroalimentación de texto a voz, por ejemplo, para anunciar la ubicación automáticamente.
- Este complemento muestra los ajustes de funciones de desarrollo y depuración para probar la simulación de rutas, el rendimiento del renderizado, o las indicaciones por voz. Estos ajustes están destinados para los desarrolladores y no son necesarios para el usuario general.
+ Ajustes de funciones de desarrollo y depuración, como simulación de navegación, el rendimiento del renderizado, o las indicaciones por voz. Destinados a desarrolladores y no son necesarios para el uso normal de la aplicación.
Complementos
Los complementos activan ajustes avanzados y funcionalidades adicionales.
Complementos
@@ -976,7 +976,7 @@
Quedan %1$d archivos
%1$d archivos para descargar
Versión completa
- Descartar ruta
+ ¿Descartar ruta\?
Parar navegación
Limpiar destino
No está conectado a una red Wi-Fi. ¿Usar la conexión actual a Internet para descargar?
@@ -1054,15 +1054,15 @@
Región de conducción: EEUU, Europa, Reino Unido, Asia u otras.
Región de conducción
Zoom mínimo
- Expira (minutos)
+ Tiempo expirado (minutos)
Fuente de teselas «%1$s» guardada
Datos de teselas: %1$s
- Expira (minutos): %1$s
+ Tiempo de expiración (minutos): %1$s
Información
Información de la versión, licencias, miembros del proyecto
Elegir existente…
- Zooms descargados: %1$s
- Mercator elíptica
+ Niveles de zooms descargados: %1$s
+ Proyección Mercator elíptica
Información de FPS
Mapa base mundial
Ampliar mapa
@@ -1537,7 +1537,7 @@
Límite de altura
Indica la altura permitida del vehículo en rutas.
Recálculo inteligente de ruta
- Para viajes largos, recalcula sólo la parte inicial de la ruta.
+ Recalcula solo la parte inicial de la ruta, útil para viajes largos.
Desactivado
Color por red de afiliación
Color por símbolo de senderismo OSMC
@@ -1728,7 +1728,7 @@
Preguntas Frecuentes
Preguntas Frecuentes
Vista del mapa
- Búsqueda en el mapa
+ Buscando en el mapa
Planificación de viaje
Instalación y solución de problemas
Artículos técnicos
@@ -1919,7 +1919,7 @@
Informe
Añade marcadores a través del mapa
No se encontraron puntos de referencia
- El nombre del archivo contiene caracteres ilegales
+ Carácter ilegal en el nombre del archivo
Modo del mapa
Fino
Medio
@@ -1955,7 +1955,7 @@
Indica la dirección del destino mediante vibración.
Activa la navegación para cambios en vivo de OsmAnd.
Navegación con OsmAnd Live
- Destino indefinido
+ Complemento de accesibilidad: sin destino definido
Rumbo magnético
Rumbo relativo
Traza actual
@@ -2368,19 +2368,19 @@
\n • (Opcional) Grabación del viaje en modo reposo (mientras el dispositivo está bloqueado)
\n OsmAnd es un software de código abierto, activamente desarrollado. Cualquiera puede contribuir con la aplicación informando sobre errores, mejorando las traducciones o desarrollando nuevas funciones. Además, el proyecto también depende de contribuciones financieras para desarrollar y probar nuevas funcionalidades.
\n
- Cobertura y calidad aproximada del mapa:
-\n • Europa Occidental: ****
-\n • Europa Oriental: ***
-\n • Rusia: ***
-\n • Norteamérica: ***
-\n • Sudamérica: **
-\n • Asia: **
-\n • Japón y Corea: ***
-\n • Medio Oriente: **
-\n • África: **
-\n • Antártida: *
-\n
-\n ¡Más países alrededor del globo están disponibles para descargar! Desde Afganistán a Zimbabue, desde Australia a Estados Unidos. Argentina, Brasil, Canadá, Francia, Alemania, México, Reino Unido, España, …
+ Cobertura y calidad aproximada del mapa:
+\n • Europa Occidental: ****
+\n • Europa Oriental: ***
+\n • Rusia: ***
+\n • Norteamérica: ***
+\n • Sudamérica: **
+\n • Asia: **
+\n • Japón y Corea: ***
+\n • Medio Oriente: **
+\n • África: **
+\n • Antártida: *
+\n ¡Más países alrededor del globo están disponibles para descargar!
+\n Desde Afganistán a Zimbabue, desde Australia a Estados Unidos. Argentina, Brasil, Canadá, Francia, Alemania, México, Reino Unido, España, …
\n
El nombre contiene demasiadas mayúsculas. ¿Continuar?
Descarga el mapa de «Curvas de nivel» para usarlas en esta región.
@@ -2516,7 +2516,7 @@
Usar ubicación
Añade la ubicación como punto de partida para planificar la ruta perfecta.
Mi ubicación
- Finalizar
+ Terminar
Planificar ruta
Ordenar
Ingresar coordenadas
@@ -2644,7 +2644,7 @@
Copiar nombre de ubicación/PDI
Ubicación sin nombre
Mostrar notas de OSM cerradas
- Mostrar/ocultar notas de OSM en el mapa.
+ Mostrar u ocultar notas de OSM en el mapa.
Túnel adelante
Túneles
Actual
@@ -3118,9 +3118,9 @@
Cambia el zoom del mapa desplazando la rueda hacia arriba y hacia abajo. Salir te devuelve a la aplicación WunderLINQ.
Usa WunderLINQ para controlar
Añadir al menos un elemento a la lista en los ajustes de «Acción rápida»
- Esquí alpino/de descenso
+ Esquí alpino y de descenso
Pistas de esquí alpino o de descenso y acceso a remontes mecánicos.
- Esquí de travesía/nórdico
+ Esquí de travesía y nórdico
Senderos para esquí nórdico o de travesía.
Esquí de travesía
Rutas para el esquí de montaña.
@@ -3358,7 +3358,7 @@
Estima la hora de llegada para tipos de vías desconocidos y límites de velocidad en todas las vías (puede afectar al enrutado)
Esquí de travesía
Simular la ubicación usando una traza GPX grabada.
- El nombre de archivo está vacío
+ Nombre de archivo vacío
Traza guardada
Revertir
Un botón que añade el centro de la pantalla como punto de partida. Pedirá luego que se fije el destino o iniciará el cálculo de la ruta.
@@ -3424,9 +3424,9 @@
Recálculo de la ruta
Anunciar
Nombre de usuario y clave
- La configuración se aplica a todos los perfiles.
+ Esta configuración de complementos es global, y se aplica a todos los perfiles
Edición de OSM
- Puedes ver todas las ediciones y errores de osm no enviadas en %1$s. Los puntos enviados no se muestran en OsmAnd.
+ Puedes ver todas las ediciones y errores de osm no subidos en %1$s. Los puntos ya subidos no se muestrarán más.
OSM
El icono se muestra mientras navega o mientras te estés moviendo.
Icono que se muestra en reposo.
@@ -3520,7 +3520,7 @@
Mapa de sombreado utilizando tonos oscuros para mostrar pendientes, picos y tierras bajas.
Pendiente utiliza colores para visualizar la inclinación del terreno.
Establezca los niveles de zoom mínimo y máximo en los que se mostrará la capa.
- Se necesitan mapas adicionales para ver Sombreado en el mapa.
+ Se necesitan mapas adicionales para ver sombreado en el mapa.
Se necesitan mapas adicionales para ver Pendientes en el mapa.
Puede leer más sobre Pendientes en %1$s.
Transparencia
@@ -3542,7 +3542,7 @@
Recalcular ruta en caso de desvío
%1$s de %2$s
Cuestas
- Mostrar / esconder terreno
+ Mostrar o esconder terreno
Esconder terreno
Mostrar terreno
Un botón para mostrar o esconder una capa de terreno en el mapa.
@@ -3591,11 +3591,11 @@
Marcadores de mapa
Favoritos
Perfiles de navegación
- Mostrar/ocultar transporte público
+ Mostrar u ocultar transporte público
Ocultar transporte público
Mostrar transporte público
- Crear / Editar POI
- Agregar / Editar Favorito
+ Crear o editar POI
+ Agregar o editar Favorito
Agregar perfil
Aragones
Color personalizado
@@ -3787,7 +3787,7 @@
Proporcione la longitud de su vehículo, se pueden aplicar algunas restricciones de rutas para vehículos largos.
Eliminar el punto de destino más cercano
Por favor, proporcione un nombre para el punto
- El punto de destino actual de la ruta será borrado. Si se trata del destino, la navegación se detendrá.
+ Elimina el próximo destino de su ruta. Si se trata del destino, la navegación se detendrá.
Descargar mapas de Wikipedia
Abrir la pista existente
Crea una nueva ruta
@@ -3802,7 +3802,7 @@
Nombre de archivo
%s archivos de traza seleccionados
GRABAR
- Especifica el intervalo de grabación general para trazas (habilitado a través del widget de grabación en el mapa).
+ Especifica el intervalo de grabación general para trazas (activado a través del widget de grabación en el mapa).
Pausar grabación del viaje
Seguir grabando el viaje
Predeterminado del sistema
@@ -3817,7 +3817,7 @@
Añade al menos dos puntos.
Seleccionar anchura
Grabar automáticamente la traza durante la navegación
- Consigue información sobre puntos de interés en Wikipedia. Es tu guía de bolsillo sin conexión. Sólo tienes que activar el complemento de Wikipedia y disfrutar de los artículos sobre los objetos que te rodean.
+ Consigue información sobre puntos de interés en Wikipedia, una guía de bolsillo sin conexión con artículos sobre lugares y destinos.
El punto agregado no será visible en el mapa, ya que el grupo seleccionado está oculto, puedes encontrarlo en \"%s\".
Motocicleta de enduro
Moto scooter
@@ -3850,7 +3850,7 @@
Perfil de navegación
Selecciona un archivo de traza al que agregar el nuevo segmento.
Fotos a pie de calle
- ¿Estás seguro de que quieres descartar todos los cambios en la ruta planeada cerrándola\?
+ ¿Estás seguro de que quieres descartar todos los cambios en la ruta planeada\?
En caso de dirección contraria
Guardar como nuevo archivo de traza
Añadir a un archivo de traza
@@ -3877,11 +3877,11 @@
Recortar antes de
Recortar después de
Cambiar el tipo de ruta después de
- Pausará el registro de trazas cuando se mate la aplicación (a través de aplicaciones recientes). (La indicación OsmAnd de fondo desaparece de la barra de notificaciones de Android.)
+ El registro de trazas se detendrá cuando se mate la aplicación (a través de aplicaciones recientes). (La indicación OsmAnd de fondo desaparece de la barra de notificaciones de Android.)
Rehacer
- Función actualizada de Planificar una ruta: permite utilizar diferentes tipos de navegación por segmento y la inclusión de trazas
\n
-\n - Nuevo menú Apariencia para las trazas: selecciona el color, el grosor, muestra las flechas de dirección, los iconos de inicio/fin
+\n - Nuevo menú Apariencia para las trazas: selecciona el color, el grosor, muestra las flechas de dirección, los iconos de inicio y fin
\n
\n - Mejorada la visibilidad de los nodos de bicicleta.
\n
@@ -3914,9 +3914,9 @@
Deporte
Emergencia
Viajar
- Necesita añadir al menos dos puntos
+ Añadir al menos dos puntos
Cuenta
- Nombre de usuario
+ Login
Gestionar suscripción
Enviar fichero GPX a OpenStreetMap
Introduzca las etiquetas separadas por una coma.
@@ -3935,7 +3935,7 @@
OsmAnd muestra fotos de diferentes fuentes:
\nOpenPlaceReviews - fotos POI;
\nMapillary - imágenes a nivel de calle;
-\nWeb / Wikimedia - fotos POI especificadas en los datos de OpenStreetMap.
+\nWeb / Wikimedia - fotos POI según los datos de OpenStreetMap.
Recursos
Tamaño de fichero aproximado
Seleccione los datos para exportar al fichero.
@@ -3943,11 +3943,80 @@
No hay espacio suficiente
• Se ha añadido la opción de exportar e importar todos los datos, incluyendo los ajustes, los recursos y «Mis sitios»
\n
-\n • Planificar ruta: se añadieron gráficos para los segmentos de trazas con la ruta y capacidad de crear o editar trazas de segmentos múltiples
+\n • Planificar ruta: gráficos para los segmentos de trazas con la ruta y añadio capacidad de crear o editar trazas de segmentos múltiples
\n
\n • Se ha añadido el método de autenticación OAuth para OpenStreetMap y se ha mejorado la interfaz de usuario de los diálogos de OSM
\n
-\n • Se añadieron colores personalizados para los favoritos y los puntos de referencia de la traza
+\n • Admite colores personalizados para los favoritos y los puntos de referencia de la traza
\n
\n
+ La suscripción se cobra por el período elegido. Puedes cancelarlo en AppGallery en cualquier momento.
+ El pago será cargado a la cuenta de AppGallery al confirmar la compra.
+\n
+\nLa suscripción se renueva automáticamente a menos que se cancele antes de la fecha de renovación. La cuenta será cargada por el período de renovación (mes/trimestre/año) sólo en la fecha de renovación.
+\n
+\nPuedes administrar y cancelar las suscripciones en los ajustes de AppGallery.
+ Desarrollo nativo del transporte público
+ Cambiar al cálculo de ruta Java (seguro) del transporte público
+ Los datos de %1$s sólo están disponibles con las carreteras, calcula una ruta usando \"Ruta entre puntos\" para ver los gráficos.
+ Separador
+ \"Público\" significa que la traza se muestra públicamente en sus trazas de GPS y en listas de trazas de GPS públicas, y en la lista de trazas públicas con marcas de tiempo en forma sin formato. Los datos proporcionados a través de la API no hacen referencia a su página de seguimiento. Las marcas de tiempo de los puntos de seguimiento no están disponibles a través de la API de GPS pública y los puntos de seguimiento no están ordenados cronológicamente.
+ \"Privado\" significa que la traza no aparece en ninguna lista pública, pero los puntos de la traza en orden no cronológico están disponibles a través de la API de GPS pública sin marcas de tiempo.
+ \"Identificable\" significa que la traza se mostrará públicamente en sus trazas GPS y en listas de trazas GPS públicas, es decir, otros usuarios podrán descargar la traza sin procesar y asociarla con su nombre de usuario. Los datos de puntos de seguimiento públicos con marca de tiempo de la API de GPS que se proporcionan a través de la API de puntos de seguimiento harán referencia a su página de seguimiento original.
+ \"Rastreable\" significa que el rastreo no aparece en ningún listado público, pero los trackpoints son procesados con marcas de tiempo (que no se pueden asociar con usted directamente) lo hacen mediante descargas de la API de GPS pública.
+ Alemán (casual)
+ Para conducción de motos de nieve con carreteras y pistas exclusivas.
+ Gracias por comprar \'Contour lines\'
+ Evite las aceras
+ Evite las aceras
+ Datos OsmAnd Live
+ Datos OsmAnd Live
+ Enrutamiento de dos fases para la navegación del automóvil.
+ Inicie sesión con OAuth para usar las funciones de osmedit
+ Iniciar sesión a través de OAuth
+ Borrar token de OpenStreetMap OAuth
+ Desconectado
+ Utilice un algoritmo de enrutamiento de 2-fases A *
+ Deberas iniciar sesión para subir cambios nuevos o modificados.
+\n
+\nPuede iniciar sesión utilizando el método seguro OAuth o utilizar su nombre de usuario y contraseña.
+ %1$s * %2$s
+ Permitir vías de agua intermitentes
+ Gráfico
+ Por favor espera.
+\nEl gráfico estará disponible después del nuevo cálculo de la ruta.
+ Inicie sesión en OpenStreetMap
+ Inicie sesión en OpenStreetMap.org
+ Iniciar sesión con OpenStreetMap
+ Usar nombre de usuario y contraseña
+ Toque el botón para configurar un método de pago en Google Play para corregir su suscripción.
+ La suscripción a OsmAnd Live ha caducado
+ La suscripción a OsmAnd Live ha sido pausada
+ La suscripción a OsmAnd Live está en espera
+ Historial de marcadores
+ Puede iniciar sesión utilizando el método seguro OAuth o utilizar su nombre de usuario y contraseña.
+ Las fotos son proporcionadas por el proyecto de datos abiertos OpenPlaceReviews.org. Para cargar sus fotos, debe registrarse en su sitio web.
+ No se puede cargar la imagen. Vuelve a intentarlo más tarde
+ Seleccionar imagen
+ Tu dispositivo solo tiene %1$s libres. Libere espacio o anule la selección de algunos elementos para exportar.
+ Seleccione los grupos que se importarán.
+ Seleccione los elementos que se importarán.
+ Cambie para usar dev.openstreetmap.org en lugar de openstreetmap.org para probar la carga de OSM Note / POI / GPX.
+ Usar dev.openstreetmap.org
+ Puede utilizar los datos de elevación para tener en cuenta el ascenso/descenso de su viaje
+ Aeronave ligera
+ Unir segmentos
+ Dividir antes
+ Dividir después
+ Añadir un nuevo segmento
+ Perfil de OsmAnd
+ Perfil de usuario
+ Invertir todos los puntos
+ Seleccione el perfil que se utilizará al iniciar la aplicación.
+ Utilizado por última vez
+ Prefiero rutas de senderismo
+ Prefiero rutas de senderismo
+ Permitir arroyos y desagües
+ Permitir arroyos y desagües
+ Permitir vías de agua intermitentes
\ No newline at end of file
diff --git a/OsmAnd/res/values-gl/phrases.xml b/OsmAnd/res/values-gl/phrases.xml
index df06bf6a08..9b32dbccb5 100644
--- a/OsmAnd/res/values-gl/phrases.xml
+++ b/OsmAnd/res/values-gl/phrases.xml
@@ -3891,4 +3891,8 @@
Vacinación: COVID19
Vacinación
Base de salvavidas
+ Túnel para morcegos
+ Ponte para morcegos
+ Paso de fauna
+ Área de natación
\ No newline at end of file
diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml
index 7bcde5c6c2..f096f64d68 100644
--- a/OsmAnd/res/values-gl/strings.xml
+++ b/OsmAnd/res/values-gl/strings.xml
@@ -3998,7 +3998,7 @@ Lon %2$s
Engadir imaxe
Rexistrarse no
\nOpenPlaceReviews.org
- As imaxes son fornecidas polo proxecto de datos abertos do OpenPlaceReviews.org. Para subir a túas imaxes precisas rexistrarte no sitio web.
+ As imaxes son fornecidas polo proxecto de datos abertos do OpenPlaceReviews.org. Para subir a túas imaxes precisas rexistrarte no seu sitio web.
Crear nova conta
Xa teño unha conta
Historial de procura
@@ -4042,4 +4042,12 @@ Lon %2$s
\n
\n
Inverter todos os puntos
+ Escolle o perfil que será empregado ao iniciar a aplicación.
+ Usado por última vez
+ Preferir rutas de sendeirismo
+ Preferir rutas de sendeirismo
+ Permitir regatos e cunetas
+ Permitir regatos e cunetas
+ Permitir canles de auga intermitentes
+ Permitir canles de auga intermitentes
\ No newline at end of file
diff --git a/OsmAnd/res/values-hu/phrases.xml b/OsmAnd/res/values-hu/phrases.xml
index 312ac3e5ee..29d3e11a5e 100644
--- a/OsmAnd/res/values-hu/phrases.xml
+++ b/OsmAnd/res/values-hu/phrases.xml
@@ -2176,7 +2176,7 @@
Leírás kerekesszékeseknek
Leírás vakoknak
Lépcső
- Korlát
+ Korlát van
Korlát nincs
Rámpa
Rámpa nincs
@@ -2832,7 +2832,7 @@
Sárkányrepülés
Hagyományos indiai (ájurvéda)
Fekvőbeteg-ellátás
- Vészhelyzet
+ Sürgősségi ellátás
beváltható
Páratartalom-mérő
Vízforraló nincs
@@ -2865,7 +2865,7 @@
Repüléstilalmi idő (siklórepüléshez)
Vendégeknek szóló iránymutatás
Vendégeknek szóló iránymutatás nincs
- Vészhelyzet nincs
+ Sürgősségi ellátás nincs
Híd száma
Menza
Útirányjelző tábla: erdőtag (RU)
@@ -3317,7 +3317,7 @@
Roller
Roller nem
Teherautó
- Teherautó nem
+ Teherautóval nem használható
Parkolási díj
Parkolási díj nincs
Parkolási díj
@@ -3891,4 +3891,7 @@
Vízmű
Csöves kút
Fürdésre kijelölt terület
+ Denevéralagút
+ Denevérhíd
+ Vadátjáró
\ No newline at end of file
diff --git a/OsmAnd/res/values-iw/strings.xml b/OsmAnd/res/values-iw/strings.xml
index 97db038f97..90f56acd71 100644
--- a/OsmAnd/res/values-iw/strings.xml
+++ b/OsmAnd/res/values-iw/strings.xml
@@ -3802,7 +3802,7 @@
נא לספק שם לנקודה
מוחק את נקודת היעד הבאה במסלול שלך. אם זו נקודת היעד, הניווט ייפסק.
הורדת מפות ויקיפדיה
- קבלת מידע על נקודות עניין מוויקיפדיה. מדריך הכיס הפרטי שלך - עליך פשוט להפעיל את התוסף של ויקיפדיה וליהנות מערכים על מה שסביבך.
+ קבלת מידע על נקודות עניין מוויקיפדיה, מדריך הכיס הפרטי שלך עם ערכים על מקומות ויעדים.
אופנוע שטח
טוסטוס
כסא גלגלים
@@ -3982,7 +3982,7 @@
היסטוריית חיפוש
קיאק
סירת מנוע
-
+ „ניתן לזיהוי” משמעו שהעקבות תופענה באופן ציבורי בעקבות ה־GPS וברישומי עקבות GPS ציבוריים, כלומר שמשתמשים אחרים יוכלו להוריד את העקבות הגולמיים ולשייך אותם עם שם המשתמש שלך. נתוני נקודות מעקב ציבורית עם חתימת זמן מה־API של ה־GPS שמוגשות דרך ה־API של נקודות המעקב יפנו אל עמוד המעקב המקורי שלך.
משאבים
גודל קובץ משוערך
נא לבחור את הנתונים שייוצאו לקובץ.
@@ -4029,4 +4029,6 @@
לאפשר נחלים וניקוזים
לאפשר מקטעים עם דרכי מים עונתיים
לאפשר מקטעים עם דרכי מים עונתיים
+ „ציבורי” משמעו שהעקבות מופיעים באופן ציבורי בעקבות ה־GPS שלך וברישומי עקבות GPS ציבוריים וברישומי מעקב ציבוריים עם חותמות זמן בתצורה גולמית. הנתונים שמוגשים דרך ה־API אינם מפנים אל עמוד העקבות שלך. חותמות הזמן של נקודות המעקב אינן זמינות דרך ה־API של ה־GPS ונקודות המעקב אינן מסודרות בהתאם לזמן שתועדו.
+ „פרטי” משמעות שהעקבות לא תופענה ברישומים ציבוריים אך נקודות מעקב ממתוכן תהיינה זמינות בסדר אקראי דרך ה־API הציבורי של ה־GPS ללא חותמות זמן.
\ No newline at end of file
diff --git a/OsmAnd/res/values-ka/strings.xml b/OsmAnd/res/values-ka/strings.xml
index 63ff651a4b..a3f8153e60 100644
--- a/OsmAnd/res/values-ka/strings.xml
+++ b/OsmAnd/res/values-ka/strings.xml
@@ -2,32 +2,32 @@
OsmAnd-ით ნავიგაცია გათიშულ რეჟიმში დროებით მიუწვდომელია.
მარცხენა ხელით ტარება
- აირჩიეთ მარცხენა მხარეს საჭის გამომყენებელი ქვეყნებისათვის
- საწყისი პოზიცია ნაპოვნი ჯერ არაა
- პოზიცია უცნობია
+ მარცხენა მხარეს საჭის გამომყენებელი ქვეყნებისათვის.
+ საწყისი პოზიცია ნაპოვნი ჯერ არაა.
+ პოზიცია უცნობია.
გამჭირვალობის შეცვლა (0 - გამჭირვალე, 255 - გაუმჭირვალე)
გნებავთ ჩამოტვირთვის შეწყვეტა?
პროგრამის მთავარი თვისებების გამოსაყენებლად თქვენ გჭირდებათ მონაცემები რომლებიც გამოიყენება გათიშულ რეჟიმში, რომელიც შეგიძლიათ ჩამოტვირთოთ (პარამეტრები->მონაცემები გათიშვისას). ამის შემდეგ თქვენ შეგეძლებათ ძებნა როგორც მისამართის, ასევე საჯარო ტრანსპორტის მიხედვით.
ბაზური რუკა საჭიროა პროგრამის ფუნქციონირებისათვის და არჩეულ იქნა გადმოსაწერად.
- არაფერი არ იქნა ნაპოვნი. თუ ვერ პოულობთ თქვენი რეგიონის რუკას, შეგიძლიათ შექმნათ თვითონ. (იხილეთ http://osmand.net).
+ არაფერი არ იქნა ნაპოვნი. თუ ვერ პოულობთ თქვენი რეგიონის რუკას, შეგიძლიათ შექმნათ თვითონ. (იხილეთ https://osmand.net).
მიმდინარე რუკები (ნახაზები)
გათიშული რუკები (ვექტორული)
- გათიშული რუკების ჩამოტვირთვა, მართვა და დეტალები
+ გათიშული რუკების ჩამოტვირთვა, მართვა და დეტალები.
"ჩართეთ მიმდინარე რუკების დამატება სხვადასხვა წყაროების სანახავად"
მიმდინარე რუკები
- მიმდინარე რუკების გამოყენება (ჩამოტვირთვა და sdcard-ზე ქეშირება)
+ მიმდინარე რუკების გამოყენება (ჩამოტვირთვა და მეხსიერების ბარათზე ქეშირება).
მიმდინარე რუკები
- მიმდინარე და დაქეშირებული ნაწილოვანი რუკების წყაროების გამართვა
- "დამატება ამსუბუქებს სხვადასხვა მიმდინარე ან ქეშირებულ ნაწილოვან რუკებს. ისინი შეიძლება მომზადდეს როგორც გათიშული რუკები და შეინახოს OsmAnd-ის დასტაში. "
+ მიმდინარე და დაქეშირებული ნაწილოვანი რუკების წყაროების გამართვა.
+ დამატება ამსუბუქებს სხვადასხვა მიმდინარე ან ქეშირებულ ნაწილოვან რუკებს. ისინი შეიძლება მომზადდეს როგორც გათიშული რუკები და შეინახოს OsmAnd-ის დასტაში.
დამატება გაძლევთ საშუალებს დევნის ან ნავიგაციის მოწყობილობის ძილის დროს პერიოდულად GPS ჩიპის გააქტიურების საშუალებით.
დამატება მართავს სპეციალური წვდომის შესაძლებლობებს.
დამატება გაძლევთ საშუალებას განახორციელოთ შეცდომების კონტროლი და განვითარება მახასიათებლებისა როგორიცაა ანიმირებული ნავიგაცია.
დამატებათა გამმართველი
- დამატება გაძლევთ საშუალებას გამოიყენოთ აპლიკაციისათვის თანმოყოლილი ფუნქციები როგორიცაა ნაწილოვანი რუკები, თვალის დევნება, ძილის დროის ოპერაციები და სხვა
+ დამატება გაძლევთ საშუალებას გამოიყენოთ აპლიკაციისათვის თანმოყოლილი ფუნქციები როგორიცაა ნაწილოვანი რუკები, თვალის დევნება, ძილის დროის ოპერაციები და სხვა.
დამატების მმართველი
ეს დამატება გაძლევთ საშუალებას გააცნოთ OSM-ს თქვენი აზრი, გახსნა/დახურვა OSM-ის ხოჭოების შესახებ და მიაწოდოთ პროექტს თქვენი ჩაწერილი GPX ფაილები.
ვექტორული რუკები როგორც წესი ჩანს უფრო სწრაფად. შეიძლება არ იმუშაოს ზოგიერთ მოწყობილობაზე.
- ხმით არჩეული ბრძანებების შესრულება
+ ხმით არჩეული ბრძანებების შესრულება:
OsmAnd -ის განვითარება და გამართვა
ადგილობრივი რენდერი
ხმის ტესტირება
@@ -44,7 +44,7 @@
ადგილზე დაბრუნება
დახმარება
წვდომადობის რეჟიმი
- რთავს წვდომადობის თვისებებს
+ რთავს წვდომადობის თვისებებს.
ჩართული
გამორთული
გლობალურ სისტემურ პარამეტრებზე დაყრდნობით
@@ -88,15 +88,15 @@
თვითგამოცხადების ჩართვა
თვითგამოცხადების გამორთვა
აქ ვარ
- რუკის გადიდება ტრეკბოლის ჰორიზონტალური მოძრაობით
+ რუკის გადიდება ტრეკბოლის ჰორიზონტალური მოძრაობით.
ტრეკბოლის გამოყენება გასადიდებლად
- წვდომადობის პარამეტრები
+ წვდომადობის პარამეტრები.
წვდომა
არასაკმარისი მეხსიერება არჩეული ადგილის საჩვენებლად
მანათობელი დაფარვები
- ბილიკებისა და გზების მანათობელი ფერებით ჩვენება
+ ბილიკებისა და გზების მანათობელი ფერებით ჩვენება.
POI-ს ჩასწორება გათიშულ რეჟიმში
- ყოველთვის გამოვიყენოთ POI-ს ჩასწორების გათიშული რეჟიმი
+ ყოველთვის გამოვიყენოთ POI-ს ჩასწორების გათიშული რეჟიმი. წინააღმდეგ შემთხვევაში ცვლილებები მყისიერად აიტვირთება.
აპლიკაციაში POI-ის ცვლილებები არ ეხება ჩამოტვირთულ რუკის ფაილებს. ცვლილებები ინახება ლოკალურ ფაილში.
ატვირთვა…
{0} POI/Bugs ატვირთულია
@@ -105,16 +105,16 @@
ცვლილების წაშლა
OSM POI-ის ასინქრონული ჩასწორება:
ადგილობრივად შენახული OSM POI-ები/Bugs
- ადგილობრივ ბაზაში შენახული OSM POI-ების/Bugs ჩვენება და მართვა
- მიუთითეთ მიმდინარე რეჟიმში დევნის ინტერვალი
+ ადგილობრივ ბაზაში შენახული OSM POI-ების/Bugs ჩვენება და მართვა.
+ მიუთითეთ მიმდინარე რეჟიმში დევნის ინტერვალი.
ცოცხალი დევნის ინტერვალი
- მიუთითეთ ვებ მისამართუ შემდეგი პარამეტრების სინტაქსით : lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}
+ მიუთითეთ ვებ მისამართუ შემდეგი პარამეტრების სინტაქსით : lat={0}, lon={1}, timestamp={2}, hdop={3}, altitude={4}, speed={5}, bearing={6}.
ცოცხალი დევნის ვებ-მისამართი
გთხოვთ ჩართოთ \'დევნის GPX ჟურნალში ჩაწერა\' დევნის პარამეტრებში.
მიმდინარე დევნის ჩვენება
OsmAnd-ის უფასო ვერსია ლიმიტირებულია %1$s ჩამოტვირთვით და არ გააჩნია გათიშული ვიკიპედიის სტატიების მხარდაჭერა.
უფასო ვერსია
- POI-ის აღწერის ჩვენება
+ POI-ის აღწერის ჩვენება.
ჩრდილო ამერიკა
ჩრდილო ამერიკა - შეერთებული შტატები
ცენტრალური ამერიკა
@@ -137,24 +137,24 @@
მომხმარებლის პროფილი
აირჩიეთ მომხმარებლის პროფილი რუკისა და ნავიგაციის პარამეტრებით.
ნავიგაცია
- მიუთითეთ ნავიგაციის პარამეტრები
+ მიუთითეთ ნავიგაციის პარამეტრები.
გლობალური პარამეტრები
- გათიშული მონაცემები\n(გადმოწერა)
+ რუკების გადმოწერა
მთავარი პარამეტრები
- მთავარი პარამეტრების გამართვა
+ მთავარი პარამეტრების გამართვა.
აპლიკაციის მთავარი პარამეტრები
თქვენი OSM-ს მომხმარებლის სახელი
- საჭიროა openstreetmap.org-ზე ოპერაციებისათვის
- თქვენი OSM-ს პაროლი
+ საჭიროა openstreetmap.org-ზე ოპერაციებისათვის.
+ პაროლი
ფონური პარამეტრები
- გამოიყენეთ OsmAnd-ის ეკრანის გათიშულობის დროს გამოსაყენებლად
+ გამოიყენეთ OsmAnd-ის ეკრანის გათიშულობის დროს გამოსაყენებლად.
არასაკმარისი ადგილი %1$s მბ-ის გადმოსაწერად (თავისუფალია: %2$s).
თავისუფალი ადგილი {2} მბ! გადმოვწერო {0} ფაილი ზომით ({1} მბ)?
გამჭირვალე თემა
ადგილობრივი ბიბლიოთეკა მოცემულ მოწყობილობაზე მხარდაჭერილი არაა.
ადგილობრივი ბიბლიოთეკის ინიციალიზაცია…
რუკის ხედვის ცენტრისაკენ ავტომატური გასწორება
- დრო, რომელიც გავა სანამ რუკა იქნება მიმდინარე პოზიციის შესაბამისი იქნება
+ დრო, რომელიც გავა სანამ რუკა იქნება მიმდინარე პოზიციის შესაბამისი იქნება.
მხოლოდ ავტოცენტრირებული ნავიგაცია
ავტოცენტრირებული რუკის ხედვა მხოლოდ ნავიგაციის დროს.
გამოიყენება ავტოცენტრირებული რუკის ხედი.
@@ -172,7 +172,7 @@
ანიმაციის დაწყება
ფაილისათვის სახელის გადარქმევა შეუძლებელია.
ფაილი მოცემული სახელით უკვე არსებობს.
- ძებნის შედეგები შეიცავს რამოდენიმე POI კატეგორიას :
+ ძებნის შედეგები შეიცავს რამოდენიმე POI კატეგორიას.
ადგილობრივი მონაცემები POI-ს ძებნისათვის არ არსებობს.
სახელით ძებნა
POI-ის მონაცემთა ფაილის \'%1$s\', არსებობს ასლი და მისი წაშლა შესაძლებელია.
@@ -190,14 +190,14 @@
ძებნა ახლოს :
ახლოს ძებნა
გზა შეინახა წარმატებით. სახელი \'%1$s\'.
- "ფაილის სახელი: "
+ ფაილის სახელი:
ფაილი მოცემული სახელით უკვე არსებობს.
შენახვა
GPX ფაილების OSM-ში ატვირთვა. ისინი გამოიყენება რუკების გასაუმჯობესებლად.
%1$d %2$d -დან წარმატებით აიტვირთა.
OSM-ში გაგზავნა
მეტი დეტალები რუკის შესახებ
- ვექტორული რუკის დეტალების (გზების და ა.შ.) ჩვენება პატარა გადიდებისას
+ ვექტორული რუკის დეტალების (გზების და ა.შ.) ჩვენება პატარა გადიდებისას.
რჩეული წერტილები წარმატებით წაიშალა.
თქვენ აპირებთ წაშალოთ %1$d რჩეული და %2$d რჩეულთა ჯგუფი. დარწმუნებული ხართ?
საწყისი
@@ -215,7 +215,7 @@
%1$d %2$d -დან წარმატებით გააქტიურდა.
%1$s არ არსებობს
თქვენ აპირებთ %1$s %2$s . გავაგრძელოთ?
- გათიშული მონაცემების მმართველი
+ გათიშული მონაცემების მმართველი.
აქტივაცია
დეაქტივაცია
ჩამოტვირთვა
@@ -229,14 +229,14 @@
POI მონაცემები
TTS ხმა
ახალი ძებნა
- აირჩიეთ ტექსტის ზომა რუკაზე დატანილი სახელებისათვის
+ ტექსტის ზომა რუკაზე დატანილი სახელებისათვის:
ტექსტის ზომა
რენდერინგის ინფორმაცია
- რენდერის სისწრაფის ჩვენება
+ რენდერის სისწრაფის ჩვენება.
ახალი მონაცემების განშლა…
არჩეულია მიმდინარე ნავიგაციის სერვისი მაგრამ ინტერნეტთან შეერთება წვდომადი არაა.
ენა მხარდაჭერილი არაა
- არჩეული ენა არაა მხარდაჭერილი ანდროიდის მიმდინარე ვერსიის TTS ძრავის მიერ. გნებავთ მოვძებნოთ სხვა ძრავი market-ში? წინააღმდეგ შემთხვევაში გამოყენებულ იქნება მიმდინარე TTS ენა.
+ არჩეული ენა არაა მხარდაჭერილი ანდროიდის მიმდინარე ვერსიის TTS ძრავის მიერ. გნებავთ მოვძებნოთ სხვა ძრავი market-ში\? წინააღმდეგ შემთხვევაში გამოყენებულ იქნება მიმდინარე TTS ენა\?
ნაკლული მონაცემები
არჩეული ენის შესაბამისი მონაცემების პოვნა შეუძლებელია. გნებავთ მაღაზიაში მათი მოძებნა?
GPX-ის უკუღმა მიმართულება
@@ -244,14 +244,14 @@
მიმდინარე ბილიკის დევნა
ამ ლოკაციისათვის არსებობს გათიშული ვექტორული რუკა.\n\t\n\tაქტივაციისათვის \'მენიუ\' -> \'ხედის გამართვა\' -> \'რუკის წყარო…\' -> \'გათიშული ვექტორული რუკები\'.
ხმოვანი ბრძანების შედეგი
- აირჩიეთ არხი ხმოვანი ბრძანებებისათვის
+ აირჩიეთ არხი ხმოვანი ბრძანებებისათვის.
ხმოვანი დარეკვა
შეტყობინების ხმა
მუსიკის ხმა
შეუძლებელია %1$s -ის ჩამოტვირთვა, გთხოვთ თავიდან დააყენოთ აპლიკაცია.
- გამჭირვალობის შეცვლა
+ გამჭირვალობის შეცვლა.
გამჭირვალობა
- ბაზური რუკის გამჭირვალობის შეცვლა
+ ბაზური რუკის გამჭირვალობის შეცვლა.
ბაზური რუკის გამჭირვალობა
ქვედა რუკა…
ქვედა რუკა
@@ -260,21 +260,21 @@
არა
ზედა რუკა
ზედა რუკის არჩევა
- რუკა უკვე დაყენებულია. მიმდინარეობს პარამეტრების განახლება
- აირჩიეთ რუკა დასაყენებლად ან განსანახლებლად
- ოპერაციისათვის საჭიროა ინტერნეტი, რომელთანაც წვდომა არ არსებობს
+ რუკა უკვე დაყენებულია. მიმდინარეობს პარამეტრების განახლება.
+ აირჩიეთ რუკა დასაყენებლად ან განსანახლებლად.
+ ოპერაციისათვის საჭიროა ინტერნეტი, რომელთანაც წვდომა არ არსებობს.
მეტის ჩაყენება…
- მინიმალური გადიდება ვექტორული რუკების ჩვენებისათვის
+ ამ დონის შემდეგ რასტერული რუკების გამოყენება.
ვექტორული გადიდების მინ. ზომა
- " Online OSM რუკების დალაგება სურათებით"
- შეცდომა გათიშული ძებნის დროს
+ Online OSM რუკების დალაგება სურათებით.
+ შეცდომა გათიშული ძებნის დროს.
მისამართის ძებნა გათიშული რუკების გამოყენებით
სისტემა
- ენის არჩევა
+ ენის არჩევა (დაინახავთ OsmAnd-ის გადატვირთვის შემდეგ).
ენა
შემდეგი
წინა
- სიგრძისა და სიჩქარის ერთეულები
+ სიგრძისა და სიჩქარის ერთეულები.
გაზომვის ერთეული
მილი/ფუტი
მილი/იარდი
@@ -315,7 +315,7 @@
რუკების ინდექსირება…
POI-ის ინდექსირება…
ტრანსპორტის ინდექსირება…
- მოხდა I/O შეცდომა
+ I/O შეცდომა
კმ
კმ/ს
მ
@@ -348,7 +348,7 @@
ღამე
მზის ჩასვლა/ამოსვლა
მზის სენსორი
- აირჩიეთ დღეღამის არჩევის წესები
+ აირჩიეთ დღეღამის არჩევის წესები.
დღის/ღამის არჩევა
გადმოვიწერო {0} ფაილი(ები) ზომით ({1} მბ)?
არჩეულია {0}
@@ -356,17 +356,17 @@
ყველაფრის არჩევა
განახლება
უსწრაფესი გზა
- "ჩართეთ უსწრაფესი გზის დასათვლელად ან გამორთეთ უმოკლესისათვის "
+ ჩართეთ უსწრაფესი გზის დასათვლელად ან გამორთეთ უმოკლესისათვის.
გადიდებისას {0} გადმოსაწერია {1} ნაწილი ({2} MB)
რუკის გადმოწერა
აირჩიეთ მაქსიმალური გადიდება ჩასატვირთად
რუკის გადმოწერა შეუძლებელია
გაგრძელებადი რენდერი
- მიყოლებული რენდერის ჩვენება ცალცალკე სურათების ჩვენების მაგიერ
- მონიშნული არეალის რენდერის დროს მოხდა შეცდომა
+ მიყოლებული რენდერის ჩვენება ცალცალკე სურათების ჩვენების მაგიერ.
+ მონიშნული არეალის რენდერის დროს მოხდა შეცდომა.
მდებარეობის პარამეტრები …
რენდერერი წარმატებით ჩაიტვირთა
- მოხდა შეცდომა: რენდერერი არ ჩაიტვირთა
+ მოხდა შეცდომა: რენდერერი არ ჩაიტვირთა.
ვექტორული მარენდერებელი
რენდერის გარეგნობის არჩევა
POI-ს ვებგვერდის ჩვენება
@@ -375,7 +375,7 @@
ტელეფონი
ფილტრირებისათვის აკრიფეთ
მაღალი გარჩევადობის ეკრანი
- არ დააპატარაოს (და დაბუროს) რუკის ნაწილები მაღალი გარჩევადობის ეკრანებზე
+ არ დააპატარავო (და დაბუროს) რუკის ნაწილები მაღალი გარჩევადობის ეკრანებზე.
ტრანსპორტის ძებნა
ტრანსპორტის ძებნა (არ მოიძებნა):
ტრანსპორტის პასუხები ({0} -მდე):
@@ -383,7 +383,7 @@
ხმა
ვექტორული რუკები ჩატვირთული არ იქნა
GPX ფაილები /tracks დასტაში ნაპოვნი არ იქნა
- GPX მონაცემების კითხვის შეცდომა
+ GPX მონაცემების კითხვის შეცდომა.
გათიშული ვექტორული რუკები
გაჩერებაზე ტრანსპორტის ძებნა
POI-ის ჩასწორება
@@ -391,7 +391,7 @@
კომპასისაკენ
მოძრაობის მიმართულებით
არ შეაბრუნო
- აირჩიეთ რუკის გასწორება ეკრანის მიმართ
+ რუკის გასწორება:
რუკის ორიენტაცია
დეტალები გზის შესახებ
რჩეულების იმპორტი წარმატებით დასრულდა
@@ -399,7 +399,7 @@
რჩეულები წარმატებით იქნა შენახული {0} -ში
არ მოიძებნა შესანახავად მზა რჩეულები
იმპორტი
- შეცდომა GPX-ის ჩატვირთვისას
+ შეცდომა GPX-ის ჩატვირთვისას.
რეპორტის გაგზავნა
გათიშული მონაცემები რაიონისათვის SD card-ზე ნაპოვნი არაა. გთხოვთ გადმოწეროთ ინტერნეტიდან.
შეიტანეთ მონაცემები POI-ის მოსაძებნად
@@ -413,9 +413,9 @@
რუკის წყარო…
ხედის აღწერა
POI-ის ძებნა
- რუკის სამოძრაოდ გამოიყენეთ ტრეკბოლი
+ რუკის სამოძრაოდ გამოიყენეთ ტრეკბოლი.
გამოიყენეთ ტრეკბოლი
- გთხოვთ დააყენოთ ფონური პოზიცირების ჩასასწორებელი მაქსიმალური დრო
+ გთხოვთ დააყენოთ ფონური პოზიცირების ჩასასწორებელი მაქსიმალური დრო.
ჩასწორების მოლოდინის მაქსიმალური დრო
სად ვარ?
OsmAnd-ის ნავიგაციის სერვისი
@@ -423,11 +423,11 @@
GPS
წამი
წთ.
- "ფონური რეჟიმის მიერ გამოყენებული გაღვიძების ინტერვალი "
- გაღვიძების ინტერვალი
- აირჩიეთ მდებარეობის მომწოდებელი ფონური რეჟიმის დროს
+ ფონური რეჟიმის მიერ გამოყენებული გაღვიძების ინტერვალი:
+ GPS-ის გაღვიძების ინტერვალი
+ აირჩიეთ მდებარეობის მომწოდებელი ფონური რეჟიმის დროს:
მდებარეობის მომწოდებელი
- როდესაც ეკრანი გამორთულია, OsmAnd დარჩეს გაშვებული ფონურ რეჟიმში
+ როდესაც ეკრანი გამორთულია, OsmAnd დარჩეს გაშვებული ფონურ რეჟიმში.
ფონად გაშვება
ფონური ნავიგაციის სერვისი მოითხოვს მდებარეობის მომწოდებლის ჩართვას.
ფილტრის დამალვა
@@ -435,7 +435,7 @@
ფილტრი
ხმა ჩართულია
ხმა გამორთულია
- აირჩიეთ ხმით წამძღვარება ნავიგაციისათვის
+ აირჩიეთ ხმით წამძღვარება ნავიგაციისათვის.
ხმით წამძღვარება
ხმოვანი მონაცემების მომზადება…
ხმოვანი მონაცემები მხარდაჭერილი არაა
@@ -461,8 +461,8 @@
პორტრეტი
ლანდშაფტი
ეკრანის ორიენტაცია
- პორტრეტი, ლანდშაფტი ან როგორც მოწყობილობა
- საათური ფორმატის გახსნა ჩასწორებისათვის მხარდაჭერილი არაა
+ პორტრეტი, ლანდშაფტი ან როგორც მოწყობილობა.
+ საათური ფორმატის გახსნა ჩასწორებისათვის მხარდაჭერილი არაა.
ახალი წესის დამატება
გზები
გაჩერება
@@ -477,18 +477,18 @@
გზის სიგრძე
ტრანსპორტი
OK
- რუკაზე საზოგადოებრივი ტრანსპორტის გაჩერებების ჩვენება
+ რუკაზე საზოგადოებრივი ტრანსპორტის გაჩერებების ჩვენება.
გაჩერებების ჩვენება
OsmAnd - სანავიგაციო აპლიკაცია
POI მონაცემები წარმატებით განახლდა (ჩატვირთულ იქნა {0})
- შეცდომა ლოკალური POI სიის განახლებისას
- შეცდომა მონაცემების სერვერიდან კითხვისას
+ შეცდომა ლოკალური POI სიის განახლებისას.
+ შეცდომა მონაცემების სერვერიდან კითხვისას.
გათიშული POI მონაცემები ამ არეალისათვის ხელმიუწვდომელია
პატარა ზომის გადიდებისათვის POI-ის განახლება არ შეიძლება
POI-ის განახლება
განვანახლო ლოკალური მონაცემები ინტერნეტიდან?
- ქალაქი:\n {0}
- ქუჩა:\n {0}, {1}
+ ქალაქი: {0}
+ ქუჩა: {0}, {1}
გადაკვეთა: {0} x {1} in {2}
შენობა: {0}, {1}, {2}
რჩეული
@@ -504,15 +504,15 @@
გათიშული
ინტერნეტი
მაქს. მიმდინარე გადიდება
- აირჩიეთ მაქსიმალური გადიდება მიმდინარე რუკების ნაწილის ჩამოტვირთვისას
- ჯამური სიშორე %1$s,\n მოგზაურობის დრო %2$d სთ %3$d წთ.
- აირჩიეთ მიმდინარე ან გათიშული ნავიგაციის სერვისი
+ აირჩიეთ მაქსიმალური გადიდება მიმდინარე რუკების ნაწილის ჩამოტვირთვისას.
+ ჯამური სიშორე %1$s, მოგზაურობის დრო %2$d სთ %3$d წთ.
+ მიმდინარე ან გათიშული ნავიგაციის სერვისი.
ნავიგაციის სერვისი
- შენახვის დასტა SDCard-ზე მიუწვდომელია
+ შენახვის დასტა SDCard-ზე მიუწვდომელია!
ჩამოვტვირთო {0} - {1} ?
გათიშული მონაცემები {0}-სათვის უკვე არსებობს ({1}). გნებავთ მისი განახლება ({2}) ?
მისამართი
- ჩამოტვირთვა წარმატებულად დამთავრდა
+ ჩამოტვირთვა დასრულებულია
წვდომადი რაიონების სიის ჩამოტვირთვა…
რაიონების ლისტი არ მიღებული არაა osmand.net-იდან.
რჩეული წერტილი ჩასწორებულია
@@ -536,12 +536,12 @@
ქუჩების ჩატვირთვა…
ქალაქების ჩატვირთვა…
POI
- შეცდომნა GPX-ის შენახვისას
- შეცდომა გზის დათვლისას
- გზის დათვლისას მოხდა შეცდომა
- შეცდომა: დათვლილი გზა ცარიელია
+ შეცდომა GPX-ის შენახვისას.
+ შეცდომა გზის დათვლისას.
+ გზის დათვლის შეცდომა.
+ დათვლილი გზა ცარიელია.
ახალი გზა დათვლილია. დაშორება
- თქვენ მიხვედით თქვენს დანიშნულების ადგილას
+ მიხვედით.
კოორდინატები არასწორია!
OsmAnd-ის რუკაზე დაბრუნება
დახურვა
@@ -550,27 +550,27 @@
ბოლოს გაშვებული OsmAnd მოკვდა. ჟურნალის ფაილია {0}. გთხოვთ მოგვწეროთ ჟურნალის ფაილი და როგორ მოხდა ეს.
GPX ძიების SD-ზე შენახვა…
დამთავრდა
- ინტერნეტის გამოყენება გზის დასათვლელად
+ ინტერნეტის გამოყენება გზის დასათვლელად.
მიმდინარე ნავიგაციის გამოყენება
- მიუთუთეთ Openstreetmap.org (OSM) პარამეტრები OSM-სთან დასაკავშირებლად
- მიუთითეთ ენა, მონაცემების ხელახლა წაკითხვა/ჩამოტვირთვა
+ მიუთუთეთ Openstreetmap.org (OSM) პარამეტრები OSM-სთან დასაკავშირებლად.
+ მიუთითეთ ენა, მონაცემების ხელახლა წაკითხვა/ჩამოტვირთვა.
მონაცემები
- OSM-ის გამართვა
- სიჩქარეზე რუკის ავტომატური გადიდება
+ OpenStreetMap-ის გამართვა
+ სიჩქარეზე რუკის ავტომატური გადიდება.
რუკის ავტომატური გადიდება
დამატებითი პარამეტრები
პარამეტრები
- მიმდინარე ძებნის SDCard-ზე ჩაწერა
+ მიმდინარე ძებნის SDCard-ზე ჩაწერა.
მიმდინარე დევნის დამახსოვრება
- ჟურნალირების ინტერვალი
+ ნავიგაციისას ჟურნალირების ინტერვალი
აირჩიეთ პოზიცირების ინტერვალი დევნისათვის
- დევნები ჩაიწერება დევნის დასტაში, დალაგდება დღეების მიხედვით
+ დევნები ჩაიწერება დევნის დასტაში, დალაგდება დღეების მიხედვით.
დევნის GPX-ში ჟურნალირება
რუკის განახლება
ხელახალი ჩატვირთვა
მიზანი
რჩეულებში დამატება
- აირჩიეთ ადგილობრივ და ინგლისურ სახელებს შორის
+ აირჩიეთ ადგილობრივ და ინგლისურ სახელებს შორის.
ინგლისური სახელების გამოყენება
აპლიკაციის პარამეტრები
ძებნა მისამართით
@@ -579,11 +579,11 @@
აირჩიეთ ქალაქი
აირჩიეთ ქვეყანა
ხედვის კუთხის ჩვენება
- რუკის 3D ხედვის ჩართვა
+ რუკის 3D ხედვის ჩართვა.
რუკის 3D ხედვა
- POI-ის რუკაზე ჩვენება (ბოლოს არჩეული ფილტრის გამოყენებით)
+ ბოლოს გამოყენებული POI-ის რუკაზე ჩვენება.
POI-ის ჩვენება
- აირჩიეთ მიმდინარე ან ქეშირებული რუკის ნაწილის წყარო
+ აირჩიეთ მიმდინარე ან ქეშირებული რუკის ნაწილის წყარო.
რუკის წყარო
რუკის წყარო
ინტერნეტის გამოყენება
@@ -612,8 +612,8 @@
განედი
გრძედი
DDD.DD
- DDD MM.MM
- DDD MM SS.SS
+ DDD MM.MMM
+ DDD MM SS.S
რუკაზე ჩვენება
აირჩიეთ მისამართი
რაიონი
@@ -639,7 +639,7 @@
შეტყობინება
ავტორი
კომენტარი დამატებულია
- მოხდა შეცდომა: კომენტარი არ დაემატა
+ კომენტარი არ დაემატა.
POI-ის ჩასწორება
POI-ის შექმნა
POI ვერ მოიძებნა
@@ -665,19 +665,19 @@
წაიშალა ფილტრი %1$s
შეიქმნა ფილტრი %1$s
გზის მონაცემები
- ფორმატი:
+ ფორმატი
POI - ინტერესის წერტილი
მისამართის ძებნა
კოორდინატები
ტრანსპორტის ძებნა
რჩეულებში ძებნა
- ყველა მიწისზედა რუკის ობიექტის გამჭირვალედ ჩვენება
+ ყველა მიწისზედა რუკის ობიექტის გამჭირვალედ ჩვენება.
პოლიგონების გარეშე
რენდერის რეჟიმი
რუკის გაუმჯობესება მომხმარებლის პროფილის მიხედვით
აირჩიეთ მინიმალური გადიდების ზომა რუკის საჩვენებლად. შეიძლება საჭირო გახდეს SRTM ფაილი:
კონტურის ჩვენება
- რუკის მეტი წვრილმანის ჩვენება
+ რუკის მეტი წვრილმანის ჩვენება.
მეტი დეტალები რუკის შესახებ
შემობრუნდით : %1$d
გეჭიროთ მარცხენა მხარე
@@ -705,20 +705,21 @@
AM
პარკინგის ადგილი
დამატება გაძლევთ საშუალებას შეინახოთ მანქანის პარკინგის მდებარეობა.
- პარკინგის მდებარეობის დამატება
+ პარკინგის მდებარეობა
დამატება პარკინგის მდებარეობად
პარკინგის მაჩვენებლის წაშლა
საწყისი წერტილი მეტისმეტად შორსაა უახლოესი გზისაგან.
გაზიარებული მდებარეობა
- აირჩიეთ მოძრავი გზის აჩქარება
+ აირჩიეთ მოძრავი გზის აჩქარება:
გამოყოფილი მეხსიერება %1$s მბ (Android-ის ლიმიტი %2$s მბ, Dalvik %3$s მბ).
გამოყოფილი მეხსიერება
- აპლიკაციის მიერ გამოყენებული ჯამური ადგილობრივი მეხსიერება %1$s მბ (Dalvik %2$s მბ, სხვა %3$s მბ). პროპორციული მეხსიერება %4$s მბ (Android-ის ლიმიტი %5$s მბ, Dalvik %6$s მბ).
+ აპლიკაციის მიერ გამოყენებული ჯამური ადგილობრივი მეხსიერება %1$s მბ (Dalvik %2$s მბ, სხვა %3$s მბ).
+\nპროპორციული მეხსიერება %4$s მბ (Android-ის ლიმიტი %5$s მბ, Dalvik %6$s მბ).
ჯამური ადგილობრივი მეხსიერება
სთ
წთ
- მანქანის პარკინგის დროა:
- კომპასის გამოყენება მიმართულების დაუდგენლობისას
+ მანქანის პარკინგის დროა
+ კომპასის გამოყენება მიმართულების დაუდგენლობისას.
კომპასის გამოყენება
გზის გადათვლა სასურველი წერტილის პოვნის შემთხვევაში
წინა გზა არ დასრულებულა. გნებავთ მისი გაყოლა? (%1$s წმ)
@@ -745,18 +746,19 @@
დააყენეთ გაღვიძების ინტერვალი:
დააჭირეთ ბოქლომს ეკრანის გასახსნელად
ეკრანზე ჩაკეტვის მოხსნა
- ძილის რეჟიმის გამორთვა
- ძილის რეჟიმის ჩართვა
+ პროგრამის ფონურ რეჟიმში გაშვება
+ შეჩერდით
+\nგაშვებულია ფონურ რეჟიმში
POI ფილტრის შექმნა
ინფორმაცია დღეღამის შესახებ
- რენდერის ატრიბუტები:
+ რენდერის ატრიბუტები
ეკრანის გამართვა
ბილიკების ჩვენება
მოუკირწყლავი გზებისათვის თავის არიდება
ბორნისათვის თავის არიდება
თავის არიდება…
გაფრთხილებების ჩვენება…
- სიჩქარის ლიმიტის, კამერებისა და საცობების ჩვენება
+ სიჩქარის ლიმიტის, გვირაბების, კამერებისა და საცობების ჩვენება.
მანათობელი გზები
სახაზავის ჩვენება
ხედვის მიმართულება
@@ -767,7 +769,7 @@
რენდერის რეჟიმი
აირჩიეთ მხოლოდ გზების საჩვენებლად:
რუკები მხოლოდ გზებით
- "გზები. "
+ გზები
ჩვეულებრივი რუკები
რუკები მხოლოდ გზებით
აპლიკაციის დაცულ რეჟიმში გაშვება(ადგილობრივი კოდის მაგიერ ნელი Android-ის რეჟიმის გამოყენება).
@@ -794,7 +796,7 @@
გზის ბოლო წერტილის დამატება
გზის პირველი წერტილის დამატება
დანიშნულების წერტილის შეცვლა
- თქვენ უკვე მიუთითეთ დანიშნულების წერტილი.
+ თქვენ უკვე მიუთითეთ დანიშნულების წერტილი:
გზის ნიშნულები
გზის ნიშნანი %1$s მეტისმეტად შორსაა უახლოესი გზიდან.
თქვენ მიაღწიეთ თქვენს დანიშნულების წერტილს
@@ -810,37 +812,37 @@
რესტორნები
ღირსშესანიშნაობები
მოტოციკლეტის გზებისათვის თავის არიდება
- ნავიგაციისას პიზიციის მიბმა გზებისათვის
+ ნავიგაციისას პიზიციის გზებისათვის მიბმა.
გზისთვის მიბმა
OsmAnd არის ნავიგაციის აპლიკაცია ღია წყაროთი გათიშული და ონლაინ რუკების მხარდაჭერით
გზის წერტილი
აუდიო/ვიდეო მონაცემები
დარწმუნებული ბრძანდებით რომ გნებავთ ნავიგაციის შეწყვეტა?
დარწმუნებული ბრძანდებით რომ გნებავთ გაასუფთაოთ თქვენი დანიშნულების წერტილი?
- ჩართეთ ზუსტი გზები მათი მანძილის ზუსტად დასათვლელად. მაგრამ ის ძალიან შეზღუდულია მანძილით და არ იყენებს ადგილობრივ ბიბლიოთეკას.
+ ზუსტი გზები მათი მანძილის ზუსტად დასათვლელად. მაგრამ ის ძალიან შეზღუდულია მანძილით და არ იყენებს ადგილობრივ ბიბლიოთეკას და ნელია.
გზის ზუსტი დათვლა (ალფა)
ჩვენება
- ფოტო %1$s %2$s-დან
+ ფოტო %1$s %2$s
ფოტოს გადაღება
ფოტოს გადაღება
Dropbox-ის დამატება საშუალებას გაძლევთ გააკეთოთ სინქრონიზაცია თქვენი გზებისა და აუდიო/ვიდეო შენიშვნებისა თქვენს dropbox-ის ანგარიშთან.
Dropbox-ის დამატება
წყობის შეცვლა
- პროგრამის განვითარების მხარდასაჭერად გთხოვთ შეიძინოთ Contour lines დამატება Market-დან.
+ პროგრამის განვითარების მხარდასაჭერად გთხოვთ შეიძინოთ Contour lines პლაგინი.
დამატება Contour lines
ვიდეოს ჩაწერა
ხმის ჩაწერა
- ღილაკის ნაგულისხმევი ქცევის არჩევა
+ ღილაკის ნაგულისხმევი ქცევის არჩევა:
ღილაკის ნაგულისხმევი ქცევა
- აირჩიეთ ვიდეო გამოსახულების ფორმატი
+ აირჩიეთ ვიდეო გამოსახულების ფორმატი:
ვიდეო გამოსახულების ფორმატი
- ვიდეოს ჩასაწერად სისტემური ჩამწერის გამოყენება
+ ვიდეოს ჩასაწერად სისტემური ჩამწერის გამოყენება.
გარე ჩამწერის გამოყენება
- აუდიო/ვიდეო-ს გამართვა
- "აუდიო/ვიდეო პარამეტრები "
- "ჩაწერის შეცდომა "
+ აუდიო/ვიდეო-ს გამართვა.
+ აუდიო/ვიდეო პარამეტრები
+ ჩაწერის შეცდომა
კამერა მიუწვდომელია
- მიმდინარეობს ხმის/ვიდეოს ჩაწერა. შესაწყვეტად დააწირეთ AV ღილაკს.
+ მიმდინარეობს ხმის/ვიდეოს ჩაწერა. შესაწყვეტად დააჭირეთ AV ღილაკს.
მოცემული ჩანაწერიდან იკვრება მხოლოდ ხმა.\n%1$s
გარე დამკვრელის გაშვება
გნებავთ ჩანაწერის წაშლა?
@@ -848,18 +850,18 @@
ხმოვანი შენიშვნის ჩაწერა
ვიდეო შენიშვნის ჩაწერა
ჩანაწერების დონე
- ჩანაწერის დაკვრა შეუძლებელია
+ ჩანაწერის დაკვრა შეუძლებელია.
ჩანაწერის წაშლა
დაკვრა
ჩანაწერი %1$s %2$s %3$s-დან
- ჩანაწერი
+ მიმდინარეობს ჩაწერა
ხმოვანი/ვიდეო შენიშვნები
OsmAnd-ის დამატება გათიშული კონტურული ხაზებისათვის
- "ეს დამატება უზრუნველყოფს კონტურულ ხაზებს, რომლებიც შეიძლება ნაჩვენები იქნას OsmAnd-ის გათიშულ რუკებზე. გლობალური მონაცემები (70 გრადუს ჩრდილოეთსა და 70 გრადუს სამხრეთს შორის) ემყარება SRTM (Shuttle Radar Topography Mission) და ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer)-ის მონაცემებს, რომელიც წარმოადგენს ფოტოკამერას Terra-ზე, NASA-ს წამყვან თანამგზავრზე, რომელიც ემსახურება დედამიწის დათვალიერების სისტემას. ASTER წარმოადგენს ერთობლივ პროექტს NASA-ს, იაპონიის ეკონომიკის სამინისტროს, ვაჭრობისა და ინდუსტრიის (METI), და იაპონიის კოსმოსურ სისტემებს (J-spacesystems) შორის. "
+ ეს დამატება უზრუნველყოფს კონტურულ ხაზებს, რომლებიც შეიძლება ნაჩვენები იქნას OsmAnd-ის გათიშულ რუკებზე. გლობალური მონაცემები (70 გრადუს ჩრდილოეთსა და 70 გრადუს სამხრეთს შორის) ემყარება SRTM (Shuttle Radar Topography Mission) და ASTER (Advanced Spaceborne Thermal Emission and Reflection Radiometer)-ის მონაცემებს, რომელიც წარმოადგენს ფოტოკამერას Terra-ზე, NASA-ს წამყვან თანამგზავრზე, რომელიც ემსახურება დედამიწის დათვალიერების სისტემას. ASTER წარმოადგენს ერთობლივ პროექტს NASA-ს, იაპონიის ეკონომიკის სამინისტროს, ვაჭრობისა და ინდუსტრიის (METI), და იაპონიის კოსმოსურ სისტემებს (J-spacesystems) შორის.
მანძილის გაზომვა
- მდებარეობა შენიშვნის მისაბმელად ჯერ განსაზღვრული არაა. გამოიყენეთ \"მდებარეობის გამოყენება…\" შენიშვნის სასურველი მდებარეობისათვის მისანიჭებლად
+ გამოიყენეთ \"მდებარეობის გამოყენება…\" შენიშვნის სასურველი მდებარეობისათვის მისანიჭებლად.
ხმოვანი შენიშვნები
- მგზავრობისას ხმოვანი/ვიდეო შენიშვნების ჩაწერა
+ მგზავრობისას ხმოვანი/ვიდეო შენიშვნების ჩაწერა.
ხმოვანი/ვიდეო შენიშვნები
მონაკვეთები
კონტურული ხაზები
@@ -867,18 +869,18 @@
კონტურული ხაზების დამატება
სხვა რუკები
კოტურული ხაზების მონაცემები
- საზღვრების დამალვა
- რეგიონალური საზღვრების ჩვენების შეზღუდვა (ადმინისტრირების დონე 5-9)
+ საზღვრები
+ რეგიონალური საზღვრების ჩვენების შეზღუდვა (ადმინისტრირების დონე 5-9).
შეწყვეტა
დაწყება
სიჩქარის ლიმიტი
გან %1$.3f, გრძ %2$.3f
OsmAnd წარმოადგენს აპლიკაციას ღია კოდით გათიშული და მიმდინარე რუკებით ნავიგაციისათვის
- აირჩიეთ ტრანსპორტის ტიპი
+ ტრანსპორტის ტიპი:
დაუსრულებელი
- აირჩიეთ აპლიკაციის რეჟიმები
+ აირჩეთ პროფილი.
აპლიკაციის პროფილები
- რუკის რენდერი:
+ რუკის რენდერი
ფეხით მოგზაურობა
მოტოციკლი
გემი
@@ -888,7 +890,7 @@
გთხოვთ ჯერ გადაითვალოთ გზა
სიმულაცია გამოთვლილი გზის გამოყენებით
სიმულაცია GPX მიყოლით
- ჩემი არჩევნის დამახსოვრება
+ არჩევნის დამახსოვრება
და
ან
ავტომატური გადიდების გათიშვა
@@ -906,7 +908,7 @@
მაქსიმალური გადიდებადობა: %1$s
მინიმალური გადიდებადობა: %1$s
ინდექსი: %1$s
- ინდექსის წყარო %1$s წარმატებით იქნა შენახული
+ ინდექსის წყარო %1$s შენახულია
ზღვის დონიდან
მაქს. გადიდება
დროის გასვლა (წთ)
@@ -915,20 +917,20 @@
აირჩიეთ არსებული…
აღწერა/ჩასწორება…
FPS გარჩევის ინფორმაცია
- აირჩიეთ გზის რეგიონი: აშშ, ევროპა, UK, აზია და სხვა
+ აირჩიეთ გზის რეგიონი: აშშ, ევროპა, UK, აზია და სხვა.
გზის რეგიონი
იაპონია
აშშ
კანადა
- ევროპა & აზია
+ ევროპა & აზია და სხვა
UK, ინდოეთია, ავსტრალია & სხვანი
გაცხადება…
- გაცხადებებში ქუჩის სახელების, სიჩქარის შეზღუდვის (იძულებითი გაჩერებების, სიჩქარის კონტროლის), ჩქაროსნული კამერების, სიჩქარის ლიმიტების მითითების ჩასწორება
- ქუჩის სახელების გაცხადება
- სიჩქარის ლიმიტის გაცხადება
- ჩქაროსნული კამერების გაცხადება
- ტრაფიკის შეტყობინებების გაცხადება
- გთხოვთ პარამეტრებში მიუთითოთ OSM-ის მომხმარებელი და პაროლი
+ გაცხადებებში ქუჩის სახელების, სიჩქარის შეზღუდვის (იძულებითი გაჩერებების, სიჩქარის კონტროლის), ჩქაროსნული კამერების, სიჩქარის ლიმიტების მითითების ჩასწორება.
+ ქუჩის სახელები (TTS)
+ სიჩქარის ლიმიტი
+ ჩქაროსნული კამერები
+ ტრაფიკის შეტყობინებები
+ გთხოვთ \'პარამეტრებში\' მიუთითოთ OSM-ის მომხმარებელი და პაროლი
შუალედური წერტილების გასუფთავება
შუალედური წერტილების დატოვება
თქვენ უკვე დააყენეთ შუალედური წერტილები.
@@ -943,9 +945,9 @@
ჯერ აირჩიეთ ქალაქი ან ქუჩა
ქუჩის ახლომდებარე ქალაქებში ძებნა
დანიშნულების პუნქტამდე მათი ოპტიმალური განლაგებისათვის შუალედური წერტილები გადალაგებული იქნა.
- დალაგება
+ სახლის ნომრებით დალაგება
OSM ცვლილებების ფაილის გენერაცია წარმატებულია %1$s
- OSM ცვლილებების მარქაფი წარუმატებლად დასრულდა
+ OSM ცვლილებების მარქაფი წარუმატებელია.
OSM ცვლილებების მარქაფი
წერტილის წაშლა
დრო
@@ -954,36 +956,36 @@
სიმაღლე
წერტილი
GPX ფაილის სახელი
- GPX ფაილი წარმატებით იქნა შენახული {0}
+ GPX ფაილი შენახულია {0}
გზების შექმნა (ან არსებული GPX ფაილების გამოყენება/შეცვლა) წერტილებს შორის მანძილის დასათვლელად. GPX შენახვა შეიძლება გამოყენებულ იქნას GPS გზების დასათვლელად.
- მანძილის დასათვლელი & დასაგეგმი ხელსაწყო
+ მანძილის დასათვლელი და დასაგეგმი ხელსაწყო
აღარ მაჩვენო
ჩასწორების დაწყება
ჩასწორების დამთავრება
ახალი ქვეგზის დაწყება
ყველა წერტილის გასუფთავება
- არსებული GPX-ის გახსნა
+ არსებული GPX ფაილის გახსნა
გთხოვთ მოითმინოთ სანამ დასრულდება მიმდინარე ამოცანა
- კომპასის ცდომილებების თავიდან ასაცილებლად გამოიყენეთ კალმანის ფილტრი
+ კომპასის ცდომილებების თავიდან ასაცილებლად გამოიყენეთ კალმანის ფილტრი.
კალმანის ფილტრის გამოყენება
- კომპასის მნიშვნელობის გამოსათვლელად ორიენტაციის სენსორის მაგიერ მაგნიტური სენსორის გამოყენება
+ კომპასის მნიშვნელობის გამოსათვლელად ორიენტაციის სენსორის მაგიერ მაგნიტური სენსორის გამოყენება.
მაგნიტური სენსორის გამოყენება
სხვა
დარჩენილია %1$d ფაილი
- ჩამოსატვირთად წვდომადია %1$d ფაილი
+ ჩამოსატვირთია %1$d ფაილი
მთლიანი ვერსია
- გზის წაშლა
+ გნებავთ გზის წაშლა\?
ნავიგაციის შეწყვეტა
დანიშნულების გასუფთავება
- wifi მიწვდომადი არაა. ნამდვილად გნებავთ მიმდინარე კავშირით ფაილის ჩამოტვირთვის გაგრძელება?
- ქუჩა
+ wifi მიუწვდომელია. ნამდვილად გნებავთ მიმდინარე კავშირით ფაილის ჩამოტვირთვის გაგრძელება\?
+ ქუჩის სახელი
სახლის ნომერი
- ჟურნალიზაციის სერვისები & ძილის რეჟიმი
- მოგზაურობების ჩაწერის გამართვა & ძილის რეჟიმის ჩართვა
- აპლიკაციის თემის არჩევა
+ მოგზაურობის ჩაწერა
+ მოგზაურობების ჩაწერის გამართვა.
+ აპლიკაციის თემის არჩევა.
აპლიკაციის თემა
მაღალი წვდომადობის რეჟიმის გამართვა
- მისამართის არჩევა
+ მისამართის მითითება
რჩეულის არჩევა
OSM ცვლილებები
სხვა საქმიანობები
@@ -994,20 +996,20 @@
რუკა
მოტოციკლების გზების არჩევა
არჩევნის გაკეთება…
- მოტოციკლების გზებისათვის უპირატესობის მინიჭება
+ მოტოციკლების გზებისათვის უპირატესობის მინიჭება.
არა
OpenMaps EU
- კონტურული ხაზების მონაცემები
- მოთხოვნისას არჩევა
- ფოტოებისათვის სისტემური აპლიკაციის გამოყენება
+ კონტურული ხაზები
+ მოთხოვნისას\?
+ ფოტოებისათვის სისტემური აპლიკაციის გამოყენება.
კამერის აპლიკაციის გამოყენება
OsmAnd რუკები & ნავიგაცია
OsmAnd+ რუკები & ნავიგაცია
- შემომწირეთ აპლიკაციაში ახალი მახასიათებლების სანახავად
- ჩამოტვირთვა
+ შემომწირეთ აპლიკაციაში ახალი მახასიათებლების სანახავად.
+ ჩამოტვირთვა…
OSM პაროლი(არასავალდებულო)
კამერის ფოკუსის ტიპი
- აირჩიეთ შიდა კამერის ფოკუსის ტიპი
+ კამერის ფოკუსი:
ავტოფოკუსი
ზემაღალი ფოკუსი
ველის გაფართოებული სიღრმავე (EDOF)
@@ -1015,7 +1017,7 @@
მაკრო (მიახლოებული) ფოკუსის რეჟიმი
კამერა განაგრძობს ფოკუსის დაჭერას
ფოტოს გადაღებისას ხმის გამოცემა
- აირჩიეთ ფოტოების გადაღებისას ხმის გამოსაცემად
+ აირჩიეთ ფოტოების გადაღებისას ხმის გამოსაცემად.
საშიშროება
განახლებები ნაპოვნი არაა
ცოცხალი განახლებები
@@ -1038,7 +1040,7 @@
გამჭირვალე ლურჯი
მუქი წითელი
გამჭირვალე მუქლი წითელი
- ცვლილებების ძალაში მთლიანად შესასვლელად საჭიროა ხელით გადატვირთოთ აპლიკაცია.
+ ცვლილებების ძალაში მთლიანად შესასვლელად აპლიკაციის გადატვირთვა.
ღია
მუქი
პიემონტური
@@ -1081,12 +1083,12 @@
დაბალი ხარისხი
მაღალი ხარისხი
ვიდეოს ჩვენების ხარისხი
- აირჩიეთ ვიდეოს ჩვენების ხარისხი
+ აირჩიეთ ვიდეოს ხარისხი.
აუდიო ფორმატი
- აირჩიეთ ხმის ფორმატი
+ აირჩიეთ ხმის ფორმატი.
ხმის ბიტრეიტი
- აირჩიეთ ხმის ბიტრეიტი
- გთხოვთ აირჩიოთ სწორი POI-ს ტიპი ან გამოტოვოთ
+ აირჩიეთ ხმის ბიტრეიტი.
+ გთხოვთ, აირჩიოთ სწორი POI-ს ტიპი ან გამოტოვოთ.
მენიუს ღილაკი უშვებს სამართავ პანელს და არა მენიუს
წვდომა რუკიდან
გაშვებისას ჩვენება
@@ -1099,19 +1101,19 @@
მარკერის შესაცვლელად გაამოძრავეთ რუკა
მიმართულებების აუდიოკარნახი
- OSM ცოცხალი ნავიგაცია
+ OsmAnd ცოცხალი ნავიგაცია
დანიშნულება მითითებული არაა
- ველები
- მეტი ველები
- სიჩქარე
+ ნაკლებად გორიანი
+ ბრტყელი
+ უფრო მოკლე გზები
ბალანსი
- უსაფრთხოება
- პრიორიტეტის ველების ან ბორცვებისთვის მინიჭება
+ მირჩევნია შემოვლითი გზები
+ პრიორიტეტის ველების ან ბორცვებისთვის მინიჭება.
დაქანება
ახალი დასტის დამატება
- წერტილები წარმატებით წაიშალა.
+ წერტილები წაშლილია.
დარწმუნებული ბრძანდებით, რომ აპირებთ წაშალოთ %1$d წერტილ(ებ)ი?
- ამ გზის მნიშვნელოვანი წერტილები
+ გზის მნიშვნელოვანი წერტილები
მიდევნება
მაქს. სიჩქარე
საშუალო სიჩქარე
@@ -1120,7 +1122,7 @@
საწყისი დრო
დამთავრების დრო
ფერი
- აირჩეთ მიდევნების დასტა
+ აირჩეთ GPX ფაილების დასტა
ფაილის გადაადგილება შეუძლებელია.
გადატანა
ბილიკები
@@ -1132,14 +1134,14 @@
საშუალო სიმაღლე
დრო
ჯამური მანძილი
- რელიეფის სირბილის ფაქტორი
+ აირჩიეთ გზის სიმაღლის რყევა
სიმაღლის მონაცემების გამოყენება
- სიღრმის წერტილებისა და კონტურების ჩვენება
+ სიღრმის წერტილებისა და კონტურების ჩვენება.
სიღრმის კონტურები
დაშორება შესწორებულია
ჩადგმა
ფოტოების დამატება
- მოცემული ლოკაციისთვის ფოტოები არ არსებობს
+ ფოტოები ნაპოვნი ვერ იქნა.
თავიდან ძებნა
ძებნის რადიუსის გაზრდა
ვერაფერი ვიპოვეთ :(
@@ -1155,18 +1157,18 @@
ჩაწერეთ საფოსტო კოდი
უახლოესი ქალაქები
აირჩიეთ ქალაქი
- აირჩიეთ საფოსტო კოდი
- დანიშნულების წერტილის დამატება
+ საფოსტო კოდის ძებნა
+ დანიშნულების წერტილი
დანიშნულების წერტილის შეცვლა
შეცდომა
რუკის ფონტები
პარკირების ადგილი
გაყვანის დრო
დროის შეზღუდვის გარეშე
- "მთლიანი სტატიის წაკითხვა"
+ მთლიანი სტატიის წაკითხვა
სტატიის წაკითხვა
დამატებითი მოქმედებები
- ძებნის შინაარსის შეცვლა.
+ ძებნის შეცვლა.
მოქმედებები
სანიშნი
წაშლილია
@@ -1174,22 +1176,22 @@
დამატებულია
მოქმედების სახელი
ფასი
- თვიური გადასახადი
+ თვიურად
ყოველ 3 თვეში გადახდა
წელიწადში ერთხელ გადახდა
%1$s თვეში
%1$.2f %2$s თვეში
დაზოგეთ %1$s
- თქვენი მიმდინარე გამოწერა
+ მიმდინარე გამოწერა
თვიური განახლება
წლიური განახლება
%1$.2f %2$s
- აირჩიეთ გადახდის თქვენთვის ხელსაყრელი პერიოდი:
+ გადახდის ინტერვალი:
გადასახადის ნაწილი მიედინება OpenStreetMap-ის ავტორებთან.
რუკის სანიშნის ჩასწორება
სხვა აპლიკაცია
ქუჩის ძებნა
- ქალაქის არჩევა
+ გთხოვთ აირჩიოთ დასახლებული პუნქტი
აღდგენა
გზის ატვირთვა…
ძებნის რადიუსის გაზრდა %1$s-მდე
@@ -1237,4 +1239,563 @@
წთ
სასრიალო ტურიზმი
სნოუმობილი
+ სურათის დამატება
+ ახალი ანგარიშის შექმნა
+ სურათის არჩევა
+ რესურსები
+ ფაილის დაახლოებითი ზომაა
+ სეგმენტის დამატება
+ OsmAnd-ის პროფილი
+ პროფილი
+ საჭიროა იმპორტისთვის
+ აირჩიეთ საიმპორტო პუნქტები.
+ Mapillary-ში დამატება
+ OpenPlaceReviews-ში დამატება
+
+ თვალთვალი
+ გზის ჩაწერა
+ ჯგუფის ჩასწორება
+ GPS-ის სტატუსი
+ ქუჩის განათება
+ პროქსის პორტი
+ პროქსის მისამართი
+ ფეხით მოსიარულეთა გზაჯვარედინები
+ ფეხით მოსიარულეთა გადასასვლელი
+ ფეხით მოსიარულეთა გადასასვლელები
+ რკინიგზასთან კვეთები
+ რკინიგზის კვეთა
+ გზის სტილი
+ ტრანსპორტის გაჩერებები
+ რუკის ენა
+ ჩამოწერები
+ ძებნა
+ თავიდან ავიცილოთ გზები…
+ ავტობუსის გზები
+ ტროლეიბუსის გზები
+ ტრამვაის გზები
+ სარკინიგზო გზები
+ რუკის გამართვა
+ მარცხენა პანელი
+ მარჯვენა პანელი
+ დარჩენილი ელემენტები
+ ანონიმური მომხმარებელი
+ გზის დაბეჭდვა
+ ტექსტის ზომა
+ სიჩქარის კამერა
+ შეჩერების ნიშანი
+ მაღალი კაბინა
+ სასაზღვრო კონტროლი
+ სიჩქარის ლიმიტი
+ ყოველთვის მკითხე
+ შეტყობინებები საცობის შესახებ
+ უახლოესი POI
+ უახლოესი რჩეული ადგილები
+ ფეხით
+ რუკის დათვალიერება
+ ნავიგაციის შეჩერება
+ ნავიგაციის გაგრძელება
+ სერბული (კირილიცა)
+ წვდომის შეზღუდვები
+ ნაკლები დეტალი
+ მეტი დეტალი
+ დანიშნულების წერტილების მითითება
+ %1$s
+\nწერტილი
+ %1$s -ე წერტილი
+ %1$s წერტილი
+ დაღმართი/აღმართი: %1$s
+ მიმდინარე დრო
+ იტვირთება %1$s…
+ ფერი
+ ჩამოსვლის გამოცხადება
+ მუსიკის პაუზა
+ ბრაზილიური პორტუგალიური
+ ნორვეგიული ბოქმალი
+ ინფორმაცია გზის შესახებ
+ გზის პარამეტრები
+ დანიშნულების წერტილის დაყენება
+ აირჩიეთ GPX…
+ წონის ლიმიტი
+ ავტოსტრადებისთვის თავის არიდება
+ ავტოსტრადების გარეშე
+ ბორნების თავიდან აცილება
+ ბორნების გარეშე
+ ავტოსტრადებისთვის უპირატესობების მინიჭება
+ ავტოსტრადებისთვის უპირატესობების მინიჭება
+ წარმოთქმის სიჩქარე
+ გზების პარამეტრები
+ ნავიგაციის პარამეტრები
+ კაიაკი
+ მოტორიანი ნავი
+ გაზიარებული
+ რუკები
+ ფილები
+ გამოთვლა
+ კავშირი
+ საჰაერო
+ განუსაზღვრელი
+ ექსტრემალური
+ დაგორება
+ ექსპერტი
+ რთული
+ საშუალო
+ ადვილი
+ ახალბედა
+ სკანდინავიელი
+ დაღმართი
+ კავშირი
+ ლაშქრობა
+ სლედი
+ მარხილი
+ დასტა…
+ სხვა
+ ანალიტიკა
+ მაგალითი
+ უფასო
+ წელი
+ წელი
+ წელი
+ თვე
+ თვე
+ თვე
+ კვირა
+ კვირა
+ კვირა
+ დღე
+ დღე
+ დღე
+ ვაგონი
+ ოქსიტური
+ ნაგულისხმევი
+ დამსვენებელი
+ რბილი
+ ციცაბო
+ სიგლუვე
+ ზედაპირი
+ Parrot
+ WunderLINQ
+ კლავიატურა
+ არცერთი
+ სკუტერი
+ ცალბორბალა
+ ამო
+ კრიტიკული შეცდომა
+ ხატულა
+ ფუქსინი
+ თხილამური
+ სლედი
+ გეოკოდირება
+ სრიალი
+ სრიალი
+ სრიალი
+ ვერტმფრენი
+ ცხენი
+ მიწისქვეშა გადასასვლელი
+ ტაქსი
+ დაშვება
+ ტარიფი
+ მილირადიანი
+ სიარული
+ გაურკვეველი
+ ველობილიკი
+ ბილიკი
+ ნაბიჯი
+ საჯირითო გზა
+ საცალფეხო ქუჩა
+ მომსახურება
+ ქუჩა
+ გზა
+ საავტომობილო გზა
+ შეუძლებელი
+ საშინელი
+ ცუდი
+ საშუალო
+ კარგი
+ შესანიშნავი
+ შეფუთული
+ ხრეში
+ ხე
+ ლითონი
+ ქვა
+ კენჭები
+ რიყის ქვა
+ კოჭი
+ ცემენტი
+ მოკირწყლული
+ ასფალტი
+ თოვლი
+ მარილი
+ ყინული
+ ტალახი
+ მიწა
+ ნიადაგი
+ ბალახი
+ ქვიშა
+ მოუკირწყლავი
+ სათითაოდ
+ გაცვლა
+ სამუშაო
+ სიმაღლე
+ სიგანე
+ ტევადობა
+ ტ
+ მ³
+ გადარიცხვები
+ გუარანი
+ გაშვება
+ გამოწერები
+ შავი
+ გზის წერტილი
+ გზის წერტილი
+ წერტილი
+ ხედი
+ არ
+ Wikivoyage
+ შიგთავსი
+ წაკითხვა
+ გამოკვლევა
+ შედეგი
+ ჯამში
+ ჩრდ.
+ სამხ.
+ დას.
+ აღმ.
+ DD°MM.MMM′
+ DD°MM.MMMM′
+ DD.DDDDD°
+ DD.DDDDDD°
+ DD°MM′SS″
+ მიმდინარე
+ გვირაბები
+ საზღვაო
+ გამორთვა
+ ლაოსური
+ მეტი
+ ერთი
+ ორი
+ ჩასმა
+ მარცხნივ
+ მარჯვნივ
+ უკან
+ გზა
+ სანიშნები
+ დალაგება
+ დასრულება
+ დამატებულია
+ ა-ჰ
+ ჰ-ა
+ გუშინ
+ დღეს
+ ჯგუფები
+ ხაზი
+ თავიდან
+ მინ/მაქს
+ მაქს/მინ
+ აღმავალი/დაღმავალი
+ საშუალო
+ მომხმარებელი
+ თარიღი
+ -დან
+ -მდე
+ უფლებები
+ ავტომატური
+ ბორცვიანი
+ ბერბერული
+ შეტყობინება
+ ნავიგაცია
+ ადგილი
+ დაბალი
+ საშუალო
+ მაღალი
+ წყალი
+ კარგი
+ ჩაწერა
+ ჩანაწერი
+ მოგზაურობა
+ პაუზა
+ გაგრძელება
+ ქვეკატეგორიები
+ dev.openstreetmap.org-ის გამოყენება
+ %1$s * %2$s
+ მსუბუქი თვითმფრინავი
+ ნაწილების შეერთება
+ გაყოფა მანამდე
+ გაყოფა შემდეგ
+ ბოლოს გამოყენებული
+ ფილტრები
+ ქაბული
+ ავსტრალია
+ მილები/მეტრები
+ შეცვლა
+ კატეგორიები
+ საფოსტო კოდი
+ სამეზობლო
+ ოლქი
+ -დან
+ ძებნა
+ მატარებელი
+ ავტობუსი
+ ასტურული
+ კანნადური
+ დალაგება
+ გაშლა
+ სქელი
+ საშუალო
+ თხელი
+ რეპორტი
+ არააქტიური
+ აქტიური
+ გამოწერა
+ შემოწირულობები
+ სტატუსი
+ ღამე
+ წაშლა
+ არჩევა
+ ტიპი
+ დილა
+ ყოველკვირეულად
+ დღიურად
+ საათობრივ
+ ხმა
+ დრო:
+ მანძილი:
+ ყავისფერი
+ ვარდისფერი
+ თავიდან გახნა
+ აღსრულება
+ მდებარეობა
+ ფრისკული
+ მაკედონიური
+ განახლება
+ ატვირთვა
+ უკუკავშირი
+ კონტაქტი
+ ვერსიები
+ კითხვაპასუხი
+ სხვა
+ მახასიათებლები
+ გაგზავნა
+ geo:
+ ჩამოწერები
+ რეგიონები
+ გვიან
+ შეძენა
+ მ/წმ
+ წთ/კმ
+ წთ/მილი
+ კნ
+ ნმ
+ სხვა
+ ნავიგაცია
+ გზები
+ Wikipedia
+ წაშლა
+ რჩეულები
+ დამატებით
+ ძირითადი
+ მდებარეობები
+ შემდეგი
+ OsmAnd
+ გამოტოვება
+ გაუქმება
+ Wikipedia
+ Wikipedia
+ გამორთულია
+ ასლი
+ ნაგულისხმევი
+ ყველა
+ ჩასწორება
+ მართვა
+ ადგილები
+ ძებნა
+ მისამართი
+ შეტყობინება
+ კეთილი იყოს თქვენი მობრძანება
+ წინ
+ დარჩა
+ წთ
+ სთ
+ ჩამოშლა
+ ფოტო
+ ვიდეო
+ აუდიო
+ რჩეულები
+ რჩეული
+ ჩვენება
+ მეტი…
+ ექსპორტი
+ გაზიარება
+ არჩევის მოხსნა
+ არასდროს
+ არჩულია
+ არჩეული
+ გამორთული
+ ჩართული
+ გამორთვა
+ ჩართვა
+ მოშორება
+ გამოშვებულია
+ ყურება
+ პირადი მონაცემები
+ ნაგულისხმევი
+ მართვა
+ აღმოსავლეთისკენ
+ არაფერი
+ ზონა
+ განახლებები
+ კოორდინატები
+ სახლი
+ დამალვა
+ გზები
+ ტრანსპორტი
+ დეტალები
+ მანძილი
+ ხანგრძლივობა
+ h
+ ტური
+ ველოსიპედი
+ მანქანა
+ გვიანი
+ ნორმალური
+ ადრეული
+ სარდინიული
+ არაბული
+ ალბანური
+ გაჩერება
+ სპარსული
+ სამუშაო დაფა
+ გადაგზავნა
+ ებრაული
+ სუაჰილური
+ ტექსტი
+ შენობები
+ ნაწილი
+ დაკავშირება
+ დღე
+ ლოკალიზაცია
+ სხვა
+ ხმა
+ ხორვატული
+ ჩინური
+ უელსური
+ უკრაინული
+ თურქული
+ შვედური
+ ესპანური
+ სლოვენიური
+ სლოვაკური
+ რუსული
+ რუმინული
+ კორეული
+ იაპონური
+ იტალიური
+ ინდონეზიური
+ უნგრული
+ ინდური
+ ებრაული
+ ბერძნული
+ გერმანული
+ ქართული
+ ფრანგული
+ ფინური
+ ჰოლანდიური
+ დანიური
+ ჩეხური
+ კატალანური
+ ბულგარული
+ ბოსნიური
+ ბელორუსული
+ ბასკური
+ სომხური
+ აფრიკაანსი
+ ინგლისური
+ ჩაწერა
+ დანიშნულების წერტილი
+ პორტუგალიური
+ პოლონური
+ მარათი
+ ლიეტუვური
+ ლატვიური
+ წაშლა
+ ტონა
+ მეტრი
+ ღამის რუკა
+ ონლაინ წყაროს დამატება
+ ჭურჭლის სიმაღლის მითითება
+ სიგრძის ლიმიტი
+ %1$s წაშლილია
+ არჩეული სირთულე
+ %1$s - %2$s
+ კომფორტი
+ სპეციალური
+ ტრანსპორტი
+ სერვისი
+ სპორტი
+ ავარია
+ მოგზაურობა
+ ანგარიში
+ შესვლა
+ ბორცვები
+ სატვირთო
+ MGRS
+ MGRS
+ სიმბოლოები
+ შუალედი
+ გრაფიკი
+ განვითარება
+ თავიდან
+ ფაილის სახელი
+ დასრულებულია
+ ხელნაკეთი
+ მყარი
+ გორგოლაჭებიანი სავარძელი
+ იურიდიული ინფორმაცია
+ ყოველთვის
+ გაგრძელება
+ რჩეული
+ კანტონური
+ იორუბული
+ ვარაული
+ უზბეკური
+ ურდუ
+ თათრული
+ ტაჯიკური
+ შოტლანდიური
+ სიცილიური
+ პუნჯაბური
+ ნეპალური
+ ნეაპოლური
+ ბირმული
+ მონღოლური
+ მინანგკაბაური
+ მალაიზიური
+ ყირგიზული
+ ყაზახური
+ იავური
+ გუჯარათული
+ ჩუვაშური
+ ჩეჩნური
+ ბავარიული
+ ბაშკირული
+ არაგონიული
+ ლომბარდი
+ გამყოფი
+ დამალული
+ ენები
+ ენა
+ აღწერა
+ ბორცვი
+ გარეგნობა
+ ანტარქტიკა
+ მიმართულებები
+ დანიშნულების წერტილამდე
+ %1$s/%2$s
+ ხელმისაწვდომია
+ გაფრთხილება
+ OSM
+ გამოცხადება
+ სქელი
+ პირადი
+ შემობრუნება
+ თეთრი
\ No newline at end of file
diff --git a/OsmAnd/res/values-pt-rBR/phrases.xml b/OsmAnd/res/values-pt-rBR/phrases.xml
index 53d09cabf8..d2656c04e1 100644
--- a/OsmAnd/res/values-pt-rBR/phrases.xml
+++ b/OsmAnd/res/values-pt-rBR/phrases.xml
@@ -3899,4 +3899,7 @@
Estação de transferência de resíduos
Lavandaria pública
Área de natação
+ Túnel para morcego
+ Ponte para morcego
+ Travessia de vida selvagem
\ No newline at end of file
diff --git a/OsmAnd/res/values-sc/phrases.xml b/OsmAnd/res/values-sc/phrases.xml
index 939dd49e0c..7891e73884 100644
--- a/OsmAnd/res/values-sc/phrases.xml
+++ b/OsmAnd/res/values-sc/phrases.xml
@@ -306,7 +306,7 @@
Funiculare
Base militare navale
Caserma
- Istatzione de carrigamentu
+ Istatzione de carrigamentu;Istatzione de carrigamentu de veìculos elètricos;Istatzione de càrriga elètrica;Puntu de càrriga;Istatzione de càrriga elètrica;Trastes pro s\'alimentatzione de veìculos elètricos
Rampa pro veìculos
Àera cumpressa
Nolu bitziclètas
@@ -3894,4 +3894,8 @@
Istatzione de sos rangers
Sabunadòrgiu
Istatzione de tramudòngiu de s\'arga
+ Gallerias pro tzintzimurreddos
+ Pontes pro tzintzimurreddos
+ Logu de atraessamentu de sa fàuna areste
+ Logu pro nadare
\ No newline at end of file
diff --git a/OsmAnd/res/values-sv/strings.xml b/OsmAnd/res/values-sv/strings.xml
index fa8bc69b01..4a7805d1bc 100644
--- a/OsmAnd/res/values-sv/strings.xml
+++ b/OsmAnd/res/values-sv/strings.xml
@@ -294,7 +294,7 @@ Du hittar din parkeringsplats och -tid på instrumentbrädan och i widgeten på
Globala app-inställningar
Ditt OSM-användarnamn
Behövs för ändringar i openstreetmap.org.
- Ditt OSM-lösenord
+ Lösenord
Bakgrundsläge
OsmAnd körs i bakgrunden medan skärmen är avstängd.
Det finns inte tillräckligt med ledigt utrymme för att hämta %1$s MB (ledigt: %2$s).
@@ -805,7 +805,7 @@ Nyttjat utrymme är {1} MB.
Ett fel uppstod vid ruttberäkningen
Fel: Den beräknade rutten är tom
Ny rutt beräknad, avstånd
- Koordinaterna är ogiltiga!
+ Ogiltiga koordinater
Tillbaka till OsmAnd-kartan
Den senaste körningen av OsmAnd kraschade. Loggen finns i {0}. Rapportera felet och bifoga gärna loggfilen.
Sparar GPX-spår till SD-kortet …
@@ -857,8 +857,8 @@ Nyttjat utrymme är {1} MB.
Latitud
Longitud
DDD.DD
- DDD MM.MM
- DDD MM SS.SS
+ DDD MM.MMM
+ DDD MM SS.S
Vägvisning
Aktivera exakt ruttning för beräkning utan småfel. Mycket begränsad av avståndet samt långsam.
Lat %1$.3f, long %2$.3f
@@ -902,7 +902,7 @@ Nyttjat utrymme är {1} MB.
Gatunamn
Husnummer
Konfigurera inspelningen av dina resor.
- Trippinspelning
+ Inspelning av resa
Minskar kompassmissvisningen men blir trögare.
Använd Kalman-filter
App-tema
@@ -1153,8 +1153,7 @@ Nyttjat utrymme är {1} MB.
Sortera efter namn
Ankomstmeddelande
Hur tidigt vill du höra ankomstmeddelandet?
-
- Online OSM-kartklassificering med bilder.
+ Online OSM-kartklassificering med bilder.
Spara data som GPX-fil eller importera waypoints till \"Favoriter\"?
Favoriter utdelade via OsmAnd
Skickar nod…
@@ -1225,7 +1224,7 @@ Nyttjat utrymme är {1} MB.
"Denna modul aktiverar funktionen att antingen spela in och spara dina spår genom att du trycker på widgeten GPX-loggning på kartskärmen eller att alla dina rutter sparas automatiskt i en GPX-fil.
\n
\nInspelade spår kan delas ut till vänner eller användas som bidrag till OSM. Idrottsmän kan använda inspelade spår för att följa sin träning. Viss grundläggande spåranalys kan göras direkt i OsmAnd, såsom varvtider, genomsnittshastighet o.s.v. och spår kan givetvis också analyseras i efterhand i speciella analysverktyg från tredje part. "
- Inspelning av resor
+ Inspelning av resa
h
Längd
Sträcka
@@ -1402,7 +1401,7 @@ Nyttjat utrymme är {1} MB.
Kom ihåg mitt val
Uppdatera
Hämta
- Laddar ner
+ Laddar ner…
Hämtningen lyckades
Ett oväntat fel uppstod
Åtgärd {0}
@@ -1486,7 +1485,7 @@ Long %2$s
Undvik att korsa nationella gränser
Höjdgräns
Smart omräkning av rutt
- Räkna om endast början av rutten för långa resor.
+ Räkna om endast början av färdvägen, användbart för längre resor.
Ange tillåten fordonshöjd på rutter.
Logga ut
Inaktiverad
@@ -1616,7 +1615,7 @@ Long %2$s
Minuter per kilometer
Minuter per engelsk mil
Sjömil i timmen (knop)
- Trippinspelning
+ Inspelning av resa
Navigering
Körs i bakgrunden
Lägg till ny
@@ -1835,7 +1834,8 @@ Tillgängligt utrymme är blott {2} MB.
Inaktiv
Ange en giltig e-postadress
Ange publikt namn
- Tack för att du prenumererar på live-uppdateringar!
+ Tack för att du stödjer OsmAnd!
+\nFör att aktivera alla nya funktioner behöver du starta om OsmAnd.
Delar av din donation kommer att skickas till OSM-användare som skickar in kartändringar i det området.
Prenumerationsinställningar
Köp en OsmAnd Live-prenumeration först
@@ -2055,7 +2055,7 @@ Om du tycker om OsmAnd och OSM och vill stödja dem så är detta ett utmärkt s
Fin
Öppna platskod
Ogiltig OLC
-
+\n
Kort OLC
Vänligen tillhandahåll fullständig kod
Filen kan inte flyttas.
@@ -2439,7 +2439,18 @@ Vänligen tillhandahåll fullständig kod
Min/Max
Denna väg kan vara för lång tid att beräkna. Lägg till mellanliggande destinationer om inget resultat finns inom 10 minuter.
"OsmAnd (OSM Automated Navigation Directions) är en kartnavigationsapp med tillgång till gratis, världsomfattande OpenStreetMap (OSM)-data av hög kvalitet. Njut av röstnavigation eller visuell navigation, visning av POI (points of interest - nyttoplatser), att skapa och hantera GPX-spår, visa höjdkurvor och höjdinfo (via plugin), val mellan bil-, cykel-, fotgängar-lägen, OSM-redigering och mycket mer."
- GPS-navigering • Du kan välja mellan offline (inga roaming-avgifter när du är utomlands) eller på online(snabbare)-läge • Turn-by-Turn röstguidning leder dig längs vägen (inspelade och genererade röster) • Rutten uppdateras om du avviker från den. • Filval och beräknad ankomsttid hjälper dig längs vägen • För att göra din resa säkrare, dag/natt-läge växlar automatiskt • Du kan välja att visa hastighetsbegränsningar och få påminnelser om du överskrider den • Kartzoomen anpassar sig till din hastighet. • Du kan söka destinationer efter adress eller efter typ (t.ex.: parkering, restaurang, hotell, bensinstation, museum), eller av geografiska koordinater • Stödjer mellanliggande punkter på din rutt • Du kan spela in dina egna eller ladda upp en GPX-spår och följa dem
+ GPS-navigering
+\n• Välj mellan offline- (inga roaming-avgifter när du är utomlands) eller online-läge a(snabbare)
+\n• Steg-för-steg röstguidning leder dig längs vägen (inspelade och genererade röster)
+\n• Färdvägen uppdateras närhellst du avviker från den.
+\n• Guidning vid val av filer, gatunamn och beräknad ankomsttid hjälper dig längs vägen
+\n• Dag-/natt-läge för appen växlas automatiskt för att göra din resa säkrare
+\n• Visa hastighetsbegränsningar och få påminnelser om du överskrider den
+\n• Kartzoomen anpassar sig till din hastighet
+\n• Sök destinationer genom adress, typ (t.ex.: parkering, restaurang, hotell, bensinstation, museum), eller geografiska koordinater
+\n• Stödjer användande av delmål på din resväg
+\n• Spela in dina egna, eller ladda upp en GPX-spår och följa dem
+\n
Karta
\n • Visar Poi (point of interests) runt omkring dig
\n • Justera kartan baserat på riktning (eller kompass)
@@ -2531,7 +2542,7 @@ Vänligen tillhandahåll fullständig kod
Gamla \"Mapnik\'-stil standardrendering. Viktiga funktioner: Färger som liknar \"Mapnik\" stil.
Högsdetaljsstil för turiständamål. Innehåller alla konfigurationsinställningar av standardstilen, dessutom: Visar så mycket detaljer som möjligt, i synnerhet alla vägar, stigar och andra sätt att resa. Tydliga visuella skillnader mellan olika vägtyper som påminner om många turistatlaser. Högkontrastfärger för utomhusbruk, dag- och nattläge.
Stil för allmänna ändamål. Förenklad återgivning i tätbefolkade städer. Viktiga funktioner: höjdkurvor, rutter, ytkvalitet, tillträdeskontroll, farthinder, stigrendering enligt SAC-skala, vattensporter.
- Öppna Wikipedia-länk på nätet
+ Öppna Wikipedia-länk på internet
Länken kommer att öppnas i en webbläsare.
Skaffa OsmAnd Live-prenumeration för att läsa Wikipedia och Wikivoyage-artiklar frånkopplad.
Hur öppnar man länken?
@@ -2601,7 +2612,12 @@ Vänligen tillhandahåll fullständig kod
\n• Kompakta offline vektorkartor som uppdateras minst en gång i månaden
\n
\n• Val mellan data för hela regionen och bara vägnätet (Exempel: Hela Japan är 700 MB eller endast vägnätet för 200 MB)
- Säkerhetsfunktioner • Valfri växling mellan dag-/nattläge • Valfri visning av hastighet, med en påminnelse om du överskrider den • Valfri hastighetsbaserad zoomning • Dela din position så att dina vänner kan hitta dig
+ Säkerhetsfunktioner
+\n• Valfri växling mellan dag-/nattläge
+\n• Valfri visning av hastighet, med en påminnelse om du överskrider den
+\n• Valfri hastighetsbaserad zoomning
+\n• Dela din position så att dina vänner kan hitta dig
+\n
Funktioner för cykel och gående • Se vägar för gående och cyklande samt vandringsstigar, utmärkta för utomhusaktiviteter • Speciella ruttval och visningsläge för cykel och gående • Valfria kollektivtrafiksplatser (buss, spårvagn, tåg) inklusive linjenamn • Valfri reseinspelning till lokal GPX-fil eller onlinetjänst • Valfri visning av hastighet och höjd • Visa konturlinjer och höjdreliefer (via separat plugin)
Bidra direkt till OSM
\n• Rapportera databuggar
@@ -2974,4 +2990,112 @@ Vänligen tillhandahåll fullständig kod
Lägg till ett nytt segment
OsmAnd profil
Användarprofil
+ Rensa %1$s\?
+ Nytt insticksprogram tillagd
+ Stäng av
+ Profiler tillaggda av insticksprogram
+ Tillagda profiler
+ Dessa kartor erfordras av insticksprogrammet.
+ Föreslagna kartor
+ Kontrollera vilka popups, dialoger och notifieringar som OsmAnd visar under användning.
+ Dialoger och notifieringar
+ Kartnedladdningsdialog
+ Slå ihop segment
+ Visa cykelrutter längs nodnätverk
+ Nodnätverk
+ Inkludera rubrik
+ Lägg till ny profil \'%1$s\'\?
+ Personlig
+ Laddar ned %s
+ För öknar och andra glesbefolkade områden. Mer detaljerad.
+ Tät
+ Importera eller spela in spårfiler
+ Pausa inspelning av resa
+ Återuppta inspelning av resa
+ Utveckling
+ OsmAnd Live data
+ OsmAnd Live data
+ Dirigering i två steg för bilnavigation.
+ Logga in med OAuth för att använda OsmEdit funktioner
+ Logga in via OAuth
+ Rensa OpenStreetMap OAuth igenkänningstecken
+ Utloggad
+ Filen är redan importerad i OsmAnd
+ Använd en 2-fas A* dirigeringsalgoritm
+ Graf
+ %1$s data tillgänglig enbart på vägar, räkna ut en färdväg genom att använda \"Färdväg mellan punkter\" för att se grafer.
+ Vänligen vänta.
+\nGrafen kommer bli tillgänglig efter att färdvägen omberäknats.
+ Lokala kartor
+ %1$s — %2$s
+ %1$s * %2$s
+ Kollektivtrafik
+ Tomrum
+ bekvämligheter
+ Speciell
+ Symboler
+ Resa
+ Lägg till minst 2 punkter
+ Idrott
+ Service
+ Nödsituation
+ Dessa inställningar för insticksmoduler är globala och appliceras för alla profiler
+ Logga in till OpenStreetMap
+ Logga in på OpenStreetMap.org
+ Logga in på OpenStreetMap
+ Användarnamn och lösenord
+ Konto
+ Markörhistorik
+ Inloggning
+ Hantera prenumeration
+ Klicka på knappen för att registrera en betalningsplan på Google Play för att åtruppta prenumerationen.
+ Prenumerationen på OsmAnd Live har
+ Prenumerationen på OsmAnd Live är pausad
+ Prenumerationen på OsmAnd Live är
+ Skicka GPX fil till OpenStreetMap
+ Ange taggar sepparerade med komma (,).
+ Välj bredd
+ Anpassad
+ Dirigeringspilar
+ Senast ändrad
+ Klar
+ Nästa segment
+ Navigationsprofil
+ Bilder på gatunivå
+ Är du säker på att du vill avfärda alla ändringar i den plannerade färdvägen\?
+ Inspelning av resa
+ Följ färdväg
+ välj en annan färdväg
+ Början på färdvägen
+ Närmaste punkt
+ Ta bort adress
+ Lägg till adress
+ Ange adress
+ Korta ner innan
+ Korta ner efter
+ Ändra typ av färdväg innan
+ Ändra typ av färdväg efter
+ Förenklad färdväg
+ Bara färdvägens linje kommer sparas, delmålen tas bort.
+ %s GPX filer valda
+ Filnamn
+ Spela in
+ Systemstandard
+ Alla efterföljande delar
+ Tidigare delar
+ Alla tidigare delar
+ Bara valda delar kommer bli omräknad med vald profil.
+ Alla kommande delar kommer bli omräknad med den valda profilen.
+ Alla tidigare delar kommer bli omräknade med den valda profilen.
+ Öppna sparad färdväg
+ är sparad
+ Upprepa
+ Vänligen lägg till minst två punkter.
+ Senast ändrad
+ Namn: A – Ö
+ Namn: Ö – A
+ Ikoner för start och mål
+ Betalningen för prenumerationen är i enlighet med vad som valts. Du kan avbryta den i AppGallery när som hellst.
+ Undvik resor till fots
+ Undvik resor till
\ No newline at end of file
diff --git a/OsmAnd/res/values-uk/phrases.xml b/OsmAnd/res/values-uk/phrases.xml
index 82e842588b..0d2506bab0 100644
--- a/OsmAnd/res/values-uk/phrases.xml
+++ b/OsmAnd/res/values-uk/phrases.xml
@@ -3887,4 +3887,7 @@
Громадська пральня
Станція перевезення відходів
Плавальний майданчик
+ Тунель кажанів
+ Міст кажанів
+ Переправа диких тварин
\ No newline at end of file
diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml
index a78818557b..71f91520b5 100644
--- a/OsmAnd/res/values/strings.xml
+++ b/OsmAnd/res/values/strings.xml
@@ -4010,6 +4010,7 @@
Prefer routes of this difficulty, although routing over harder or easier pistes is still possible if shorter.
Off-piste
\'Freeride\' and \'Off-piste\' are unofficial routes and passages. Typically ungroomed, unmaintained and not checked in the evening. Enter at your own risk.
+ Voice prompts times
diff --git a/OsmAnd/res/xml/voice_announces.xml b/OsmAnd/res/xml/voice_announces.xml
index df7d47b8c3..154574399c 100644
--- a/OsmAnd/res/xml/voice_announces.xml
+++ b/OsmAnd/res/xml/voice_announces.xml
@@ -91,6 +91,12 @@
android:layout="@layout/preference_with_descr"
android:title="@string/arrival_distance" />
+
+
diff --git a/OsmAnd/src/net/osmand/plus/OsmandPlugin.java b/OsmAnd/src/net/osmand/plus/OsmandPlugin.java
index 01203b6f72..af1570ecaa 100644
--- a/OsmAnd/src/net/osmand/plus/OsmandPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/OsmandPlugin.java
@@ -519,10 +519,6 @@ public abstract class OsmandPlugin {
}
}
- public boolean destinationReached() {
- return true;
- }
-
protected void registerLayerContextMenuActions(OsmandMapTileView mapView, ContextMenuAdapter adapter, MapActivity mapActivity) {
}
@@ -781,17 +777,6 @@ public abstract class OsmandPlugin {
}
}
- public static boolean onDestinationReached() {
- boolean b = true;
- for (OsmandPlugin plugin : getEnabledPlugins()) {
- if (!plugin.destinationReached()) {
- b = false;
- }
- }
- return b;
- }
-
-
public static void createLayers(OsmandMapTileView mapView, MapActivity activity) {
for (OsmandPlugin plugin : getEnabledPlugins()) {
plugin.registerLayers(activity);
diff --git a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java
index 7f20de3e60..90c1c7da97 100644
--- a/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java
+++ b/OsmAnd/src/net/osmand/plus/helpers/WaypointHelper.java
@@ -33,6 +33,7 @@ import net.osmand.plus.routing.AlarmInfo;
import net.osmand.plus.routing.AlarmInfo.AlarmInfoType;
import net.osmand.plus.routing.RouteCalculationResult;
import net.osmand.plus.routing.VoiceRouter;
+import net.osmand.plus.routing.data.AnnounceTimeDistances;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.util.MapUtils;
@@ -46,6 +47,11 @@ import java.util.concurrent.ConcurrentHashMap;
import gnu.trove.list.array.TIntArrayList;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_LONG_ALARM_ANNOUNCE;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_LONG_PNT_APPROACH;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_SHORT_ALARM_ANNOUNCE;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_SHORT_PNT_APPROACH;
+
// import android.widget.Toast;
/**
@@ -57,10 +63,6 @@ public class WaypointHelper {
private int searchDeviationRadius = 500;
private int poiSearchDeviationRadius = 100;
- private static final int LONG_ANNOUNCE_RADIUS = 700;
- private static final int SHORT_ANNOUNCE_RADIUS = 150;
- private static final int ALARMS_ANNOUNCE_RADIUS = 150;
- private static final int ALARMS_SHORT_ANNOUNCE_RADIUS = 100;
// don't annoy users by lots of announcements
private static final int APPROACH_POI_LIMIT = 1;
@@ -167,6 +169,7 @@ public class WaypointHelper {
list.clear();
}
LocationPointWrapper found = null;
+ AnnounceTimeDistances atd = getVoiceRouter().getAnnounceTimeDistances();
for (int type = 0; type < locationPoints.size(); type++) {
if (type == ALARMS || type == TARGETS) {
continue;
@@ -178,7 +181,8 @@ public class WaypointHelper {
if (lp.get(kIterator).routeIndex < route.getCurrentRoute()) {
// skip
} else {
- if (route.getDistanceToPoint(lwp.routeIndex) <= LONG_ANNOUNCE_RADIUS) {
+ if (atd.isTurnStateActive(0,
+ route.getDistanceToPoint(lwp.routeIndex), STATE_LONG_PNT_APPROACH)) {
if (found == null || found.routeIndex < lwp.routeIndex) {
found = lwp;
if (list != null) {
@@ -205,6 +209,7 @@ public class WaypointHelper {
AlarmInfo mostImportant = speedAlarm;
int value = speedAlarm != null ? speedAlarm.updateDistanceAndGetPriority(0, 0) : Integer.MAX_VALUE;
float speed = lastProjection != null && lastProjection.hasSpeed() ? lastProjection.getSpeed() : 0;
+ AnnounceTimeDistances atd = getVoiceRouter().getAnnounceTimeDistances();
if (ALARMS < pointsProgress.size()) {
int kIterator = pointsProgress.get(ALARMS);
List lp = locationPoints.get(ALARMS);
@@ -221,7 +226,7 @@ public class WaypointHelper {
inf.setFloatValue(route.getDistanceToPoint(inf.getLastLocationIndex()));
}
int d = route.getDistanceToPoint(inf.getLocationIndex());
- if (d > LONG_ANNOUNCE_RADIUS) {
+ if (!atd.isTurnStateActive(0, d, STATE_LONG_PNT_APPROACH)) {
break;
}
float time = speed > 0 ? d / speed : Integer.MAX_VALUE;
@@ -371,6 +376,8 @@ public class WaypointHelper {
pointsProgress.set(type, kIterator);
VoiceRouter voiceRouter = getVoiceRouter();
+ AnnounceTimeDistances atd = voiceRouter.getAnnounceTimeDistances();
+ float atdSpeed = atd.getSpeed(lastKnownLocation);
while (kIterator < lp.size()) {
LocationPointWrapper lwp = lp.get(kIterator);
if (type == ALARMS && lwp.routeIndex < currentRoute) {
@@ -378,7 +385,8 @@ public class WaypointHelper {
continue;
}
if (lwp.announce) {
- if (route.getDistanceToPoint(lwp.routeIndex) > LONG_ANNOUNCE_RADIUS * 2) {
+ if (!atd.isTurnStateActive(atdSpeed,
+ route.getDistanceToPoint(lwp.routeIndex) / 2, STATE_LONG_PNT_APPROACH)) {
break;
}
LocationPoint point = lwp.point;
@@ -386,33 +394,33 @@ public class WaypointHelper {
point.getLatitude(), point.getLongitude()) - lwp.getDeviationDistance());
Integer state = locationPointsStates.get(point);
if (state != null && state == ANNOUNCED_ONCE
- && voiceRouter.isDistanceLess(lastKnownLocation.getSpeed(), d1, SHORT_ANNOUNCE_RADIUS)) {
+ && atd.isTurnStateActive(atdSpeed, d1, STATE_SHORT_PNT_APPROACH)) {
locationPointsStates.put(point, ANNOUNCED_DONE);
announcePoints.add(lwp);
} else if (type != ALARMS && (state == null || state == NOT_ANNOUNCED)
- && voiceRouter.isDistanceLess(lastKnownLocation.getSpeed(), d1, LONG_ANNOUNCE_RADIUS)) {
+ && atd.isTurnStateActive(atdSpeed, d1, STATE_LONG_PNT_APPROACH)) {
locationPointsStates.put(point, ANNOUNCED_ONCE);
approachPoints.add(lwp);
} else if (type == ALARMS && (state == null || state == NOT_ANNOUNCED)) {
AlarmInfo alarm = (AlarmInfo) point;
AlarmInfoType t = alarm.getType();
int announceRadius;
- boolean filter = false;
+ boolean filterCloseAlarms = false;
switch (t) {
case TRAFFIC_CALMING:
- announceRadius = ALARMS_SHORT_ANNOUNCE_RADIUS;
- filter = true;
+ announceRadius = STATE_SHORT_ALARM_ANNOUNCE;
+ filterCloseAlarms = true;
break;
default:
- announceRadius = ALARMS_ANNOUNCE_RADIUS;
+ announceRadius = STATE_LONG_ALARM_ANNOUNCE;
break;
}
- boolean proceed = voiceRouter.isDistanceLess(lastKnownLocation.getSpeed(), d1, announceRadius);
- if (proceed && filter) {
+ boolean proceed = atd.isTurnStateActive(atdSpeed, d1, announceRadius);
+ if (proceed && filterCloseAlarms) {
AlarmInfo lastAlarm = lastAnnouncedAlarms.get(t);
if (lastAlarm != null) {
double dist = MapUtils.getDistance(lastAlarm.getLatitude(), lastAlarm.getLongitude(), alarm.getLatitude(), alarm.getLongitude());
- if (dist < ALARMS_SHORT_ANNOUNCE_RADIUS) {
+ if (atd.isTurnStateActive(atdSpeed, dist, STATE_SHORT_ALARM_ANNOUNCE)) {
locationPointsStates.put(point, ANNOUNCED_DONE);
proceed = false;
}
diff --git a/OsmAnd/src/net/osmand/plus/routing/CurrentStreetName.java b/OsmAnd/src/net/osmand/plus/routing/CurrentStreetName.java
index c21679ead3..9876bc9854 100644
--- a/OsmAnd/src/net/osmand/plus/routing/CurrentStreetName.java
+++ b/OsmAnd/src/net/osmand/plus/routing/CurrentStreetName.java
@@ -5,6 +5,7 @@ import androidx.annotation.NonNull;
import net.osmand.Location;
import net.osmand.binary.RouteDataObject;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
+import net.osmand.plus.routing.data.AnnounceTimeDistances;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.router.RouteSegmentResult;
import net.osmand.router.TurnType;
@@ -35,10 +36,11 @@ public class CurrentStreetName {
if (l != null && l.hasSpeed()) {
speed = l.getSpeed();
}
+ AnnounceTimeDistances adt = routingHelper.getVoiceRouter().getAnnounceTimeDistances();
boolean isSet = false;
// 1. turn is imminent
if (n.distanceTo > 0 && n.directionInfo != null && !n.directionInfo.getTurnType().isSkipToSpeak() &&
- routingHelper.getVoiceRouter().isDistanceLess(speed, n.distanceTo, routingHelper.getVoiceRouter().PREPARE_DISTANCE * 0.75f)) {
+ adt.isTurnStateActive(adt.getSpeed(l), n.distanceTo * 1.3, AnnounceTimeDistances.STATE_PREPARE_TURN)) {
String nm = n.directionInfo.getStreetName();
String rf = n.directionInfo.getRef();
String dn = n.directionInfo.getDestinationName();
diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
index 4b822fa64a..03af123cc8 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelper.java
@@ -17,6 +17,7 @@ import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.TargetPointsHelper;
import net.osmand.plus.TargetPointsHelper.TargetPoint;
+import net.osmand.plus.helpers.enums.MetricsConstants;
import net.osmand.plus.notifications.OsmandNotification.NotificationType;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
import net.osmand.plus.routing.RouteProvider.GPXRouteParamsBuilder;
@@ -29,7 +30,6 @@ import net.osmand.router.RouteExporter;
import net.osmand.router.RoutePlannerFrontEnd.GpxPoint;
import net.osmand.router.RoutePlannerFrontEnd.GpxRouteApproximation;
import net.osmand.router.RouteSegmentResult;
-import net.osmand.util.Algorithms;
import net.osmand.util.MapUtils;
import java.io.IOException;
@@ -43,12 +43,12 @@ public class RoutingHelper {
private static final org.apache.commons.logging.Log log = PlatformUtil.getLog(RoutingHelper.class);
- public static final float ALLOWED_DEVIATION = 2;
-
- // This should be correlated with RoutingHelper.updateCurrentRouteStatus ( when processed turn now is not announced)
- private static final int DEFAULT_GPS_TOLERANCE = 12;
- public static int GPS_TOLERANCE = DEFAULT_GPS_TOLERANCE;
- public static float ARRIVAL_DISTANCE_FACTOR = 1;
+ // POS_TOLERANCE
+ // 1) calculate current closest segment of the route during navigation
+ // 2) identify u-turn, projected distance
+ // 3) calculate max allowed deviation before route recalculation * multiplier
+ private static final float POS_TOLERANCE = 60; // 60m or 30m + accuracy
+ private static final float POS_TOLERANCE_DEVIATION_MULTIPLIER = 2;
private List> listeners = new LinkedList<>();
private List> updateListeners = new LinkedList<>();
@@ -299,8 +299,6 @@ public class RoutingHelper {
public void setAppMode(ApplicationMode mode) {
this.mode = mode;
- ARRIVAL_DISTANCE_FACTOR = Math.max(settings.ARRIVAL_DISTANCE_FACTOR.getModeValue(mode), 0.1f);
- GPS_TOLERANCE = (int) (DEFAULT_GPS_TOLERANCE * ARRIVAL_DISTANCE_FACTOR);
voiceRouter.updateAppMode();
}
@@ -413,7 +411,7 @@ public class RoutingHelper {
isDeviatedFromRoute = false;
return locationProjection;
}
- float posTolerance = RoutingHelperUtils.getPosTolerance(currentLocation.hasAccuracy() ? currentLocation.getAccuracy() : 0);
+ float posTolerance = getPosTolerance(currentLocation.hasAccuracy() ? currentLocation.getAccuracy() : 0);
boolean calculateRoute = false;
synchronized (this) {
isDeviatedFromRoute = false;
@@ -432,7 +430,7 @@ public class RoutingHelper {
int currentRoute = route.currentRoute;
double allowableDeviation = route.getRouteRecalcDistance();
if (allowableDeviation == 0) {
- allowableDeviation = RoutingHelperUtils.getDefaultAllowedDeviation(settings, route.getAppMode(), posTolerance);
+ allowableDeviation = RoutingHelper.getDefaultAllowedDeviation(settings, route.getAppMode(), posTolerance);
}
// 2. Analyze if we need to recalculate route
@@ -471,22 +469,12 @@ public class RoutingHelper {
voiceRouter.interruptRouteCommands();
voiceRouterStopped = true; // Prevents excessive execution of stop() code
}
- if (distOrth > mode.getOffRouteDistance() * ARRIVAL_DISTANCE_FACTOR && !settings.DISABLE_OFFROUTE_RECALC.get()) {
- voiceRouter.announceOffRoute(distOrth);
- }
+ voiceRouter.announceOffRoute(distOrth);
}
// calculate projection of current location
if (currentRoute > 0) {
- locationProjection = new Location(currentLocation);
- Location nextLocation = routeNodes.get(currentRoute);
- LatLon project = RoutingHelperUtils.getProject(currentLocation, routeNodes.get(currentRoute - 1), routeNodes.get(currentRoute));
-
- locationProjection.setLatitude(project.getLatitude());
- locationProjection.setLongitude(project.getLongitude());
- // we need to update bearing too
- float bearingTo = locationProjection.bearingTo(nextLocation);
- locationProjection.setBearing(bearingTo);
+ locationProjection = RoutingHelperUtils.getProject(currentLocation, routeNodes.get(currentRoute - 1), routeNodes.get(currentRoute));
}
}
lastFixedLocation = currentLocation;
@@ -532,8 +520,8 @@ public class RoutingHelper {
}
processed = true;
}
- } else if (newDist < dist || newDist < GPS_TOLERANCE / 2) {
- // newDist < GPS_TOLERANCE (avoid distance 0 till next turn)
+ } else if (newDist < dist || newDist < posTolerance / 8) {
+ // newDist < posTolerance / 8 - 4-8 m (avoid distance 0 till next turn)
if (dist > posTolerance) {
processed = true;
if (log.isDebugEnabled()) {
@@ -571,7 +559,7 @@ public class RoutingHelper {
// 2. check if intermediate found
if (route.getIntermediatePointsToPass() > 0
- && route.getDistanceToNextIntermediate(lastFixedLocation) < RoutingHelperUtils.getArrivalDistance(mode, settings) * 2f && !isRoutePlanningMode) {
+ && route.getDistanceToNextIntermediate(lastFixedLocation) < voiceRouter.getArrivalDistance() && !isRoutePlanningMode) {
showMessage(app.getString(R.string.arrived_at_intermediate_point));
route.passIntermediatePoint();
TargetPointsHelper targets = app.getTargetPointsHelper();
@@ -603,7 +591,7 @@ public class RoutingHelper {
// 3. check if destination found
Location lastPoint = routeNodes.get(routeNodes.size() - 1);
if (currentRoute > routeNodes.size() - 3
- && currentLocation.distanceTo(lastPoint) < RoutingHelperUtils.getArrivalDistance(mode, settings)
+ && currentLocation.distanceTo(lastPoint) < voiceRouter.getArrivalDistance()
&& !isRoutePlanningMode) {
//showMessage(app.getString(R.string.arrived_at_destination));
TargetPointsHelper targets = app.getTargetPointsHelper();
@@ -612,8 +600,7 @@ public class RoutingHelper {
if (isFollowingMode) {
voiceRouter.arrivedDestinationPoint(description);
}
- boolean onDestinationReached = OsmandPlugin.onDestinationReached();
- onDestinationReached &= app.getAppCustomization().onDestinationReached();
+ boolean onDestinationReached = true;
if (onDestinationReached) {
clearCurrentRoute(null, null);
setRoutePlanningMode(false);
@@ -672,6 +659,37 @@ public class RoutingHelper {
return false;
}
+
+ private static float getPosTolerance(float accuracy) {
+ if (accuracy > 0) {
+ return POS_TOLERANCE / 2 + accuracy;
+ }
+ return POS_TOLERANCE;
+ }
+
+ private static float getDefaultAllowedDeviation(OsmandSettings settings, ApplicationMode mode, float posTolerance) {
+ if (settings.DISABLE_OFFROUTE_RECALC.getModeValue(mode)) {
+ return -1.0f;
+ } else if (mode.getRouteService() == RouteProvider.RouteService.DIRECT_TO) {
+ return -1.0f;
+ } else if (mode.getRouteService() == RouteProvider.RouteService.STRAIGHT) {
+ MetricsConstants mc = settings.METRIC_SYSTEM.getModeValue(mode);
+ if (mc == MetricsConstants.KILOMETERS_AND_METERS || mc == MetricsConstants.MILES_AND_METERS) {
+ return 500.f;
+ } else {
+ // 1/4 mile
+ return 482.f;
+ }
+ }
+ return posTolerance * POS_TOLERANCE_DEVIATION_MULTIPLIER;
+ }
+
+ public static float getDefaultAllowedDeviation(OsmandSettings settings, ApplicationMode mode) {
+ return getDefaultAllowedDeviation(settings, mode, getPosTolerance(0));
+ }
+
+
+
private void fireRoutingDataUpdateEvent() {
if (!updateListeners.isEmpty()) {
ArrayList> tmp = new ArrayList<>(updateListeners);
diff --git a/OsmAnd/src/net/osmand/plus/routing/RoutingHelperUtils.java b/OsmAnd/src/net/osmand/plus/routing/RoutingHelperUtils.java
index c696c13585..b756238eca 100644
--- a/OsmAnd/src/net/osmand/plus/routing/RoutingHelperUtils.java
+++ b/OsmAnd/src/net/osmand/plus/routing/RoutingHelperUtils.java
@@ -17,7 +17,6 @@ import java.util.List;
public class RoutingHelperUtils {
- private static final float POSITION_TOLERANCE = 60;
private static final int CACHE_RADIUS = 100000;
@NonNull
@@ -66,10 +65,17 @@ public class RoutingHelperUtils {
return rect.left == 0 && rect.right == 0 ? null : rect;
}
- static LatLon getProject(Location loc, Location from, Location to) {
- return MapUtils.getProjection(loc.getLatitude(),
+ static Location getProject(Location loc, Location from, Location to) {
+ LatLon project = MapUtils.getProjection(loc.getLatitude(),
loc.getLongitude(), from.getLatitude(), from.getLongitude(),
to.getLatitude(), to.getLongitude());
+ Location locationProjection = new Location(loc);
+ locationProjection.setLatitude(project.getLatitude());
+ locationProjection.setLongitude(project.getLongitude());
+ // we need to update bearing too
+ float bearingTo = locationProjection.bearingTo(to);
+ locationProjection.setBearing(bearingTo);
+ return locationProjection;
}
static double getOrthogonalDistance(Location loc, Location from, Location to) {
@@ -94,30 +100,6 @@ public class RoutingHelperUtils {
return index;
}
- public static float getPosTolerance(float accuracy) {
- if (accuracy > 0) {
- return POSITION_TOLERANCE / 2 + accuracy;
- }
- return POSITION_TOLERANCE;
- }
-
- public static float getDefaultAllowedDeviation(OsmandSettings settings, ApplicationMode mode, float posTolerance) {
- if (settings.DISABLE_OFFROUTE_RECALC.getModeValue(mode)) {
- return -1.0f;
- } else if (mode.getRouteService() == RouteProvider.RouteService.DIRECT_TO) {
- return -1.0f;
- } else if (mode.getRouteService() == RouteProvider.RouteService.STRAIGHT) {
- MetricsConstants mc = settings.METRIC_SYSTEM.getModeValue(mode);
- if (mc == MetricsConstants.KILOMETERS_AND_METERS || mc == MetricsConstants.MILES_AND_METERS) {
- return 500.f;
- } else {
- // 1/4 mile
- return 482.f;
- }
- }
- return posTolerance * RoutingHelper.ALLOWED_DEVIATION;
- }
-
/**
* Wrong movement direction is considered when between
* current location bearing (determines by 2 last fixed position or provided)
@@ -181,16 +163,6 @@ public class RoutingHelperUtils {
return isOffRoute;
}
- static float getArrivalDistance(ApplicationMode mode, OsmandSettings settings) {
- ApplicationMode m = mode == null ? settings.getApplicationMode() : mode;
- float defaultSpeed = Math.max(0.3f, m.getDefaultSpeed());
-
- /// Used to be: car - 90 m, bicycle - 50 m, pedestrian - 20 m
- // return ((float)settings.getApplicationMode().getArrivalDistance()) * settings.ARRIVAL_DISTANCE_FACTOR.getModeValue(m);
- // GPS_TOLERANCE - 12 m
- // 5 seconds: car - 80 m @ 50 kmh, bicyle - 45 m @ 25 km/h, bicyle - 25 m @ 10 km/h, pedestrian - 18 m @ 4 km/h,
- return RoutingHelper.GPS_TOLERANCE + defaultSpeed * 5 * RoutingHelper.ARRIVAL_DISTANCE_FACTOR;
- }
public static void checkAndUpdateStartLocation(@NonNull OsmandApplication app, LatLon newStartLocation) {
if (newStartLocation != null) {
diff --git a/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java b/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java
index 86523b6a49..b9032e26e4 100644
--- a/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java
+++ b/OsmAnd/src/net/osmand/plus/routing/VoiceRouter.java
@@ -13,6 +13,7 @@ import net.osmand.plus.OsmandApplication;
import net.osmand.plus.helpers.WaypointHelper.LocationPointWrapper;
import net.osmand.plus.routing.AlarmInfo.AlarmInfoType;
import net.osmand.plus.routing.RouteCalculationResult.NextDirectionInfo;
+import net.osmand.plus.routing.data.AnnounceTimeDistances;
import net.osmand.plus.routing.data.StreetName;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmAndAppCustomization.OsmAndAppCustomizationListener;
@@ -35,6 +36,11 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_LONG_PREPARE_TURN;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_PREPARE_TURN;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_TURN_IN;
+import static net.osmand.plus.routing.data.AnnounceTimeDistances.STATE_TURN_NOW;
+
public class VoiceRouter {
private static final int STATUS_UTWP_TOLD = -1;
@@ -57,6 +63,8 @@ public class VoiceRouter {
protected final OsmandApplication app;
protected final RoutingHelper router;
protected OsmandSettings settings;
+ private ApplicationMode appMode;
+ private AnnounceTimeDistances atd;
private int currentStatus = STATUS_UNKNOWN;
private boolean playedAndArriveAtTarget = false;
@@ -69,19 +77,8 @@ public class VoiceRouter {
private boolean announceBackOnRoute = false;
// private long lastTimeRouteRecalcAnnounced = 0;
// Remember when last announcement was made
- private long lastAnnouncement = 0;
+ private long lastAnnouncement = 0;
- // Default speed to have comfortable announcements (Speed in m/s)
- private float DEFAULT_SPEED = 12;
- private float TURN_NOW_SPEED;
-
- private int PREPARE_LONG_DISTANCE;
- private int PREPARE_LONG_DISTANCE_END;
- protected int PREPARE_DISTANCE;
- private int PREPARE_DISTANCE_END;
- private int TURN_IN_DISTANCE;
- private int TURN_IN_DISTANCE_END;
- private int TURN_NOW_DISTANCE;
private SoundPool soundPool;
private int soundClick = -1;
@@ -89,6 +86,7 @@ public class VoiceRouter {
private VoiceCommandPending pendingCommand = null;
private RouteDirectionInfo nextRouteDirection;
+
public interface VoiceMessageListener {
void onVoiceMessage(List listCommands, List played);
}
@@ -179,103 +177,12 @@ public class VoiceRouter {
public void updateAppMode() {
- ApplicationMode appMode = router.getAppMode() == null ? settings.getApplicationMode() : router.getAppMode();
- if (appMode.isDerivedRoutingFrom(ApplicationMode.CAR)) {
- // could be changed in future as others by default in settings is 45 kmh
- DEFAULT_SPEED = 14; // ~50 km/h
- //DEFAULT speed is configurable
-// } else if (router.getAppMode().isDerivedRoutingFrom(ApplicationMode.BICYCLE)) {
-// DEFAULT_SPEED = 2.77f; // 10 km/h
-// } else if (router.getAppMode().isDerivedRoutingFrom(ApplicationMode.PEDESTRIAN)) {
-// DEFAULT_SPEED = 1.11f; //4 km/h 2f; // 7,2 km/h
- } else {
- // minimal is 1 meter for turn now
- DEFAULT_SPEED = (float) Math.max(0.3, appMode.getDefaultSpeed());
- }
-
-
- // Do not play [issue 1411]: prepare_long_distance warning not needed, used only for goAhead prompt
- // 300 sec: 4 200 - 3 500 m - car [ 115 - 95 sec @ 120 km/h]
- PREPARE_LONG_DISTANCE = (int) (DEFAULT_SPEED * 300);
- PREPARE_LONG_DISTANCE_END = (int) (DEFAULT_SPEED * 250) ;
-
- if (DEFAULT_SPEED < 30) {
-// if (PREPARE_LONG_DISTANCE_END - PREPARE_DISTANCE < 4000) {
- // Play only for high speed vehicle with speed > 110 km/h
- PREPARE_DISTANCE_END = PREPARE_DISTANCE * 2;
- }
-
- // *#8749: Here the change for bicycle: 40-30 sec, 200-150 m -> 115-90 sec, 320-250m [ need to be tested ]
- // 115 sec: 1 500 m - car [45 sec @ 120 km/h], 320 m - bicycle [45 sec @ 25 km/h], 230 m - pedestrian
- PREPARE_DISTANCE = (int) (DEFAULT_SPEED * 115);
- // 90 sec: 1 200 m - car, 250 m - bicycle [36 sec @ 25 km/h],
- PREPARE_DISTANCE_END = (int) (DEFAULT_SPEED * 90);
-
- // 22 sec: 310 m - car, 60 m - bicycle, 50m - pedestrian
- TURN_IN_DISTANCE = (int) (DEFAULT_SPEED * 22);
- // 15 sec: 210 m - car, 40 m - bicycle, 30 m - pedestrian
- TURN_IN_DISTANCE_END = (int) (DEFAULT_SPEED * 15);
-
- // same as speed < 150/(90-22) m/s = 2.2 m/s = 8 km/h
- if (PREPARE_DISTANCE_END - TURN_IN_DISTANCE < 150) {
- // Do not play: for pedestrian and slow transport
- PREPARE_DISTANCE_END = PREPARE_DISTANCE * 2;
- }
-
- // Turn now: 3.5 sec normal speed, 7 second for halfspeed (default)
- // float TURN_NOW_TIME = 7;
-
- // ** #8749 to keep 1m / 1 sec precision (GPS_TOLERANCE - 12 m)
- // 1 kmh - 1 m, 4 kmh - 4 m (pedestrian), 10 kmh - 10 m (bicycle), 50 kmh - 50 m (car)
- // TURN_NOW_DISTANCE = (int) (DEFAULT_SPEED * 3.6); // 3.6 sec
- // 50 kmh - 48 m (car), 10 kmh - 20 m, 4 kmh - 15 m, 1 kmh - 12 m
- TURN_NOW_DISTANCE = (int) (RoutingHelper.GPS_TOLERANCE + DEFAULT_SPEED * 2.5 * RoutingHelper.ARRIVAL_DISTANCE_FACTOR); // 3.6 sec
- // 1 kmh - 1 sec, 4 kmh - 2 sec (pedestrian), 10 kmh - 3 sec (*bicycle), 50 kmh - 7 sec (car)
- float TURN_NOW_TIME = (float) Math.min(Math.sqrt(DEFAULT_SPEED * 3.6), 8);
-
- TURN_NOW_SPEED = TURN_NOW_DISTANCE / TURN_NOW_TIME;
- }
-
- private double voicePromptDelayDistance = 0;
-
- public boolean isDistanceLess(float currentSpeed, double dist, double etalon) {
- return isDistanceLess(currentSpeed, dist, etalon, DEFAULT_SPEED);
- }
-
-
- private boolean isDistanceLess(float currentSpeed, double dist, double etalon, float defSpeed) {
- if (currentSpeed <= 0) {
- currentSpeed = DEFAULT_SPEED;
- }
- // Trigger close prompts earlier to allow BT SCO link being established, or when VOICE_PROMPT_DELAY is set >0 for the other stream types
- int ams = settings.AUDIO_MANAGER_STREAM.getModeValue(router.getAppMode());
- if ((ams == 0 && !AbstractPrologCommandPlayer.btScoStatus) || ams > 0) {
- if (settings.VOICE_PROMPT_DELAY[ams] != null) {
- voicePromptDelayDistance = currentSpeed * (double) settings.VOICE_PROMPT_DELAY[ams].get() / 1000;
- }
- }
-
- if (dist - voicePromptDelayDistance < etalon ||
- (dist - voicePromptDelayDistance) / currentSpeed < etalon / defSpeed) {
- return true;
- }
- return false;
+ appMode = router.getAppMode() == null ? settings.getApplicationMode() : router.getAppMode();
+ atd = new AnnounceTimeDistances(appMode, settings);
}
public int calculateImminent(float dist, Location loc) {
- float speed = DEFAULT_SPEED;
- if (loc != null && loc.hasSpeed()) {
- speed = loc.getSpeed();
- }
- if (isDistanceLess(speed, dist, TURN_NOW_DISTANCE)) {
- return 0;
- } else if (dist <= PREPARE_DISTANCE) {
- return 1;
- } else if (dist <= PREPARE_LONG_DISTANCE) {
- return 2;
- } else {
- return -1;
- }
+ return atd.getImminentTurnStatus(dist, loc);
}
private void nextStatusAfter(int previousStatus) {
@@ -290,22 +197,32 @@ public class VoiceRouter {
private boolean statusNotPassed(int statusToCheck) {
return currentStatus <= statusToCheck;
}
-
+
+ public AnnounceTimeDistances getAnnounceTimeDistances() {
+ return atd;
+ }
+
+ public float getArrivalDistance() {
+ return atd.getArrivalDistance();
+ }
+
public void announceOffRoute(double dist) {
- long ms = System.currentTimeMillis();
- if (waitAnnouncedOffRoute == 0 || ms - lastAnnouncedOffRoute > waitAnnouncedOffRoute) {
- CommandBuilder p = getNewCommandPlayerToPlay();
- if (p != null) {
- p.offRoute(dist);
- announceBackOnRoute = true;
+ if (dist > atd.getOffRouteDistance() && !settings.DISABLE_OFFROUTE_RECALC.get()) {
+ long ms = System.currentTimeMillis();
+ if (waitAnnouncedOffRoute == 0 || ms - lastAnnouncedOffRoute > waitAnnouncedOffRoute) {
+ CommandBuilder p = getNewCommandPlayerToPlay();
+ if (p != null) {
+ p.offRoute(dist);
+ announceBackOnRoute = true;
+ }
+ play(p);
+ if (waitAnnouncedOffRoute == 0) {
+ waitAnnouncedOffRoute = 60000;
+ } else {
+ waitAnnouncedOffRoute *= 2.5;
+ }
+ lastAnnouncedOffRoute = ms;
}
- play(p);
- if (waitAnnouncedOffRoute == 0) {
- waitAnnouncedOffRoute = 60000;
- } else {
- waitAnnouncedOffRoute *= 2.5;
- }
- lastAnnouncedOffRoute = ms;
}
}
@@ -486,15 +403,7 @@ public class VoiceRouter {
* @param currentLocation
*/
protected void updateStatus(Location currentLocation, boolean repeat) {
- // Directly after turn: goAhead (dist), unless:
- // < PREPARE_LONG_DISTANCE (e.g. 3500m): playPrepareTurn (-not played any more-)
- // < PREPARE_DISTANCE (e.g. 1500m): playPrepareTurn ("Turn after ...")
- // < TURN_IN_DISTANCE (e.g. 390m or 30sec): playMakeTurnIn ("Turn in ...")
- // < TURN_NOW_DISTANCE (e.g. 50m or 7sec): playMakeTurn ("Turn ...")
- float speed = DEFAULT_SPEED;
- if (currentLocation != null && currentLocation.hasSpeed()) {
- speed = Math.max(currentLocation.getSpeed(), speed);
- }
+ float speed = atd.getSpeed(currentLocation);
NextDirectionInfo nextInfo = router.getNextRouteDirectionInfo(new NextDirectionInfo(), true);
RouteSegmentResult currentSegment = router.getCurrentSegmentResult();
@@ -531,23 +440,24 @@ public class VoiceRouter {
if (currentStatus == STATUS_UNKNOWN) {
// Play "Continue for ..." if (1) after route calculation if no other prompt is due, or (2) after a turn if next turn is more than PREPARE_LONG_DISTANCE away
- if ((playGoAheadDist == -1) || (dist > PREPARE_LONG_DISTANCE)) {
- playGoAheadDist = dist - 3 * TURN_NOW_DISTANCE;
+ if ((playGoAheadDist == -1) || !atd.isTurnStateActive(0, dist, STATE_LONG_PREPARE_TURN)) {
+ // 10 seconds
+ playGoAheadDist = dist - 10 * speed;
}
}
NextDirectionInfo nextNextInfo = router.getNextRouteDirectionInfoAfter(nextInfo, new NextDirectionInfo(), true); //I think "true" is correct here, not "!repeat"
// Note: getNextRouteDirectionInfoAfter(nextInfo, x, y).distanceTo is distance from nextInfo, not from current position!
-
// STATUS_TURN = "Turn (now)"
- if ((repeat || statusNotPassed(STATUS_TURN)) && isDistanceLess(speed, dist, TURN_NOW_DISTANCE, TURN_NOW_SPEED)) {
- if (nextNextInfo.distanceTo < TURN_IN_DISTANCE_END && nextNextInfo != null) {
+ if ((repeat || statusNotPassed(STATUS_TURN)) && atd.isTurnStateActive(speed, dist, STATE_TURN_NOW)) {
+ if (nextNextInfo != null && !atd.isTurnStateNotPassed(0, nextNextInfo.distanceTo, STATE_TURN_IN )) {
playMakeTurn(currentSegment, next, nextNextInfo);
} else {
playMakeTurn(currentSegment, next, null);
}
- if (!next.getTurnType().goAhead() && isTargetPoint(nextNextInfo)) { // !goAhead() avoids isolated "and arrive.." prompt, as goAhead() is not pronounced
- if (nextNextInfo.distanceTo < TURN_IN_DISTANCE_END) {
+ if (!next.getTurnType().goAhead() && isTargetPoint(nextNextInfo) && nextNextInfo != null) {
+ // !goAhead() avoids isolated "and arrive.." prompt, as goAhead() is not pronounced
+ if (!atd.isTurnStateNotPassed(0, nextNextInfo.distanceTo, STATE_TURN_IN )) {
// Issue #2865: Ensure a distance associated with the destination arrival is always announced, either here, or in subsequent "Turn in" prompt
// Distance fon non-straights already announced in "Turn (now)"'s nextnext code above
if ((nextNextInfo != null) && (nextNextInfo.directionInfo != null) && nextNextInfo.directionInfo.getTurnType().goAhead()) {
@@ -555,7 +465,7 @@ public class VoiceRouter {
playGoAhead(nextNextInfo.distanceTo, new StreetName());
}
playAndArriveAtDestination(nextNextInfo);
- } else if (nextNextInfo.distanceTo < 1.2f * TURN_IN_DISTANCE_END) {
+ } else if (!atd.isTurnStateNotPassed(0, nextNextInfo.distanceTo / 1.2f, STATE_TURN_IN )) {
// 1.2 is safety margin should the subsequent "Turn in" prompt not fit in amy more
playThen();
playGoAhead(nextNextInfo.distanceTo, new StreetName());
@@ -565,33 +475,33 @@ public class VoiceRouter {
nextStatusAfter(STATUS_TURN);
// STATUS_TURN_IN = "Turn in ..."
- } else if ((repeat || statusNotPassed(STATUS_TURN_IN)) && isDistanceLess(speed, dist, TURN_IN_DISTANCE)) {
- if (repeat || dist >= TURN_IN_DISTANCE_END) {
- if ((isDistanceLess(speed, nextNextInfo.distanceTo, TURN_NOW_DISTANCE) || nextNextInfo.distanceTo < TURN_IN_DISTANCE_END) &&
- nextNextInfo != null) {
- playMakeTurnIn(currentSegment, next, dist - (int) voicePromptDelayDistance, nextNextInfo.directionInfo);
+ } else if ((repeat || statusNotPassed(STATUS_TURN_IN)) && atd.isTurnStateActive(speed, dist, STATE_TURN_IN)) {
+ if (repeat || atd.isTurnStateNotPassed(0, dist, STATE_TURN_IN)) {
+ if (nextNextInfo != null && (atd.isTurnStateActive(speed, nextNextInfo.distanceTo, STATE_TURN_NOW)
+ || !atd.isTurnStateNotPassed(speed, nextNextInfo.distanceTo, STATE_TURN_IN))) {
+ playMakeTurnIn(currentSegment, next, atd.calcDistanceWithoutDelay(speed, dist), nextNextInfo.directionInfo);
} else {
- playMakeTurnIn(currentSegment, next, dist - (int) voicePromptDelayDistance, null);
+ playMakeTurnIn(currentSegment, next, atd.calcDistanceWithoutDelay(speed, dist), null);
}
playGoAndArriveAtDestination(repeat, nextInfo, currentSegment);
}
nextStatusAfter(STATUS_TURN_IN);
// STATUS_PREPARE = "Turn after ..."
- } else if ((repeat || statusNotPassed(STATUS_PREPARE)) && (dist <= PREPARE_DISTANCE)) {
- if (repeat || dist >= PREPARE_DISTANCE_END) {
+ } else if ((repeat || statusNotPassed(STATUS_PREPARE)) && atd.isTurnStateActive(0, dist, STATE_PREPARE_TURN)) {
+ if (repeat || atd.isTurnStateNotPassed(0, dist, STATE_PREPARE_TURN)) {
if (!repeat && (next.getTurnType().keepLeft() || next.getTurnType().keepRight())) {
// Do not play prepare for keep left/right
} else {
- playPrepareTurn(currentSegment, next, dist);
+ playPrepareTurn(currentSegment, next, atd.calcDistanceWithoutDelay(speed, dist));
playGoAndArriveAtDestination(repeat, nextInfo, currentSegment);
}
}
nextStatusAfter(STATUS_PREPARE);
// STATUS_LONG_PREPARE = also "Turn after ...", we skip this now, users said this is obsolete
- } else if ((repeat || statusNotPassed(STATUS_LONG_PREPARE)) && (dist <= PREPARE_LONG_DISTANCE)) {
- if (repeat || dist >= PREPARE_LONG_DISTANCE_END) {
+ } else if ((repeat || statusNotPassed(STATUS_LONG_PREPARE)) && atd.isTurnStateActive(0, dist, STATE_LONG_PREPARE_TURN)) {
+ if (repeat || atd.isTurnStateNotPassed(0, dist, STATE_LONG_PREPARE_TURN)) {
playPrepareTurn(currentSegment, next, dist);
playGoAndArriveAtDestination(repeat, nextInfo, currentSegment);
}
@@ -835,7 +745,8 @@ public class VoiceRouter {
playGoAhead(nextInfo.distanceTo, getSpeakableStreetName(currentSegment, next, false));
playAndArriveAtDestination(nextInfo);
playedAndArriveAtTarget = true;
- } else if (nextInfo.distanceTo <= 2 * TURN_IN_DISTANCE) {
+ } else if (nextInfo != null &&
+ atd.isTurnStateActive(0, nextInfo.distanceTo / 2, STATE_TURN_IN)) {
playAndArriveAtDestination(nextInfo);
playedAndArriveAtTarget = true;
}
diff --git a/OsmAnd/src/net/osmand/plus/routing/data/AnnounceTimeDistances.java b/OsmAnd/src/net/osmand/plus/routing/data/AnnounceTimeDistances.java
new file mode 100644
index 0000000000..682a7d8430
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/routing/data/AnnounceTimeDistances.java
@@ -0,0 +1,236 @@
+package net.osmand.plus.routing.data;
+
+import net.osmand.Location;
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.settings.backend.ApplicationMode;
+import net.osmand.plus.settings.backend.OsmandSettings;
+import net.osmand.plus.voice.AbstractPrologCommandPlayer;
+
+public class AnnounceTimeDistances {
+ // Avoids false negatives: Pre-pone close announcements by this distance to allow for the possible over-estimation of the 'true' lead distance due to positioning error.
+ // A smaller value will increase the timing precision, but at the risk of missing prompts which do not meet the precision limit.
+ // We can research if a flexible value like min(12, x * gps-hdop) has advantages over a constant (x could be 2 or so).
+ private static final int POSITIONING_TOLERANCE = 12;
+
+ public final static int STATE_TURN_NOW = 0;
+ public final static int STATE_TURN_IN = 1;
+ public final static int STATE_PREPARE_TURN = 2;
+ public final static int STATE_LONG_PREPARE_TURN = 3;
+ public final static int STATE_SHORT_ALARM_ANNOUNCE = 4;
+ public final static int STATE_LONG_ALARM_ANNOUNCE = 5;
+ public final static int STATE_SHORT_PNT_APPROACH = 6;
+ public final static int STATE_LONG_PNT_APPROACH = 7;
+
+
+ // Default speed to have comfortable announcements (Speed in m/s)
+ // initial value is updated from default speed settings anyway
+ private float DEFAULT_SPEED = 10;
+ private double voicePromptDelayTimeSec = 0;
+
+ private float ARRIVAL_DISTANCE;
+ private float OFF_ROUTE_DISTANCE;
+
+ private float TURN_NOW_SPEED;
+ private int PREPARE_LONG_DISTANCE;
+ private int PREPARE_LONG_DISTANCE_END;
+ private int PREPARE_DISTANCE;
+ private int PREPARE_DISTANCE_END;
+ private int TURN_IN_DISTANCE;
+ private int TURN_IN_DISTANCE_END;
+ private int TURN_NOW_DISTANCE;
+ private int LONG_PNT_ANNOUNCE_RADIUS;
+ private int SHORT_PNT_ANNOUNCE_RADIUS;
+ private int LONG_ALARM_ANNOUNCE_RADIUS;
+ private int SHORT_ALARM_ANNOUNCE_RADIUS;
+
+ public AnnounceTimeDistances(ApplicationMode appMode, OsmandSettings settings) {
+ if (appMode.isDerivedRoutingFrom(ApplicationMode.CAR)) {
+ // keep it as minimum 30 kmh for voice announcement
+ DEFAULT_SPEED = (float) Math.max(8, appMode.getDefaultSpeed());
+ } else {
+ // minimal is 1 meter for turn now
+ DEFAULT_SPEED = (float) Math.max(0.3, appMode.getDefaultSpeed());
+ }
+ // Calculate minimal distance / time to announce turns, so time to turn is always >= ETALON_TIME
+ // Distance < ETALON_DIST or TIME_WITH_CURRENT_SPEED < ETALON_TIME_DEFAULT_SPEED
+
+ // 300 sec: 4 200 - 3 500 m - car [ 115 - 95 sec @ 120 km/h]
+ PREPARE_LONG_DISTANCE = (int) (DEFAULT_SPEED * 300);
+ PREPARE_LONG_DISTANCE_END = (int) (DEFAULT_SPEED * 250) ;
+ if (DEFAULT_SPEED < 30) {
+ // Play only for high speed vehicle with speed > 110 km/h
+ // [issue 1411] - used only for goAhead prompt
+ PREPARE_LONG_DISTANCE_END = PREPARE_LONG_DISTANCE * 2;
+ }
+
+ // 115 sec: 1 500 m - car [45 sec @ 120 km/h], 320 m - bicycle [45 sec @ 25 km/h], 230 m - pedestrian
+ PREPARE_DISTANCE = (int) (DEFAULT_SPEED * 115);
+ // 90 sec: 1 200 m - car, 250 m - bicycle [36 sec @ 25 km/h],
+ PREPARE_DISTANCE_END = (int) (DEFAULT_SPEED * 90);
+
+ // 22 sec: 310 m - car, 60 m - bicycle, 50m - pedestrian
+ TURN_IN_DISTANCE = (int) (DEFAULT_SPEED * 22);
+ // 15 sec: 210 m - car, 40 m - bicycle, 30 m - pedestrian
+ TURN_IN_DISTANCE_END = (int) (DEFAULT_SPEED * 15);
+
+ // Do not play prepare: for pedestrian and slow transport
+ // same check as speed < 150/(90-22) m/s = 2.2 m/s = 8 km/h
+ // if (DEFAULT_SPEED < 2.3) {
+ if (PREPARE_DISTANCE_END - TURN_IN_DISTANCE < 150) {
+ PREPARE_DISTANCE_END = PREPARE_DISTANCE * 2;
+ }
+
+ // Turn now: 3.5 sec normal speed, 7 second for halfspeed (default)
+ // float TURN_NOW_TIME = 7;
+
+ // ** #8749 to keep 1m / 1 sec precision (POSITIONING_TOLERANCE = 12 m)
+ // 1 kmh - 1 sec, 4 kmh - 2 sec (pedestrian), 10 kmh - 3 sec (*bicycle), 50 kmh - 7 sec (car)
+ float TURN_NOW_TIME = (float) Math.min(Math.sqrt(DEFAULT_SPEED * 3.6), 8);
+
+ float ARRIVAL_DISTANCE_FACTOR = Math.max(settings.ARRIVAL_DISTANCE_FACTOR.getModeValue(appMode), 0.1f);
+
+ // TURN_NOW_DISTANCE = (int) (DEFAULT_SPEED * 3.6); // 3.6 sec
+ // 50 kmh - 48 m (car), 10 kmh - 20 m, 4 kmh - 15 m, 1 kmh - 12 m
+ // 3.6 sec: 43 m (car), 18 m (bicycle), 12 m (walking, capped by POSITIONING_TOLERANCE)
+ TURN_NOW_DISTANCE = (int) (Math.max(POSITIONING_TOLERANCE, DEFAULT_SPEED * 3.6) * ARRIVAL_DISTANCE_FACTOR);
+ TURN_NOW_SPEED = TURN_NOW_DISTANCE / TURN_NOW_TIME;
+
+ // 5 sec: 60 m (car), 25 m (bicycle), 12 m (walking)
+ ARRIVAL_DISTANCE = (int) (Math.max(POSITIONING_TOLERANCE, DEFAULT_SPEED * 5.) * ARRIVAL_DISTANCE_FACTOR);
+ // 50 kmh - 280 m, 10 kmh - 55 m, 4 kmh - 22 m
+ OFF_ROUTE_DISTANCE = DEFAULT_SPEED * 20 * ARRIVAL_DISTANCE_FACTOR; // 20 seconds
+ // assume for backward compatibility speed - 10 m/s
+ LONG_PNT_ANNOUNCE_RADIUS = (int) (60 * DEFAULT_SPEED * ARRIVAL_DISTANCE_FACTOR); // 700m
+ SHORT_PNT_ANNOUNCE_RADIUS = (int) (15 * DEFAULT_SPEED * ARRIVAL_DISTANCE_FACTOR); // 150m
+ LONG_ALARM_ANNOUNCE_RADIUS = (int) (12 * DEFAULT_SPEED * ARRIVAL_DISTANCE_FACTOR); // 150m
+ SHORT_ALARM_ANNOUNCE_RADIUS = (int) (7 * DEFAULT_SPEED * ARRIVAL_DISTANCE_FACTOR); // 100m
+
+ // Trigger close prompts earlier to allow BT SCO link being established, or when VOICE_PROMPT_DELAY is set >0 for the other stream types
+ int ams = settings.AUDIO_MANAGER_STREAM.getModeValue(appMode);
+ if ((ams == 0 && !AbstractPrologCommandPlayer.btScoStatus) || ams > 0) {
+ if (settings.VOICE_PROMPT_DELAY[ams] != null) {
+ voicePromptDelayTimeSec = (double) settings.VOICE_PROMPT_DELAY[ams].get() / 1000;
+ }
+ }
+ }
+
+ public int getImminentTurnStatus(float dist, Location loc) {
+ float speed = getSpeed(loc);
+ if (isTurnStateActive(speed, dist, STATE_TURN_NOW)) {
+ return 0;
+ } else if (isTurnStateActive(speed, dist, STATE_PREPARE_TURN)) {
+ // STATE_TURN_IN included
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+
+ public boolean isTurnStateActive(float currentSpeed, double dist, int turnType) {
+ switch (turnType) {
+ case STATE_TURN_IN:
+ return isDistanceLess(currentSpeed, dist, TURN_IN_DISTANCE);
+ case STATE_PREPARE_TURN:
+ return isDistanceLess(currentSpeed, dist, PREPARE_DISTANCE);
+ case STATE_LONG_PREPARE_TURN:
+ return isDistanceLess(currentSpeed, dist, PREPARE_LONG_DISTANCE);
+ case STATE_TURN_NOW:
+ return isDistanceLess(currentSpeed, dist, TURN_NOW_DISTANCE, TURN_NOW_SPEED);
+ case STATE_LONG_PNT_APPROACH:
+ return isDistanceLess(currentSpeed, dist, LONG_PNT_ANNOUNCE_RADIUS);
+ case STATE_SHORT_PNT_APPROACH:
+ return isDistanceLess(currentSpeed, dist, SHORT_PNT_ANNOUNCE_RADIUS);
+ case STATE_LONG_ALARM_ANNOUNCE:
+ return isDistanceLess(currentSpeed, dist, LONG_ALARM_ANNOUNCE_RADIUS);
+ case STATE_SHORT_ALARM_ANNOUNCE:
+ return isDistanceLess(currentSpeed, dist, SHORT_ALARM_ANNOUNCE_RADIUS);
+ }
+ return false;
+ }
+
+ public boolean isTurnStateNotPassed(float currentSpeed, double dist, int turnType) {
+ switch (turnType) {
+ case STATE_TURN_IN:
+ return !isDistanceLess(currentSpeed, dist, TURN_IN_DISTANCE_END);
+ case STATE_PREPARE_TURN:
+ return !isDistanceLess(currentSpeed, dist, PREPARE_DISTANCE_END);
+ case STATE_LONG_PREPARE_TURN:
+ return !isDistanceLess(currentSpeed, dist, PREPARE_LONG_DISTANCE_END);
+ case STATE_LONG_PNT_APPROACH:
+ return !isDistanceLess(currentSpeed, dist, LONG_PNT_ANNOUNCE_RADIUS * 0.5);
+ case STATE_LONG_ALARM_ANNOUNCE:
+ return !isDistanceLess(currentSpeed, dist, LONG_ALARM_ANNOUNCE_RADIUS * 0.5);
+ }
+ return true;
+ }
+
+ private boolean isDistanceLess(float currentSpeed, double dist, double etalon) {
+ return isDistanceLess(currentSpeed, dist, etalon, DEFAULT_SPEED);
+ }
+
+ private boolean isDistanceLess(float currentSpeed, double dist, double etalon, float defSpeed) {
+ if (dist - voicePromptDelayTimeSec * currentSpeed <= etalon) {
+ return true;
+ }
+ // check only if speed > 0
+ if (currentSpeed > 0 && (dist / currentSpeed - voicePromptDelayTimeSec) <= etalon / defSpeed) {
+ return true;
+ }
+ return false;
+ }
+
+ public float getSpeed(Location loc) {
+ float speed = DEFAULT_SPEED;
+ if (loc != null && loc.hasSpeed()) {
+ speed = Math.max(loc.getSpeed(), speed);
+ }
+ return speed;
+ }
+
+ public float getOffRouteDistance() {
+ return OFF_ROUTE_DISTANCE;
+ }
+
+ public float getArrivalDistance() {
+ return ARRIVAL_DISTANCE;
+ }
+
+ public int calcDistanceWithoutDelay(float speed, int dist) {
+ return (int) (dist - voicePromptDelayTimeSec * speed);
+ }
+
+ private void appendTurnDesc(StringBuilder s, String name, int dist) {
+ appendTurnDesc(s, name, dist, DEFAULT_SPEED);
+ }
+
+ private void appendTurnDesc(StringBuilder s, String name, int dist, float speed) {
+ int minDist = (dist / 5) * 5;
+ int time = (int) (dist / speed);
+ if(time > 15) {
+ // round to 5
+ time = (time / 5) * 5;
+ }
+ s.append(String.format("%s: %d - %d m, %d sec\n", name, minDist, minDist + 5, time));
+ }
+
+ public String getTurnsDescription() {
+ StringBuilder turnDescriptions = new StringBuilder();
+ appendTurnDesc(turnDescriptions, "Turn (now)", TURN_NOW_DISTANCE, TURN_NOW_SPEED);
+ appendTurnDesc(turnDescriptions, "Turn (approach)", TURN_IN_DISTANCE);
+ if (PREPARE_DISTANCE_END <= PREPARE_DISTANCE) {
+ appendTurnDesc(turnDescriptions, "Turn (prepare)", PREPARE_DISTANCE);
+ }
+ if (PREPARE_LONG_DISTANCE_END <= PREPARE_LONG_DISTANCE) {
+ appendTurnDesc(turnDescriptions, "Turn (early prepare)", PREPARE_LONG_DISTANCE);
+ }
+ appendTurnDesc(turnDescriptions, "Finish", (int) getArrivalDistance());
+ if (getOffRouteDistance() > 0) {
+ appendTurnDesc(turnDescriptions, "Off-route", (int) getOffRouteDistance());
+ }
+ appendTurnDesc(turnDescriptions, "Alarm (now)", SHORT_ALARM_ANNOUNCE_RADIUS);
+ appendTurnDesc(turnDescriptions, "Alarm (prepare)", LONG_ALARM_ANNOUNCE_RADIUS);
+ appendTurnDesc(turnDescriptions, "POI/Waypoint (now)", SHORT_PNT_ANNOUNCE_RADIUS);
+ appendTurnDesc(turnDescriptions, "POI/Waypoint (prepare)", LONG_PNT_ANNOUNCE_RADIUS);
+ return turnDescriptions.toString();
+ }
+}
diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java b/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java
index 9a5cdb7d79..59d8172bb1 100644
--- a/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java
+++ b/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java
@@ -374,13 +374,6 @@ public class ApplicationMode {
}
- public int getOffRouteDistance() {
- // used to be: 50/14 - 350 m, 10/2.7 - 50 m, 4/1.11 - 20 m
- float speed = Math.max(getDefaultSpeed(), 0.3f);
- // become: 50 kmh - 280 m, 10 kmh - 55 m, 4 kmh - 22 m
- return (int) (speed * 20);
- }
-
public boolean hasFastSpeed() {
return getDefaultSpeed() > 10;
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmAndAppCustomization.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmAndAppCustomization.java
index 742d9b26e1..2a7158ac11 100644
--- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmAndAppCustomization.java
+++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmAndAppCustomization.java
@@ -227,9 +227,6 @@ public class OsmAndAppCustomization {
return true;
}
- public boolean onDestinationReached() {
- return true;
- }
@Nullable
public Bitmap getNavDrawerLogo() {
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java
index 40f6889397..c270ea0ed8 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java
@@ -15,7 +15,7 @@ import com.google.android.material.slider.Slider;
import net.osmand.AndroidUtils;
import net.osmand.plus.helpers.enums.MetricsConstants;
-import net.osmand.plus.routing.RoutingHelperUtils;
+import net.osmand.plus.routing.RoutingHelper;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmAndFormatter;
import net.osmand.plus.OsmandApplication;
@@ -207,8 +207,7 @@ public class RecalculateRouteInDeviationBottomSheet extends BooleanPreferenceBot
}
private void getDefaultValue() {
- currentValue = RoutingHelperUtils.getDefaultAllowedDeviation(settings, appMode,
- RoutingHelperUtils.getPosTolerance(0));
+ currentValue = RoutingHelper.getDefaultAllowedDeviation(settings, appMode);
}
private int findIndexOfValue(float allowedValue) {
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java
index b0e0ad0639..d3d9ef2d93 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java
@@ -33,7 +33,6 @@ import net.osmand.plus.UiUtilities;
import net.osmand.plus.Version;
import net.osmand.plus.routing.RouteProvider;
import net.osmand.plus.routing.RoutingHelper;
-import net.osmand.plus.routing.RoutingHelperUtils;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.BooleanPreference;
import net.osmand.plus.settings.backend.CommonPreference;
@@ -479,7 +478,7 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP
float allowedValue = settings.ROUTE_RECALCULATION_DISTANCE.getModeValue(appMode);
boolean enabled = allowedValue != DISABLE_MODE;
if (allowedValue <= 0) {
- allowedValue = RoutingHelperUtils.getDefaultAllowedDeviation(settings, appMode, RoutingHelperUtils.getPosTolerance(0));
+ allowedValue = RoutingHelper.getDefaultAllowedDeviation(settings, appMode);
}
String summary = String.format(getString(R.string.ltr_or_rtl_combine_via_bold_point),
enabled ? getString(R.string.shared_string_enabled) : getString(R.string.shared_string_disabled),
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java
index e1cd1f5d39..83cc191a02 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/VoiceAnnouncesFragment.java
@@ -17,6 +17,7 @@ import androidx.preference.PreferenceViewHolder;
import androidx.preference.SwitchPreferenceCompat;
import net.osmand.AndroidUtils;
+import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.Version;
@@ -26,6 +27,7 @@ import net.osmand.plus.download.DownloadActivity;
import net.osmand.plus.download.DownloadActivityType;
import net.osmand.plus.helpers.FileNameTranslationHelper;
import net.osmand.plus.helpers.enums.MetricsConstants;
+import net.osmand.plus.routing.data.AnnounceTimeDistances;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.OsmandSettings;
import net.osmand.plus.settings.preferences.ListPreferenceEx;
@@ -40,6 +42,7 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
public static final String TAG = VoiceAnnouncesFragment.class.getSimpleName();
private static final String MORE_VALUE = "MORE_VALUE";
+ private static final String VOICE_PROMPTS_TIMETABLE = "voice_prompts_timetable";
@Override
protected void createToolbar(LayoutInflater inflater, View view) {
@@ -93,6 +96,7 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
setupKeepInformingPref();
setupArrivalAnnouncementPref();
+ updateVoicePromptsTimes();
setupVoiceProviderPref();
if (!Version.isBlackberry(app)) {
@@ -104,6 +108,17 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
setupSpeedCamerasAlert();
}
+ private void updateVoicePromptsTimes() {
+ Preference pref = findPreference(VOICE_PROMPTS_TIMETABLE);
+ if (OsmandPlugin.isDevelopment()) {
+ AnnounceTimeDistances atd = new AnnounceTimeDistances(getSelectedAppMode(), settings);
+ pref.setSummary(atd.getTurnsDescription().trim());
+ pref.setVisible(true);
+ } else {
+ pref.setVisible(false);
+ }
+ }
+
private void setupSpeedLimitExceedPref() {
//array size must be equal!
Float[] valuesKmh = new Float[] {-10f, -7f, -5f, 0f, 5f, 7f, 10f, 15f, 20f};
@@ -259,6 +274,9 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
settings.SPEAK_SPEED_CAMERA.getId(), false, ApplyQueryType.SNACK_BAR);
}
}
+ if (prefId.equals(settings.ARRIVAL_DISTANCE_FACTOR.getId())) {
+ updateVoicePromptsTimes();
+ }
if (prefId.equals(settings.AUDIO_MANAGER_STREAM.getId())) {
return onConfirmPreferenceChange(
settings.AUDIO_MANAGER_STREAM.getId(), newValue, ApplyQueryType.SNACK_BAR);
@@ -293,8 +311,11 @@ public class VoiceAnnouncesFragment extends BaseSettingsFragment implements OnPr
@Override
public boolean onPreferenceClick(Preference preference) {
- if (settings.SPEED_CAMERAS_UNINSTALLED.getId().equals(preference.getKey())) {
+ String prefId = preference.getKey();
+ if (settings.SPEED_CAMERAS_UNINSTALLED.getId().equals(prefId)) {
SpeedCamerasBottomSheet.showInstance(requireActivity().getSupportFragmentManager(), this);
+ } else if (VOICE_PROMPTS_TIMETABLE.equals(prefId)) {
+ app.showToastMessage(String.valueOf(preference.getSummary()));
}
return super.onPreferenceClick(preference);
}
diff --git a/plugins/Osmand-Nautical/build.gradle b/plugins/Osmand-Nautical/build.gradle
index bc8e716c47..f11e776269 100644
--- a/plugins/Osmand-Nautical/build.gradle
+++ b/plugins/Osmand-Nautical/build.gradle
@@ -55,7 +55,7 @@ android {
repositories {
ivy {
name = "OsmAndBinariesIvy"
- url = "http://builder.osmand.net"
+ url = "https://builder.osmand.net"
layout "pattern", {
artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
}
diff --git a/plugins/Osmand-ParkingPlugin/build.gradle b/plugins/Osmand-ParkingPlugin/build.gradle
index 5253c0e52a..ea6a811527 100644
--- a/plugins/Osmand-ParkingPlugin/build.gradle
+++ b/plugins/Osmand-ParkingPlugin/build.gradle
@@ -55,7 +55,7 @@ android {
repositories {
ivy {
name = "OsmAndBinariesIvy"
- url = "http://builder.osmand.net"
+ url = "https://builder.osmand.net"
layout "pattern", {
artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
}
diff --git a/plugins/Osmand-SRTMPlugin/build.gradle b/plugins/Osmand-SRTMPlugin/build.gradle
index 589776252a..53465a5ab6 100644
--- a/plugins/Osmand-SRTMPlugin/build.gradle
+++ b/plugins/Osmand-SRTMPlugin/build.gradle
@@ -55,7 +55,7 @@ android {
repositories {
ivy {
name = "OsmAndBinariesIvy"
- url = "http://builder.osmand.net"
+ url = "https://builder.osmand.net"
layout "pattern", {
artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
}
diff --git a/plugins/Osmand-Skimaps/build.gradle b/plugins/Osmand-Skimaps/build.gradle
index dcf39f487f..49c7c31c57 100644
--- a/plugins/Osmand-Skimaps/build.gradle
+++ b/plugins/Osmand-Skimaps/build.gradle
@@ -56,7 +56,7 @@ android {
repositories {
ivy {
name = "OsmAndBinariesIvy"
- url = "http://builder.osmand.net"
+ url = "https://builder.osmand.net"
layout "pattern", {
artifact "ivy/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"
}