Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • orekit/rugged
  • sdinot/rugged
  • yzokras/rugged
  • youngcle/rugged-mod
4 results
Show changes
Showing
with 1873 additions and 8 deletions
/* Copyright 2013-2022 CS GROUP
* Licensed to CS GROUP (CS) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* CS licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
*
* This package provides useful objects.
*
* @author Luc Maisonobe
* @author Guylaine Prat
*
*/
package org.orekit.rugged.utils;
# internal error, contact maintenance at {0}
INTERNAL_ERROR = intern fejl. Kontakt vedligeholdsansvarlig på {0}
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = ingen data fundet på [{0}, {1}], flisen dækker kun fra [0, 0] til [{2}, {3}] (inkluderet)
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = ingen data på breddegrad {0} og længdegrad {1}, flisen dækker kun breddegraderne {2} til {3} og længdegraderne {4} til {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = ingen digital højdemodel ved breddegrad {0} og længdegrad {1}
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = den valgte flise for breddegrad {0} og længdegrad {1} indeholder ikke påkrævet nabopunkt
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = datoen {0} er udenfor perioden [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = generel kontekst har ikke været initialiseret ({0} har ikke været kaldt)
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = flisen er tom: {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = ukendt måler {0}
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = synslinjen når ikke bakken
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = synslinjen krydser aldrig breddegrad {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = synslinjen krydser aldrig længdegrad {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = linjen krydser aldrig højden {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = synslinjen går ind i den digitale højdemodel bag rumfartøjet!
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = rammen {0} stemmer ikke overens med rammen {1} fra interpolar-dumpet
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = dataen er ikke et interpolar-dump
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = debug-dump er allerede aktivt for denne tråd
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = kunne ikke aktivere debug-dump med fil {0}: {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = debug-dump er ikke aktivt for denne tråd
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = kan ikke fortolke linje {0}, fil {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = lystidskorrektion omdefineret, linje {0}, fil {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = lysaberrationskorrektion omdefineret, linje {0}, fil {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = flise {0} allerede defineret, linje {1}, fil {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = ukendt flise {0}, linje {1}, fil {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = ingen parametre er udvalgt til estimering
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = ingen referencemapping til estimering af parametre
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = en anden parameter ned navnet {0} findes allerede
# rugged name is not found
INVALID_RUGGED_NAME = rugged navn blev ikke fundet
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = raffinering med rugged instansen {0} blev ikke håndteret
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = ingen atmosfæriske lagdata ved højden {0} (laveste højde: {1})
# step {0} is not valid : {1}
INVALID_STEP = skridt {0} er ikke gyldigt : {1}
# range between min line {0} and max line {1} too small {2}
INVALID_RANGE_FOR_LINES = interval mellem minimumslinje {0} og maksimumslinje {1} for lille {2}
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = <MISSING TRANSLATION>
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = Keine Angaben im Index, die Ziegel nimmt nur Bezug auf [0, 0] bis [{2}, {3}] (inklusive)
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = keine Angaben zu Breite {0} und Länge {1}, die Ziegel nimmt nur Bezug auf die Breite {2} bis {3} und Länge {4} bis {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = <MISSING TRANSLATION>
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = <MISSING TRANSLATION>
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = Angabe {0} ist außerhalb der Zeitspanne [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = <MISSING TRANSLATION>
# tile is empty: {0} * {1}
EMPTY_TILE = die Ziegel ist leer: {0} * {1}
# unknown sensor {0}
UNKNOWN_SENSOR = unbekannter Sensor {0}
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = die Sichtverbindung erreicht nicht die Erde
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = die Sichtverbindung kreuzt nie die Breite {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = die Sichtverbindung kreuzt nie die Länge {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = die Linie kreuzt nie die Höhe {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = die Sichtverbindung tritt in das digitale Höhenlinienmodell ein, hinter dem Satellite!
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = der Rahmen {0} passt nicht zum Rahmen {1} des Backups der Interpolation - Verfahren zur Vergrößerung oder Verkleinerung von Bilddateien
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = die Angabe ist nicht das Backup der Interpolation
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = <MISSING TRANSLATION>
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = <MISSING TRANSLATION>
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = <MISSING TRANSLATION>
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = <MISSING TRANSLATION>
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = <MISSING TRANSLATION>
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = <MISSING TRANSLATION>
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = <MISSING TRANSLATION>
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = <MISSING TRANSLATION>
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = <MISSING TRANSLATION>
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = <MISSING TRANSLATION>
# rugged name is not found
INVALID_RUGGED_NAME = <MISSING TRANSLATION>
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = <MISSING TRANSLATION>
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = <MISSING TRANSLATION>
# step {0} is not valid : {1}
INVALID_STEP = <MISSING TRANSLATION>
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
# internal error, contact maintenance at {0}
INTERNAL_ERROR = internal error, contact maintenance at {0}
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = internal error, please notify development team by creating an issue at {0}
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
......@@ -7,8 +7,17 @@ OUT_OF_TILE_INDICES = no data at indices [{0}, {1}], tile only covers from [0, 0
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
# general context has not been initialized
UNINITIALIZED_CONTEXT = general context has not been initialized
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = no Digital Elevation Model data at latitude {0} and longitude {1}
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = date {0} is out of time span [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = general context has not been initialized (missing call to {0})
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = tile is empty: {0} ⨉ {1}
......@@ -16,6 +25,9 @@ EMPTY_TILE = tile is empty: {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = unknown sensor {0}
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = line-of-sight does not reach ground
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = line-of-sight never crosses latitude {0}
......@@ -27,3 +39,66 @@ LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = line-of-sight never crosses altitude {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = line-of-sight enters the Digital Elevation Model behind spacecraft!
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = frame {0} does not match frame {1} from interpolator dump
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = data is not an interpolator dump
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = debug dump is already active for this thread
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = unable to active debug dump with file {0}: {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = debug dump is not active for this thread
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = cannot parse line {0}, file {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = light time correction redefined, line {0}, file {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = aberration of light correction redefined, line {0}, file {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = atmospheric refraction correction redefined, line {0}, file {1}: {2}
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = tile {0} already defined, line {1}, file {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = unknown tile {0}, line {1}, file {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = no parameters have been selected for estimation
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = no reference mappings for parameters estimation
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = a different parameter with name {0} already exists
# rugged name is not found
INVALID_RUGGED_NAME = invalid rugged name
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = refining using {0} rugged instance is not handled
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = no atmospheric layer data at altitude {0} (lowest altitude: {1})
# step {0} is not valid : {1}
INVALID_STEP = step {0} is not valid : {1}
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = range between min line {0} and max line {1} is invalid {2}
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = <MISSING TRANSLATION>
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = no hay datos en los índices [{0}, {1}], la faceta sólo cubre desde [0, 0] a [{2}, {3}] (inclusive)
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = no hay datos para la latitud {0} y la longitud {1}, la faceta sólo cubre las latitudes de {2} a {3} y las longitudes de {4} a {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = ho hay datos del Modelo Digital del Terreno para la latitud {0} y longitud {1}
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = la faceta seleccionada para la latitud {0} y longitud {1} no cumple el requisito de vecindad
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = la fecha {0} está fuera del intervalo temporal [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = el contexto general no ha sido inicializado (falta hacer la llamada a {0})
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = la faceta está vacía: {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = sensor {0} desconocido
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = la línea de visión no llega al suelo
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = la línea de visión nunca atraviesa la latitud {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = la línea de visión nunca atraviesa la longitud {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = la línea de visión nunca atraviesa la altitud {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = ¡ la línea de visión entra en el Modelo Digital del Terreno por detrás del satélite !
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = el sistema de referencia {0} no corresponde con el sistema de referencia {1} del volcado de datos del interpolador
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = los datos no están en el volcado de datos del interpolador
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = el volcado de datos en modo depuración ya está activo para este hilo
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = no se puede activar el volcado de datos en modo depuración con los ficheros {0}: {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = el volcado de datos en modo depuración no está activo para este hilo
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = no se puede leer la línea {0}, fichero {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = la corrección luz-tiempo ha sido redefinida, línea {0}, fichero {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = la aberración de la corrección luz ha sido redefinida, línea {0}, fichero {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = la faceta {0} ya está definida, línea {1}, fichero {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = faceta {0} desconocida, línea {1}, fichero {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = no se ha seleccionado ningún parámetro que estimar
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = no hay mapeados de referencia para estimar los parámetros
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = ya existe un parámetro con el nombre {0}
# rugged name is not found
INVALID_RUGGED_NAME = el nombre no se considera válido para Rugged
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = no se puede refinar usando {0} instancias rugged
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = no hay datos de atmósfera para la altitud {0} (altitud mínima: {1})
# step {0} is not valid : {1}
INVALID_STEP = <MISSING TRANSLATION>
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
# internal error, contact maintenance at {0}
INTERNAL_ERROR = erreur interne, contactez la maintenance à {0}
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = erreur interne, merci de signaler le problème en ouvrant une fiche d''anomalie sur {0}
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = aucune donnée aux indices [{0}, {1}], la tuile ne couvre que de [0, 0] à [{2}, {3}] inclus
......@@ -7,8 +7,17 @@ OUT_OF_TILE_INDICES = aucune donnée aux indices [{0}, {1}], la tuile ne couvre
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = aucune donnée à la latitude {0} et à la longitude {1}, la tuile ne couvre que les latitudes de {2} à {3} et les longitudes de {4} à {5}
# general context has not been initialized
UNINITIALIZED_CONTEXT = le contexte général n''a pas été initialisé
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = aucune donnée à la latitude {0} et à la longitude {1} dans le Modèle Numérique de Terrain
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = la tuile sélectionnée pour la latitude {0} et la longitude {1} ne contient pas le voisinage requis pour ce point
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = la date {0} est hors de la plage temporelle [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = le contexte général n''a pas été initialisé (appel manquant à {0})
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = la tuile est vide : {0} ⨉ {1}
......@@ -16,6 +25,9 @@ EMPTY_TILE = la tuile est vide : {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = capteur {0} inconnu
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = la ligne de visée n''atteint pas le sol
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = la ligne de visée ne franchit jamais la latitude {0}
......@@ -27,3 +39,66 @@ LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = la ligne de visée ne franchit jamais l''
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = la ligne de visée entre dans le Modèle Numérique de Terrain derrière le satellite !
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = le repère {0} ne correspond pas au repère {1} de la sauvegarde d''interpolateur
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = les données ne correspondent pas à une sauvegarde d''interpolateur
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = capture de débogage déjà active pour ce fil d''exécution
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = impossible d''activer la capture de débogage avec le fichier {0} : {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = capture de débogage inactive pour ce fil d''exécution
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = impossible d''analyser la ligne {0} du fichier {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = correction de la durée lumière redéfinie ligne {0} du fichier {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = correction de l''aberration de la lumière redéfinie ligne {0} du fichier {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = correction de la refraction atmosphérique redéfinie ligne {0} du fichier {1}: {2}
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = tuile {0} déjà définie ligne {1} du fichier {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = tuile {0} inconnue ligne {1} du fichier {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = aucun paramètre n''a été sélectionné pour être estimé
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = aucune projection de référence pour l''estimation des paramètres
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = il existe déjà un autre paramètre nommé {0}
# rugged name is not found
INVALID_RUGGED_NAME = nom invalide pour Rugged
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = le cas d''affinage utilisant {0} instances de rugged n''est pas traité
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = pas de couche atmosphérique définie pour l''altitude {0} (altitude la plus basse : {1})
# step {0} is not valid : {1}
INVALID_STEP = le pas {0} n''est pas valable : {1}
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = l''écart entre la ligne min {0} et la ligne max {1} est non valide {2}
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = impossible de trouver le pixel senseur dans l''intervalle de lignes (avec réfraction atmosphérique) entre les lignes {0} et {1}
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = impossible de trouver le pixel senseur: pixel {0} en dehors de l''intervalle [ {1} , {2} [ (avec la marge pour la réfraction atmosphérique = {3})
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = <MISSING TRANSLATION>
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = non hai datos nos índices [{0}, {1}], a faceta só cubre dende [0, 0] a [{2}, {3}] (inclusive)
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = non hai datos para a latitude {0} e a lonxitude {1}, a faceta só cubre as latitudes de {2} a {3} e as lonxitudes de {4} a {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = <MISSING TRANSLATION>
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = a faceta seleccionada para a latitude {0} e lonxitude {1} non cumpre o requisito de veciñanza
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = a data {0} está fora do intervalo temporal [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = o contexto xeral non foi inicializado (falta face-la chamada a {0})
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = a faceta está baleira: {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = sensor {0} descoñecido
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = a liña de visión non chega ao chan
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = a liña de visión xamais atravesa a latitude {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = a liña de visión xamais atravesa a longitude {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = a liña de visión xamais atravesa a altitude {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = ¡ a liña de visión entra no Modelo Dixital do Terren por detrás do satélite !
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = o sistema de referencia {0} non corresponde co sistema de referencia {1} do baleirado de datos do interpolador
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = os datos non están no baleirado de datos do interpolador
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = <MISSING TRANSLATION>
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = <MISSING TRANSLATION>
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = <MISSING TRANSLATION>
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = <MISSING TRANSLATION>
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = <MISSING TRANSLATION>
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = <MISSING TRANSLATION>
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = <MISSING TRANSLATION>
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = <MISSING TRANSLATION>
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = <MISSING TRANSLATION>
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = <MISSING TRANSLATION>
# rugged name is not found
INVALID_RUGGED_NAME = <MISSING TRANSLATION>
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = <MISSING TRANSLATION>
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = <MISSING TRANSLATION>
# step {0} is not valid : {1}
INVALID_STEP = <MISSING TRANSLATION>
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
# internal error, contact maintenance at {0}
INTERNAL_ERROR = errore interno, contattare l''assistenza a {0}
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = nessun dato agli indici [{0}, {1}], il quadrante non copre che da [0, 0] a [{2}, {3}] inclusi
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = nessun dato alla latitudine {0} e alla longitudine {1}, il quadrante non copre che le latitudini da {2} a {3} et le longitudini da {4} a {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = nessun dato nel Modello Digitale di Elevazione alla latitudine {0} e alla longitudine {1}
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = il quadrante selezionato per la latitudine {0} e la longitudine {1} non contiene i punti dei dintorni richiesti
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = la data {0} è fuori dell''intervallo temporale [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = il contesto generale non è stato inizializzato (chiamata mancante a {0})
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = il quadrante è vuoto : {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = sensore {0} sconosciuto
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = la linea di visibilità non raggiunge il suolo
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = la linea di visibilità non attraversa mai la latitudine {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = la linea di visibilità non attraversa mai la longitudine {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = la linea di visibilità non attraversa mai l''altitudine {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = la linea di visibilità entra nel Modello Digitale di Elevazione dietro il satellite!
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = il riferimento {0} non corrisponde al riferimento {1} dell''interpolatore salvato
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = i dati non corrispondono a un salvatagggio d''interpolatore
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = dump di debug già attivo per questo thread
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = impossibile attivare il dump di debug con il file {0}: {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = dump di debug non attivo per questo thread
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = impossibile analizzare la linea {0}, file{1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = Correzione luce-tempo ridefinita, linea {0} del file {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = Correzione dell''aberrazione stellare ridefinita, linea {0} del file {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = quadrante {0} già definito, linea {1}, file {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = quadrante {0} sconosciuto, linea {1}, file {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = nessun parametro è stato selezionato per essere stimato
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = nessun mapping di riferimento per la stima dei parametri
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = un altro parametro chiamato {0} esiste già
# rugged name is not found
INVALID_RUGGED_NAME = nome non valido per Rugged
# refining context is only handled for limited number of configurations
UNSUPPORTED_REFINING_CONTEXT = il refining che usa {0} istanze rugged non è gestito
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = nessun dato atmosferico all''altitudine {0} (altitudine più bassa: {1})
# step {0} is not valid : {1}
INVALID_STEP = Step {0} non valido: {1}
# range between min line {0} and max line {1} too small {2}
INVALID_RANGE_FOR_LINES = Scarto fra la linea min {0} e la linea max {1} troppo piccolo {2}
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = intern feil, kontakt utviklingerne ved å åpne en problemrapport på {0}
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = ingen data funnet på [{0}, {1}], flisen dekker kun fra [0, 0] til [{2}, {3}] (inkludert)
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = ingen data på breddegrad {0} og lengdegrad {1}, flisen dekker kun breddegradene {2} til {3} og lengdegradene {4} til {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = ingen Digital Elevation Model data på breddegrad {0} og lengdegrad {1}
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = den valgte flisen for breddegrad {0} og lengdegrad {1} inneholder ikke nødvendig nabopunkt
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = datoen {0} er utenfor perioden [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = generell kontekst har ikke blitt initialisert ({0} har ikke blitt kalt)
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = flisen er tom: {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = ukjent måler {0}
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = synslinjen når ikke bakken
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = synslinjen krysser aldri breddegrad {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = synslinjen krysser aldri lengdegrad {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = linjen krysser aldri høyden {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = synslinjen går inn i den digital terrengmodellen bak romfartøyet
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = rammen {0} stemmer ikke med rammen {1} fra interpolar-dumpen
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = dataen er ikke en interpolar-dump
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = debug dump er allerede aktiv for denne tråden
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = kan ikke aktivere debug dump med filen {0}: {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = debug dump er ikke aktiv for denne tråden
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = kan ikke lese linje {0}, fil {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = redefinert lystidkorreksjon, linje {0}, fil {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = lyskorreksjons aberrasjonen redefinert, linje {0}, fil {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = flis {0} er allerede definert, linje {1}, fil {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = ukjent flis {0}, linje {1}, fil {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = ingen parametere har blitt valgt til anslaget
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = ingen korrespondansereferanse for parameteranslaget
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = en annen parameter med navn {0} finnes allerede
# rugged name is not found
INVALID_RUGGED_NAME = rugged navnet ble ikke funnet
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = raffinere med {0} rugged instanser er ikke støttet
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = ikke noe atmosfærisk lag definert ved {0} (laveste høyde: {1})
# step {0} is not valid : {1}
INVALID_STEP = steget {0} er ikke gyldig: {1}
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = avstanden mellom min linje {0} og max linje {1} er ugyldig {2}
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
# internal error, please notify development team by creating an issue at {0}
INTERNAL_ERROR = <MISSING TRANSLATION>
# no data at indices [{0}, {1}], tile only covers from [0, 0] to [{2}, {3}] (inclusive)
OUT_OF_TILE_INDICES = date inexistente pentru indicii [{0}, {1}], regiunea oferă acoperire doar pentru intervalul de la [0, 0] la [{2}, {3}] (inclusiv)
# no data at latitude {0} and longitude {1}, tile covers only latitudes {2} to {3} and longitudes {4} to {5}
OUT_OF_TILE_ANGLES = nu există date pentru latitudinea {0} și longitudinea {1}, regiunea oferă acoperire doar pentru latitudini de la {2} la {3} și longitudini de la {4} la {5}
# no Digital Elevation Model data at latitude {0} and longitude {1}
NO_DEM_DATA = nu există date la latitudinea {0} și longitudinea {1} pentru Modelul Numeric al Terenului
# the tile selected for latitude {0} and longitude {1} does not contain required point neighborhood
TILE_WITHOUT_REQUIRED_NEIGHBORS_SELECTED = regiunea selectată pentru latitudinea {0} și longitudinea {1} nu conține vecinătatea necesară a punctului
# date {0} is out of time span [{1}, {2}] (UTC)
OUT_OF_TIME_RANGE = data {0} este în afara intervalului [{1}, {2}] (UTC)
# general context has not been initialized (missing call to {0})
UNINITIALIZED_CONTEXT = contextul general nu a fost inițializat (lipsește apelul către {0})
# tile is empty: {0} ⨉ {1}
EMPTY_TILE = regiunea este vidă: {0} ⨉ {1}
# unknown sensor {0}
UNKNOWN_SENSOR = senzor necunoscut {0}
# line-of-sight does not reach ground
LINE_OF_SIGHT_DOES_NOT_REACH_GROUND = linia de vizare nu ajunge la sol
# line-of-sight never crosses latitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = linia de vizare nu intersectează latitudinea {0}
# line-of-sight never crosses longitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_LONGITUDE = linia de vizare nu intersectează longitudinea {0}
# line never crosses altitude {0}
LINE_OF_SIGHT_NEVER_CROSSES_ALTITUDE = linia de vizare nu intersectează altitudinea {0}
# line-of-sight enters the Digital Elevation Model behind spacecraft!
DEM_ENTRY_POINT_IS_BEHIND_SPACECRAFT = linia de vizare intră în Modelul Digital de Elevație în spatele navei spațiale!
# frame {0} does not match frame {1} from interpolator dump
FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = sistemul de coordonate {0} nu se potrivește cu sistemul de coordonate {1} din copia de siguranță a interpolatorului
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = datele nu reprezintă o copie de siguranță a interpolatorului
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = captarea informațiilor de debug este deja activă pentru acest fir de execuție
# unable to active debug dump with file {0}: {1}
DEBUG_DUMP_ACTIVATION_ERROR = imposibil de activat captarea informațiilor de debug cu fișierul {0}: {1}
# debug dump is not active for this thread
DEBUG_DUMP_NOT_ACTIVE = captarea informațiilor de debug nu este activă pentru acest fir de execuție
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = imposibil de analizat linia {0} din fișierul {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = corecția duratei luminoase redefinită la linia {0} din fișierul {1}: {2}
# aberration of light correction redefined, line {0}, file {1}: {2}
ABERRATION_OF_LIGHT_CORRECTION_REDEFINED = corecția aberației luminoase redefinită la linia {0} din fișierul {1}: {2}
# atmospheric refraction correction redefined, line {0}, file {1}: {2}
ATMOSPHERIC_REFRACTION_REDEFINED = <MISSING TRANSLATION>
# tile {0} already defined, line {1}, file {2}: {3}
TILE_ALREADY_DEFINED = titlul {0} este deja definit, linia {1} din fișierul {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = titlul {0} necunoscut la linia {1} din fișierul {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = niciun parametru nu a fost selectat pentru estimare
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = nicio proiecție a referinței pentru estimarea parametrilor
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = un alt parametru cu numele {0} există deja
# rugged name is not found
INVALID_RUGGED_NAME = nume invalid pentru Rugged
# refining using {0} rugged instance is not handled
UNSUPPORTED_REFINING_CONTEXT = Estimarea realizată folosind {0} instanțe Rugged nu este suportată
# no atmospheric layer data at altitude {0} (lowest altitude: {1})
NO_LAYER_DATA = nu există informații referitoare la atmosferă pentru altitudinea {0} (altitudinea minimă: {1})
# step {0} is not valid : {1}
INVALID_STEP = <MISSING TRANSLATION>
# range between min line {0} and max line {1} is invalid {2}
INVALID_RANGE_FOR_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel in given range lines (with atmospheric refraction) between lines {0} and {1}
SENSOR_PIXEL_NOT_FOUND_IN_RANGE_LINES = <MISSING TRANSLATION>
# impossible to find sensor pixel: pixel {0} outside interval [ {1} , {2} [ (with atmospheric refraction margin = {3})
SENSOR_PIXEL_NOT_FOUND_IN_PIXELS_LINE = <MISSING TRANSLATION>
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Building Rugged
Rugged can be built from source using several different tools.
All these tools are Java based and can run on many different operating
systems, including Unix, GNU/Linux, Windows and Mac OS X. Some GNU/Linux
distributions provide these tools in their packages repositories.
## Building with Maven 3
[Maven](http://maven.apache.org/ "Maven homepage") is a build tool that goes far beyond
simply compiling and packaging a product. It is also able to resolve
dependencies (including downloading the appropriate versions from the public
repositories), to run automated tests, to launch various checking tools and
to create a web site for a project. It runs on any platform supporting Java.
For systems not providing maven as a package, maven can be
[downloaded](http://maven.apache.org/download.cgi) from its site at the
Apache Software Foundation. This site also explains the
installation procedure.
As with all maven enabled projects, building official released versions of
Rugged is straightforward (see below for the special case of development versions),
simply run:
mvn package
The preceding command will perform all dependencies retrieval, compilation,
tests and packaging for you. At the end, it will create several files in
the target directory, including one file named rugged-x.y.jar where x.y is
the version number. This is the jar file you can use in your project using
Rugged.
This command should always work for released Rugged versions as they
always depend only on released Orekit versions. Maven knows how
to download the pre-built binary for released Orekit versions.
The previous command may not work for development Rugged versions as they
may depend on unreleased Orekit versions. Maven cannot download
pre-built binaries for unreleased Orekit versions as none are
publicly available. In this case the command above will end with an error message
like:
[ERROR] Failed to execute goal on project rugged: Could not resolve dependencies for project org.orekit:rugged:jar:X.x-SNAPSHOT: Could not find artifact org.orekit:orekit:jar:Y.y-SNAPSHOT
In this case, you should build the missing Orekit artifact and
install it in your local maven repository beforehand. This is done by cloning
the Orekit source from Orekit git repository at Gitlab in some
temporary folder and install it with maven. This is done by
running the commands below (using Linux command syntax):
git clone -b develop https://gitlab.orekit.org/orekit/orekit.git
cd orekit
mvn install
If, in a similar way, the command above ends with an error message like:
[ERROR] Failed to execute goal on project orekit: Could not resolve dependencies for project org.orekit:orekit:jar:Y.y-SNAPSHOT:
The following artifacts could not be resolved: org.hipparchus:hipparchus-core:jar:Z.z-SNAPSHOT, org.hipparchus:hipparchus-geometry:jar:Z.z-SNAPSHOT,
...
Could not find artifact org.hipparchus:hipparchus-core:jar:Z.Z-SNAPSHOT
Before building the Orekit artefact, you should start by building the missing Hipparchus artifact
and install it in your local maven repository
beforehand, in the same way as Orekit, by cloning
the Hipparchus source from Hipparchus git repository at GitHub:
git clone https://github.com/Hipparchus-Math/hipparchus.git
cd hipparchus
mvn install
Once the Orekit (and possibly Hipparchus) development version has been installed locally using
the previous commands, you can delete the cloned folder if you want. You can then
attempt again the mvn command at Rugged level, this time it should succeed as the
necessary artifact is now locally available.
If you need to configure a proxy server for dependencies retrieval, see
the [Guide to using proxies](http://maven.apache.org/guides/mini/guide-proxies.html)
page at the maven site.
If you already use maven for your own projects (or simply eclipse, see
below), you may want to install rugged in your local maven repository. This is done
with the following command:
mvn install
For other commands like generating the site, or generating the
[checkstyle](http://checkstyle.sourceforge.net/ "Checkstyle homepage"),
[spotbugs](https://spotbugs.github.io/ "Spotbugs homepage") or
[jacoco](http://www.eclemma.org/jacoco/ "Jacoco homepage") reports, see the maven
plugins documentation at [maven site](http://maven.apache.org/plugins/index.html "Maven plugins homepage").
## Building with Eclipse
[Eclipse](http://www.eclipse.org/ "Eclipse homepage") is a very rich Integrated Development
Environment (IDE). It is a huge product and not a simple build tool.
For systems not providing eclipse as a package, it can be downloaded from its
site at the [Eclipse Foundation](http://www.eclipse.org/downloads/).
The simplest way to use Rugged with Eclipse is to follow these steps:
* using your operating system tools, unpack the source distribution directly
inside your Eclipse workspace. The source distribution file name has a name
of the form rugged-x.y-sources.zip where x.y is the version number. Unpacking
this zip file should create a folder of the form rugged-x.y in your workspace.
* using Eclipse, import the project by selecting in the top level "File" menu
the entry "Import..."
* in the wizard that should appear, select "Maven -> Existing Maven Projects"
* select the folder you just created in your workspace by unpacking the
source distribution. The "pom.xml" file describing the project will be
automatically selected. Click finish
The Rugged library should be configured automatically, including the dependency
to the underlying Orekit library.
Now you have an rugged-x.y project in you workspace, and you can create your
own application projects that will depend on the Rugged project.
You can also check everything works correctly by running the junit tests.
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Configuration
As Rugged relied on [Orekit](https://www.orekit.org/ "Orekit homepage") for the frames computation, Orekit
must be properly initialized for Rugged to run.
The simplest way to configure is to first retrieve the example `orekit-data-master.zip`
file from Rugged download page, available in the [Rugged project download page](https://www.orekit.org/rugged/download.html)
(Get the physical data)
and to unzip it anywhere you want, rename the `orekit-data-master` folder that will be created
into `orekit-data` and add the following lines at the start of your program (before Orekit is called for the
first time):
File orekitData = new File("/path/to/the/folder/orekit-data");
DataContext.getDefault().getDataProvidersManager().addProvider(new DirectoryCrawler(orekitData));
This is sufficient to start working.
Note that some of the data in the orekit-data-master folder needs to be updated,
typically the UTC-TAI history file, which is updated about once every 18 months
by IERS, and the files in the Earth-Orientation-Parameters folder which are updated
regularly by IERS. The update frequency depends on which file you use.
The data provided in the example archive from Rugged site are example only and are
not kept up to date. The real operational data are live, and remain under the
responsibility of the user.
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Contacts
## Forum
Most discussions should occur on the public forums [https://forum.orekit.org/](https://forum.orekit.org/).
The main categories are:
| category | URL |
|---------------|----------------------------------------------------------------------------------------------------|
| announces | [https://forum.orekit.org/c/rugged-announcements](https://forum.orekit.org/c/rugged-announcements) |
| users | [https://forum.orekit.org/c/rugged-usage](https://forum.orekit.org/c/rugged-usage) |
| developers | [https://forum.orekit.org/c/rugged-development](https://forum.orekit.org/c/rugged-development) |
## Technical contact
If for some reason you cannot use the public forums, you can reach the CS
GROUP Rugged team for any question (either technically
oriented or administrative) at the following email address:
[rugged@csgroup.eu](mailto:rugged@csgroup.eu)
## Administrative contact
If you want to discuss with the space division staff at CS GROUP,
please use the following address:
CS GROUP
Space Business Unit
Parc de la Plaine - 6 rue Brindejonc des Moulinais
BP 15872
31506 Toulouse Cedex 5
FRANCE
phone: +33 5-61-17-66-66 (ask for Luc Maisonobe or Jonathan Guinet)
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
# Contributing to Ruggged
Rugged is free software, which means you can use the source code as you wish,
without charges, in your applications, and that you can improve it and have
your improvements included in the next mainstream release.
If you are interested in participating in the development effort,
subscribe to the forums (as described in the [Contact page](./contact.html)) and step up to discuss it.
The larger the community is, the better Rugged will be. The main
rule is that everything intended to be included in Rugged core must
be distributed under the Apache License Version 2.0.
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
## Design of the major functions
The top level design describes the various libraries and their interactions. The lowest level
corresponding to the Hipparchus library is not shown here for clarity.
The following sequence and class diagrams show the three most important functions: initialization
of the libraries, direct location and inverse location. The last class diagram is a focus on Digital Elevation Model loading.
### Initialization
The user of the Rugged library is responsible to provide its main program and a mission specific
Digital Elevation Model loader, in the form of a class implementing Rugged TileUpdater interface.
He also creates a LineSensor containing the geometry of the pixels line-of-sights. He then creates
an instance of the top-level Rugged class and provides it the created objects as well as its selection
of options for algorithm, ellipsoid and frame choices.
![initialization class diagram](../images/design/initialization-class-diagram.png)
The Rugged instance will store everything and create the various objects defining the configuration
(creating the algorithm, ellipsoid and frames from the identifiers provided by the user. Using simple
enumerates for frames or ellipsoid allow a simpler interface for regular users who are not space flight
dynamics experts. For expert use, the user can also create these objects directly and pass them to Rugged
if the predefined identifiers do not cover his needs. As shown in the following figure, several line sensors can be
added to a single Rugged instance, this is intended to compute correlation grid, when images coming from
two different sensors are expected to be accurately combined.
![initialization sequence diagram](../images/design/initialization-sequence-diagram.png)
### Direct location
Direct location is called a large number of times by the application, once for each sensor line.
The application only provides image processing related data to the configured Rugged instance, i.e. the
line number, and it expects the geodetic coordinates of the ground points corresponding to each pixels
in the sensor line. The Rugged instance will delegate conversions between frames to an internal
SpacecraftToObservedBody converter, the conversions between Cartesian coordinates and geodetic coordinates
to an internal ExtendedEllipsoid object, and the computation of the intersection with the Digital Elevation
Model to the algorithm that was selected by user at configuration time.
![direct location class diagram](../images/design/direct-location-class-diagram.png)
The pixels independent computation (orbit and attitude interpolation, Earth frame to inertial frame transforms,
transforms composition) are performed only once per date inside the caching combined transform provider set up
at initialization time and the resulting transform is applied for all pixels in the line, thus saving lot of
computing power.
The innermost loop is the correction of each pixel, which is split in the line-of-sight to ellipsoid intersection,
and followed by the Digital Elevation Model intersection. The callback to the mission specific interface to
retrieve DEM raw data is called from the inner loop but is expected to be triggered only infrequently thanks to a
caching feature done at Rugged library level.
![direct location sequence diagram](../images/design/direct-location-sequence-diagram.png)
The following figure describes the algorithm used for tile selection and how the underlying intersection algorithm
(Duvenhage in this example) is called for one tile:
![duvenhage top loop activity diagram](../images/design/duvenhage-top-loop-activity-diagram.png)
The recommended Digital Elevation Model intersection algorithm is the Duvenhage algorithm. The following figure
describes how it is implemented in the Rugged library.
![duvenhage inner recursion activity diagram](../images/design/duvenhage-inner-recursion-activity-diagram.png)
### Inverse location
Inverse location is called a large number of times by the application, typically on a regular grid in some
geographic reference like UTM. The application only provides image processing related data, i.e. the geodetic
coordinates of the ground points and expects the coordinates of the corresponding pixel (both line number of
pixel number). The pixels independent computation (orbit and attitude interpolation, Earth frame to inertial
frame transforms, transforms composition) are performed only once per line and cached across successive calls to
inverse location, thus greatly improving performances.
![inverse location sequence diagram](../images/design/inverse-location-sequence-diagram.png)
The computation is performed in several steps. The line to which the points belong is first searched using a dedicated
solver taking advantage of the first time derivatives automatically included in Orekit transforms. It can therefore set
up a model of the angle between the target point and the mean sensor plane, and therefore compute in only two or three
iterations the exact crossing of this plane, and hence the corresponding line number. Then, the position of this
crossing along the line is searched using a general purpose solver available in Hipparchus. As all coordinates
are already known in spacecraft frame at this stage, no conversions are performed and this solver find the corresponding
pixel very fast. The last two steps correspond to fixing accurately the previous results, which can be important when
the various pixels in the line sensor do not really form an exact line and therefore when the previous computation which
were done using a mean plane do not represent reality. These final fixes are simple to do because instead of providing
simple values as results, the first step in fact provided a Taylor expansion, thus allowing to slightly shift the result
at will.
## Focus point on Digital Elevation Model loading
The Digital Elevation Model is used at a very low level in the Rugged library, but read at a high level in the mission
specific interface library. The following design has been selected in order to allow the lower layer to delegate the
implementation of the loading to the upper layer, and to avoid too many calls. The driving principle is to set up a cache
for DEM tiles, keeping a set of recently used tiles in memory up to a customizable maximum number of tiles, and asking for
new tiles when what is in memory does not cover the region of interest.
![DEM loading class diagram](../images/design/dem-loading-class-diagram.png)
The cache and the tiles themselves are implemented at Rugged library level. The loader is implemented at mission specific
interface level, by implementing the TileUpdater interface, which defines a single updateTile method. When this updateTile
method is called by the cache, one of its argument is an UpdatableTile instance that must be updated. The implementation
must first call once the setGeometry method to set up the global geometry of the tile (reference latitude and longitude,
latitude step size, longitude step size, number of rows and columns in the raster), and then call the setElevation method
for each element of the raster. The loader can therefore avoid to allocate by itself a large array that will in any case
be reallocated by the Tile. The loader only sees interfaces in the API and doesn't know anything about the real specialized
tiles that are used under the hood. Different DEM intersection algorithms can use different tiles implementations without
any change to the mission specific interface. One example of this independence corresponds to the Duvenhage algorithm, has
in addition to the raw elevation grid, the tile will also contain a min/max kd-tree, so there are both a dedicated specialized
tile and a corresponding TileFactory in use when this algorithm is run.
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Digital Elevation Model
## DEM intersection
The page [technical choices](./technical-choices.html) explain how Rugged goes from an on-board pixel
line-of-sight to a ground-based line-of-sight arrival in the vicinity of the ellipsoid entry point. At
this step, we have a 3D line defined near the surface and want to compute where it exactly traverses the
Digital Elevation Model surface. There is no support for this computation at Orekit library level,
everything is done at Rugged library level.
As this part of the algorithm represents an inner loop, it is one that must use fast algorithms. Depending
on the conditions (line-of-sight skimming over the terrain near field of view edges or diving directly in
a nadir view), some algorithms are more suitable than others. This computation is isolated in the smallest
programming unit possible in the Rugged library and an interface is defined with several different
implementations among which user can select.
Five different algorithms are predefined in Rugged:
* a recursive algorithm based on Bernardt Duvenhage's 2009 paper
[Using An Implicit Min/Max KD-Tree for Doing Efficient Terrain Line of Sight Calculations](http://researchspace.csir.co.za/dspace/bitstream/10204/3041/1/Duvenhage_2009.pdf)
* an alternate version of the Duvenhage algorithm using flat-body hypothesis,
* a basic scan algorithm sequentially checking all pixels in the rectangular array defined by Digital Elevation Model entry and exit points,
* an algorithm that ignores the Digital Elevation Model and uses a constant elevation over the ellipsoid.
* a no-operation algorithm that ignores the Digital Elevation Model and uses only the ellipsoid.
It is expected that other algorithms like line-stepping (perhaps using Bresenham line algorithm) will be added afterwards.
The Duvenhage algorithm with full consideration of the ellipsoid shape is the baseline approach for operational
computation. The alternate version of Duvenhage algorithm with flat-body hypothesis does not really save anything
meaningful in terms of computation, so it should only be used for testing purposes. The basic scan algorithm is only
intended as a basic reference that can be used for validation and tests. The no-operation algorithm can be used for
low accuracy fast computation needs without changing the complete data product work-flow.
## DEM loading
As the min/max KD-tree structure is specific to the Duvenhage algorithm, and as the algorithm is hidden behind
a generic interface, the tree remains an implementation detail the user should not see. The min/max KD-tree structure is
therefore built directly at Rugged level, only when the Duvenhage algorithm has been selected to perform location computation.
On the other hand, Rugged is not expected to parsed DEM files, so the algorithm relies on the raw data being passed by the upper
layer. In order to pass these data, a specific callback function is implemented in the mission specific interface layer and
registered to Rugged, which can call it to retrieve parts of the DEM, in the form of small cells. The implicit KD-tree is then
built from leafs to root and cached.
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Design Overview
## Global architecture
Rugged is an intermediate level mission-independent library. It relies on
the [Orekit](https://www.orekit.org/ "Orekit homepage") library and on the [Hipparchus](https://hipparchus.org/ "Hipparchus homepage") library. It is itself
intended to be used from a mission-specific interface by one or more
image processing applications.
![architecture](../images/rugged-architecture.png)
The Java platform provides the runtime environment, the Hipparchus
library provides the mathematical algorithms (3D geometry, root
solvers ...), the Orekit library provides the space flight dynamics
computation (frames transforms, orbits and attitude propagation and
interpolation ...). The Rugged library itself provides the algorithms
dealing with line-of-sight intersection with Digital Elevation Models
in a mission-independent way. Rugged does not parse the DEM models itself,
nor does it performs image processing. Mission-dependent parts (including
Digital Elevation Model parsing or instrument viewing model creation) remain
under the responsibility of Rugged caller, typically using a mission-specific
library used by several image processing applications.
This architecture allows both the image processing application and the mission
specific interface to be as independent as possible from space flight dynamics and
geometry. These parts can therefore be implemented by image processing specialists.
The application itself can even be written in a programming language as C++, there is
no need for the Java language at this level. It is expected that the mission specific
interface is written using the Java language to simplify data exchanges with the lower
layers and avoid complex data conversion. Data conversion is performed only between the
image processing application and the interface layer, and is limited to very few high
level functions with few primitive types (raw arrays for pixels or ground coordinates).
The Rugged library is developed in the Java language and has full access to the Orekit and
Hipparchus libraries. It is designed and developed by space flight dynamics and
geometry specialists, with support from the image processing specialists for the API definition.
## Functional Breakdown
The following table sorts out the various topics between the various layers.
| Topic | Layer | Comment
|----------------------------------|-------------------------|-----------------------------------------------------------------------------
| Sensor to ground mapping | Rugged | Direct location is the base feature provided
| Ground to sensor mapping | Rugged | Inverse location is another base feature provided
| Individual pixels | Rugged |The API supports any number of pixels, defined by their individual line of sight provided by caller
| Optical path | Interface |The folded optical path inside the spacecraft is taken into account by computing an overall transform combining all inside reflections, so each pixel position and line of sight can be computed later on by a single translation and rotation with respect to spacecraft center of mass
| Line time-stamping | Interface/Rugged |The caller must provide a simple time-stamping model (typically linear) that will be applied
|Orbit and attitude interpolation | Orekit |Both simple interpolation from timestamped position samples and full orbit propagation are available, thanks to Orekit streamlined propagator architecture
|CCSDS Orbit/Attitude file parsing | Orekit |This is supported as long as standard CCSDS Orbit Data Message (CCSDS 502.0-B-2) and CCSDS Attitude Data Messages (CCSDS 504.0-B-1) are used
|Custom Orbit/Attitude file parsing| Interface |Custom files can be loaded by mission specific readers, and the list or orbit/attitude states can be provided to Orekit which is able to handle interpolation from these sample data
| Frames transforms | Orekit |Full support to all classical reference inertial and Earth frames is already provided by Orekit (including the legacy EME2000, MOD, TOD, but also the more modern GCRF, ICRF, TIRF or exotic frames like TEME or Veis1950, as well as several versions of ITRF)
| IERS data correction | Orekit |All frame transforms support the full set of IERS Earth Orientation Parameters corrections, including of course the large DUT1 time correction, but also the smaller corrections to older IAU-76/80 or newer IAU-2000/2006 precession nutation models as well as the polar wander. The frames level accuracy is at sub-millimeter level
| Grid-post elevation model | Rugged |Only raster elevation models are supported
|Triangulated Irregular Network elevation model | Not supported |If vector elevation models are needed, they must be converted to raster form in order to be used
| Geoid computation | Orekit |Rugged expects the Digital Elevation Models to be provided with respect to a reference ellipsoid. Orekit can be used to convert a geoid-based DEM to an ellipsoid-based DEM, directly from any gravity field
| Time-dependent deformations | Interface/Rugged |Simple line-of-sight models (typically polynomial) can be used
| Calibration |Image processing or interface|The calibration phase remains at the mission-specific caller level (pixels geometry, clock synchronization …), the caller is required to provide the already calibrated line of sights
| DEM file parsing | Interface |The elevation models are dedicated to the mission and there are several formats (DTED, GeoTIFF, raw data …).Rugged only deals with raw elevation on small latitude/longitude cells
| Atmospheric refraction | Abstract/Rugged |Atmospheric refraction correction is supported with a default multi-layer model provided. Some other models can be provided by the user
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Technical choices
## Earth frames
As Rugged is built on top of [Orekit](https://www.orekit.org/ "Orekit homepage") and [Hipparchus](https://hipparchus.org/ "Hipparchus homepage"), all the flight dynamics and
mathematical computation are delegated to these two libraries and the full accuracy available
is used. This implies for example that when computing frames conversions between the inertial
frame and the Earth frame, the complete set of IERS Earth Orientation Parameters (EOP)
corrections is applied if the IERS files are available. This may lead to results slightly
different from the one produced by some other geometry correction libraries that are limited
to the older equinox-based paradigm (Mean Of Date and True Of Date), apply only DUT1 and pole
wander corrections and ignore the other Earth Orientation Parameters corrections. The expected
difference with such libraries is due to the missing corrections (δΔε and δΔψ for equinox-based
paradigm) to the IAU-1980 precession (Lieske) and nutation (Wahr) models used in the legacy
MOD and TOD frames.
The following figure is a plot of this error, showing the coordinates of three Earth points
along the three canonical X, Y and Z axes, roughly at Earth radius. The plot shows a clear
regular signal with several harmonics, which correspond to the nutation components that were
not in this older model. This error was small in the 80's but is much higher now (as of 2014,
it is of the order of magnitude of 3 meters). The error is steadily increasing.
![precession/nutation error](../images/ignoring-EOP-1996.png)
Note that this error occurs when the initial data for spacecraft position is initially given in
inertial frame and must be converted to Earth frame. This typically occurs in mission analysis
phases as the spacecraft position is computed from orbit propagation. It is however not always
the case in operational systems where the position is not provided by orbit propagation but
rather by on-board GPS system which already work in Earth frame and do know about the full
corrections. In these operational cases, the error is less important as it applies only to the
conversion of the attitude quaternions (which are typically given in inertial frame as they are
often produced by star trackers).
As Rugged delegates computation to Orekit, the full set of corrections (DUT1, pole wander, lod,
δΔε/δΔψ or δx/δy) are automatically loaded and applied. The final accuracy obtained when all EOP
are considered is at sub-millimeter level in position, and the expected difference with libraries
ignoring δΔε and δΔψ is at a few meters level, Rugged being the more accurate one.
These legacy models are very old and not recommended anymore by IERS since 2003. IERS also currently
still provides the correction for these models, but there is no guarantee they will do so
indefinitely, as they are now providing corrections with respect to newer and more accurate models.
The newer frames are based on a non-rotating origin paradigm and on different precession and nutation
models (IAU-2000/2006), which are much more accurate. The corresponding corrections (δx/δy, not to be
confused with the xp/yp pole wander) are smaller because the precession and nutation models are
better than the former ones. The much better accuracy of these new models can be seen doing the same
kind of plot as before, i.e. ignoring temporarily the IERS corrections. The following figure shows the
result.
![precession/nutation error](../images/ignoring-EOP-2010.png)
The remaining error is very small, of the order of magnitude of 2 or 3 centimeters. Rugged is not
limited to the legacy MOD and TOD frames and can use the newer IERS recommended frames as well. From
a user perspective, this is completely unnoticeable as user simply selects an Earth frame as an
existing predefined object by name, and doesn't have to care about the transforms and corrections.
In fact at Rugged level there is not even a notion of precession, nutation or EOP corrections. The
only interfaces used are the inertial and Earth frames names and the date. From these three elements,
Orekit computes all geometrical transform, including both the theoretical motion models and the IERS
corrections, thus greatly leveraging the computation.
One consequence of using newer precession and nutation models is that as shown in previous figure,
even when the EOP corrections are not available yet (typically for near real-time analysis of images),
it is still possible to compute very accurately the geometry of the image.
As a summary, Rugged may give results slightly more accurate than other geometric correction
libraries, and is compatible with both the legacy frames and the newer frames.
## Position and attitude
The global geometry of the image depends on the spacecraft position and attitude. Both are obtained using any
Orekit provided propagators. Thanks to the architecture of the Orekit propagation framework, propagation can
be either a true propagation from an initial state (which is interesting in mission analysis and simulation
use cases) or can be an interpolation from a loaded ephemeris. From the caller point of view, there are no
differences between the two cases, as an ephemeris is a special case of propagator, using interpolation from its
loaded sample. Support for CCSDS-based ephemerides is already provided by Orekit, and it is possible to build
ephemerides from lists of states if a dedicated loader is developed to parse mission-specific files.
When ephemeris interpolation is selected as the underlying propagator, the number of points used for the
interpolation is specified by the user, so simple linear model is possible but higher degree interpolation is
available. The interpolation retains the raw state format, so if an ephemeris contains circular orbital
parameters, interpolation will be done using these parameters whereas if ephemeris contains position and velocity,
interpolation will be done using position and velocity. As velocity is the time derivative of position, in this case
a Hermite interpolation is performed, thus preserving derivatives consistency.
Dedicated algorithms are implemented in Orekit to deal with quaternions interpolation. Direct polynomial
interpolation of the four quaternion components does not work reliably, and even less if only linear interpolation
is performed, even if normalization is used afterwards. The first reason for this bad behaviour is very crude accuracy
of linear only models. The second reason is that despite quaternion Q1 and -Q1 represent the same rotation, interpolating
components between Q1 and Q2 or -Q1 and Q2 leads to completely different rotations, and the quaternions in an ephemeris
will typically have one sign change per orbit at some random point. The third reason is that instead of doing an
interpolation that respect quaternions constraint, the interpolation departs from the constraint first and attempts to
recover afterwards in a normalization step. Orekit uses a method based on Sergeï Tanygin's paper
[Attitude interpolation](https://www.agi.com/resources/whitepapers/attitude-interpolation) with slight
changes to use modified Rodrigues vectors as defined in Malcolm D Shuster's
[A Survey of Attitude Representations](http://www.ladispe.polito.it/corsi/Meccatronica/02JHCOR/2011-12/Slides/Shuster_Pub_1993h_J_Repsurv_scan.pdf),
despite attitude is still represented by quaternions in Orekit (Rodrigues vectors are used only for interpolation).
These changes avoid a singularity at π. Some other refinements have been added to also avoid another singularity at
2π, but these refinements are mostly useful for either spin-stabilized spacecrafts with high rotation rate or for
interpolation over large time spans when the attitude spans over more than a full turn, so they will probably not be
triggered in the context of Earth observation spacecrafts.
The different interpolation scheme is however expected to lead to only very small differences in numerical accuracy
in the traditional cases with respect to simple linear interpolation on quaternion components followed by normalization.
The reason for this unexpected good behaviour is because in traditional image processing applications, the step size
used for the quaternion are often very small. The bad behavior of linear interpolation of quaternion components appears
only for step sizes above one minute, which are seldom used in image processing.
As a summary, Rugged relies on either propagation or interpolation at user choice, and attitude interpolation is much
more sophisticated than linear interpolation of quaternion components, but no differences are expect at this level,
except for simpler development and validation as everything is readily implemented and validated in Orekit.
## Optical path
### Inside spacecraft
At spacecraft level, the optical path is folded due to the various reflections and positions of the sensors with respect
to the spacecraft center of mass. Following this assumption, the path can be virtually unfolded using the laws of optical
geometry and replaced by a straight line in spacecraft vicinity, with virtual pixels locations and lines of sights defined
by simple vectors with respect to the center of mass. As both position and orientation are considered, this implies that
the pixels are not considered exactly co-located with the spacecraft center of mass, the offset is typically of meter order
of magnitude. If for example we consider a 3m long spacecraft with an instrument is on the front (+X), the offset would be
about 1.5m if center of mass were at spacecraft mid-length.
This path unfolding is done once at geometry loading by the interface layer above the Rugged library, using the services
provided by Rugged line-of-sight builder, so all further computation are done with simple straight lines. Of course, if
the spacecraft definition file does not include position informations, only the various reflections are taken into account
and the location of the sensor is co-located with spacecraft center of mass.
The various transformed applied when building the lines-of-sight may be time-dependent to take into account slow variations
like thermo-elastic effects. Their parameters can also be estimated in calibration phases.
### Free space travel
As pixel/ground mapping is computed, all intermediate geometric computation (attitude, orbit, precession, nutation, EOP
corrections, Earth rotation, pole wander) are combined into a couple of accurate Transform instances. These transforms
are then applied a few thousand times to convert every pixels line-of-sight in Earth frame. The reason for this computation
scheduling is that the transform between inertial frame and Earth frame is computing intensive and only depends on date, so
factoring it out of the pixels loop is a huge speed-up. As Orekit provides a way to combine several Transform instances together
first and apply them to positions and directions later, a lot of computation steps can be saved by also including all conversions
up to spacecraft frame.
As observation satellites are about 800km above ground, the light coming from the ground points they look at left Earth about
2.7ms before arriving on the sensors. This implies that the exact position of the ground point must be computed at an earlier
time than the position of the spacecraft. The expected difference can be predicted as the rotation of Earth during the 2.7ms
light travel time, it is about 1.2m at equator, in the East-West direction. This effect is compensated by applying the so-called
light-time correction.
![light-time correction](../images/light-time-correction.png)
The delay is computed for each pixel as the travel time is shorter for pixels looking in the nadir direction than for pixels
looking at the edge of field of view. As Orekit frame transforms automatically include a local Taylor expansion of the transform,
compensating the differential Earth rotation during this 2.7ms delay is done without recomputing the full precession/nutation model,
so the computation savings explained in the paragraphs above are still available when this compensation is applied.
Aberration of light is another phenomenon that must be considered. Aberration of light is the apparent shift in direction of an
incoming light when seen from a sensor that is itself moving. This shift is independent of the motion of the source of the light,
it depends only on the current velocity of the sensor at time of arrival. It is a composition of two velocities, the velocity of
light and the velocity of sensor. This composition can be computed simply in classical mechanics or with a slightly more complex
equation with relativistic effects. As spacecraft velocities are limited, classical mechanics is sufficient for accurate correction.
This effect is a large one and can correspond to up to a 20m shift once projected on ground for classical Earth observing missions.
As shown in next figure, from spacecraft point of view, the light incoming from the ground point seems to come from a fictitious
point “ahead” of the real point.
![aberration of light correction](../images/aberration-of-light-correction.png)
As a side note, aberration of light and light time correction can be linked or considered to be two aspects of a similar phenomenon,
even in classical (non-relativistic) physics. It depends on the frame in which we look at the various elements. If the source is
moving and the observer is at rest (i.e. we do the computation in the observer frame), then there is only light time correction and
aberration of light is zero. If the source is at rest and the observer is moving (i.e. we do the computation in source frame),
then there is only aberration of light (this is how aberration of light was first experimentally identified, in the context of
astronomy, considering the motion of Earth from where astronomers observe stars) and light time correction is zero. In the Rugged
context, both source and observer move with respect to the inertial frame into which we do the correction computation: the source
moves due to Earth rotation, the observer moves due to spacecraft orbit. So in Rugged context, both phenomenoms exist and should be
compensated. Some other systems may consider only one of the two phenomena and produce accurate results, simply by computing the
correction in either Earth or spacecraft frame and considering the motion of the other part as a relative motion combining both Earth
and spacecraft: it is really only a matter of point of view.
Both light-time correction and aberration of light correction are applied in the Rugged library for greater accuracy, but both can be
ignored (independently) at user choice. One use case for ignoring these important correction is for validation purposes and comparison
with other libraries that do not take this correction into account. This use case is by definition restricted to validation phases and
should not apply to operational systems. Another use case for ignoring light-time correction and aberration of light correction occurs
when the effect is explicitly expected to be compensated at a later stage in the image processing chain, most probably using a
posteriori polynomial models. This use case can occur in operational products. It seems however better to compensate these effects early
as they can be computed to full accuracy with a negligible computation overhead.
## Arrival on ellipsoid
Once a pixel line-of-sight is known in Earth frame, computing its intersection with a reference ellipsoid is straightforward using an
instance of OneAxisEllipsoid. The Orekit library computes this intersection as a NormalizedGeodeticPoint instance on the ellipsoid surface.
The line-of-sight is a straight line in the Cartesian 3D space, and once converted to geodetic coordinates (latitude, longitude,
altitude), it is not a straight line anymore. Assuming line-of-sight remains a straight line in this space and can be defined by
computing only two points10 introduces yet another error, which is transverse to line-of-sight and reaches its maximum value roughly
at middle point. This assumption is a flat-body assumption, i.e. it correspond to locally approximating the ellipsoid to its tangential
plane. The error is the sagitta due to the bending of the real line-of-sight in the geodetic space.
![flat-body interpolation error](../images/flat-body-interpolation-error.png)
This error depends on the diving angle of the line-of-sight with respect to local vertical. It is zero for a diving angle of 90 degrees
(i.e. a pure nadir line-of-sight) and increases as the diving angle decreases. It can reach tremendous values (hundreds of meters or
more) for almost tangential observations. The previous figure shows the amplitude of the error as a function of both the diving angle and
the azimuth of the observation. It was computed for a ground point at intermediate latitude (about 54 degrees North, in Poland), and using
the two base points for the line-of-sight segment at 8000 meters altitude and -400 meters altitude.
The Rugged library fully computes the shape of the line-of-sight throughout its traversal of the Digital Elevation Model when the Duvenhage
algorithm (see next section) is used for DEM intersection. For testing purposes, another version of the algorithm assuming flat-body
hypothesis is also available (i.e. it consider the line-of-sight is a straight line in latitude/longitude/altitude coordinates) but its use
is not recommended. The computing overhead due to properly using ellipsoid shape is of the order of magnitude of 3%, so ignoring this on the
sake of performances is irrelevant.
## Errors compensation summary
The following table summarizes the error compensations performed in the Rugged library which are not present in some other geometry correction libraries:
| origin | amplitude | location | comment
|------------------------------------------------------------|-----------------------|-------------------------|:------------------------|
| δΔε and δΔψ corrections for precession and nutation models | > 3m | horizontal shift |up-to-date precession and nutation models are also available, the error is much smaller if positions are already in Earth frame and only attitude is converted
| quaternion interpolation | negligible | line-of-sight direction |the effect is important for step sizes above 1 minute
| instrument position | 1.5m | along track |coupled with attitude
| light time correction | 1.2m | East-West |pixel-dependent, can be switched off if compensated elsewhere in the processing chain
| aberration of light | 20m | along track |depends on spacecraft velocity, can be switched off if compensated elsewhere in the processing chain
| flat-body | 0.8m | across line-of-sight |error increases a lot for large fields of view, can be switched off, but this is not recommended
| atmospheric refraction | < 2m | horizontal shift |for multi-layer atmospheric model
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Downloads
<h2>Development Library version</h2>
The development version of the Rugged library is always available to
download from our version control system. We use [Git](http://git-scm.com/ "Git homepage")
as our SCM. The anonymous read access to our Git repository allows users who
need the latest features and the latest bug fixes to get them even before an
official release.
The Git repository can be cloned using the following command, which can
be easily adapted if you are using one of the numerous Git graphical
user interface available or if Git is supported by you integrated
development environment:
git clone -b develop https://gitlab.orekit.org/orekit/rugged.git
<h2>Released Library versions</h2>
Rugged is provided both in several packaging systems. You can pick up
the one that better suits your needs. Source packages are the most complete
ones since the other packages (binary jars, javadoc jars and even the bulk
of this site) are created from these sources.
Rugged is also available in maven central repository,
with groupID org.orekit and artifactId rugged so maven
internal mechanism will download automatically all artifacts and dependencies
as required.
#set ( $versions = {"3.0": "2022-07-05", "2.2": "2020-07-31", "2.1": "2019-03-14", "2.0": "2017-12-19", "1.0": "2016-02-10"} )
#foreach( $version in $versions.entrySet() )
| package | link |
|----------|---------------------------------------------------------------------------------------------------------------------------------------|
| source | [rugged-${version.key}-sources.jar](https://search.maven.org/remotecontent?filepath=org/orekit/rugged/${version.key}/rugged-${version.key}-sources.jar) |
| binary | [rugged-${version.key}.jar](https://search.maven.org/remotecontent?filepath=org/orekit/rugged/${version.key}/rugged-${version.key}.jar) |
| javadoc | [rugged-${version.key}-javadoc.jar](https://search.maven.org/remotecontent?filepath=org/orekit/rugged/${version.key}/rugged-${version.key}-javadoc.jar) |
version ${version.key} downloads (release date: ${version.value})
#end
<h2>Data</h2>
For convenience, a zip archive containing some configuration data is available
for download. Similar files can be custom made by users with updated data.
Configuring data loading is explained in the configuration page. For a start,
the simplest configuration is to download the
[orekit-data-master.zip](https://gitlab.orekit.org/orekit/orekit-data/-/archive/master/orekit-data-master.zip)
file from the forge, to unzip it anywhere you want, rename the `orekit-data-master` folder that will be created
into `orekit-data` and add the following lines at the start of your program:
File orekitData = new File("/path/to/the/folder/orekit-data");
DataProvidersManager manager = DataContext.getDefault().getDataProvidersManager();
manager.addProvider(new DirectoryCrawler(orekitData));
This file contains the following data sets. Note that the data is updated only
from time to time, so users must check by themselves they cover the time range
needed for their computation.
* leap seconds data,
* IERS Earth orientation parameters from 1973 (both IAU-1980 and IAU-2000),
* Marshall Solar Activity Future Estimation from 1999,
* JPL DE 430 planetary ephemerides from 1990 to 2069,
* Eigen 06S gravity field,
* FES 2004 ocean tides model.
There are no guarantees that this file will be available indefinitely or that its
content will be updated. It should be considered as a simple configuration example.
Users are encouraged to set up their own configuration data.
The file is available by following the
[download](https://gitlab.orekit.org/orekit/orekit-data/-/archive/master/orekit-data-master.zip)
link in the project dedicated to Orekit Data in the forge.
[Top of the page](#top)
<!--- Copyright 2013-2022 CS GROUP
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<a name="top"></a>
# Frequently Asked Questions (FAQ)
## References
### Has Rugged already been used?
Yes, it has been used in successful operational missions.
Rugged is used operationally in the Image Processing Facility
of the Sentinel 2 European Space Agency (ESA) mission, which was launched in June 2015.
Rugged is used in the frame of ESA Scientific Exploitation of Operational Missions (SEOM),
to calculate topographic shadow masks for Sentinel 2 products.
Rugged has been used to validate Airbus Defence and Space (ADS) geolocation library.
Rugged has been used as a Research Library by the French Space Agency (CNES) for
refinement studies for VHR push broom sensors (Pleiades).
### Is Rugged validated?
Yes, Rugged has been validated, by comparison with other image
processing systems.
Note that as Rugged takes into account some effects that may not be considered
by other systems, validation implies careful configuration and analysis of
discrepancies. Some differences come from missing correction in other systems,
like the Δδψ and Δδε precession/nutation correction parameters, or the light time
correction, or the aberration of light correction, or the non-straight line nature
of line-of-sight in geodetic space ... These differences are mostly dealt with
by disabling Rugged correction to match the other systems (only for test purposes,
of course, the corrections should be enabled for operational use!). Some differences
come from different models like precession and nutation compliant to latest IERS
conventions, or different Earth frames. These differences are mostly dealt with by
configuring Rugged to use the same legacy models (these legacy models like for example
TOD and MOD frames are available for consistency with existing systems).
## Installation
### What are the dependencies for Rugged?
Rugged relies on the [Orekit](https://www.orekit.org/ "Orekit homepage") space flight dynamics library and on
[Hipparchus](https://hipparchus.org/ "Hipparchus homepage") mathematical libraries. Both libraries are free
software libraries distributed under the terms of the Apache Software
License version 2.0.
## Runtime errors
### I get an error "no IERS UTC-TAI history data loaded" (or something similar in another language). What does it mean?
This error is probably *the* most frequent one, or at least it's the first one new users encounter.
Rugged relies on the Orekit library to perform all space flight related computation (typically
frames transforms). This library in turn needs some external data to be loaded in order to run.
This includes UTC-TAI history for leap seconds handling, Earth Orientation Parameters for
transforms to and from Earth fixed frames, or planetary ephemerides for Sun direction, for example.
The error message "no IERS UTC-TAI history data loaded" means the UTC-TAI history file which is used for leap
seconds management was not found. As leap seconds are used each time a UTC date is used, this message is
often seen very early and is the first one unsuspecting users experience. It often means the user forgot
to configure Orekit to load data. Orekit supports by default either the IERS UTC-TAI.history file or the
USNO tai-utc.dat file. If either file is found in the Orekit configuration, it will be automatically loaded
and the message should not appear.
Configuring data loading is explained in the configuration page. For a start, the simplest configuration
is to download the [orekit-data-master.zip](https://gitlab.orekit.org/orekit/orekit-data/-/archive/master/orekit-data-master.zip)
file from the forge, to unzip it anywhere you want, rename the `orekit-data-master` folder that will be created
into `orekit-data` and add the following lines at the start of your program:
File orekitData = new File("/path/to/the/folder/orekit-data");
DataProvidersManager manager = DataContext.getDefault().getDataProvidersManager();
manager.addProvider(new DirectoryCrawler(orekitData));
Using a folder allows one to change the data in it after the initial download, e.g., adding new EOP files as they
are published by IERS. Updating the content of the orekit-data remains the responsibility of the user.
[Top of the page](#top)