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 750 additions and 309 deletions
/* Copyright 2013-2016 CS Systèmes d'Information
* Licensed to CS Systèmes d'Information (CS) under one or more
/* 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
......@@ -16,12 +16,12 @@
*/
package org.orekit.rugged.utils;
import org.hipparchus.util.FastMath;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.orekit.errors.OrekitException;
import org.hipparchus.util.FastMath;
import org.orekit.frames.Frame;
import org.orekit.frames.Transform;
import org.orekit.rugged.errors.DumpManager;
......@@ -37,6 +37,7 @@ import org.orekit.utils.TimeStampedPVCoordinates;
/** Provider for observation transforms.
* @author Luc Maisonobe
* @author Guylaine Prat
*/
public class SpacecraftToObservedBody implements Serializable {
......@@ -84,9 +85,6 @@ public class SpacecraftToObservedBody implements Serializable {
* @param quaternions satellite quaternions
* @param aInterpolationNumber number of points to use for attitude interpolation
* @param aFilter filter for derivatives from the sample to use in attitude interpolation
* @exception RuggedException if [{@code minDate}, {@code maxDate}] search time span overshoots
* position or attitude samples by more than {@code overshootTolerance}
* ,
*/
public SpacecraftToObservedBody(final Frame inertialFrame, final Frame bodyFrame,
final AbsoluteDate minDate, final AbsoluteDate maxDate, final double tStep,
......@@ -94,92 +92,86 @@ public class SpacecraftToObservedBody implements Serializable {
final List<TimeStampedPVCoordinates> positionsVelocities, final int pvInterpolationNumber,
final CartesianDerivativesFilter pvFilter,
final List<TimeStampedAngularCoordinates> quaternions, final int aInterpolationNumber,
final AngularDerivativesFilter aFilter)
throws RuggedException {
try {
this.inertialFrame = inertialFrame;
this.bodyFrame = bodyFrame;
this.minDate = minDate;
this.maxDate = maxDate;
this.overshootTolerance = overshootTolerance;
// safety checks
final AbsoluteDate minPVDate = positionsVelocities.get(0).getDate();
final AbsoluteDate maxPVDate = positionsVelocities.get(positionsVelocities.size() - 1).getDate();
if (minPVDate.durationFrom(minDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, minDate, minPVDate, maxPVDate);
}
if (maxDate.durationFrom(maxDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, maxDate, minPVDate, maxPVDate);
}
final AngularDerivativesFilter aFilter) {
final AbsoluteDate minQDate = quaternions.get(0).getDate();
final AbsoluteDate maxQDate = quaternions.get(quaternions.size() - 1).getDate();
if (minQDate.durationFrom(minDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, minDate, minQDate, maxQDate);
}
if (maxDate.durationFrom(maxQDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, maxDate, minQDate, maxQDate);
}
this.inertialFrame = inertialFrame;
this.bodyFrame = bodyFrame;
this.minDate = minDate;
this.maxDate = maxDate;
this.overshootTolerance = overshootTolerance;
// set up the cache for position-velocities
final TimeStampedCache<TimeStampedPVCoordinates> pvCache =
new ImmutableTimeStampedCache<TimeStampedPVCoordinates>(pvInterpolationNumber, positionsVelocities);
// set up the cache for attitudes
final TimeStampedCache<TimeStampedAngularCoordinates> aCache =
new ImmutableTimeStampedCache<TimeStampedAngularCoordinates>(aInterpolationNumber, quaternions);
final int n = (int) FastMath.ceil(maxDate.durationFrom(minDate) / tStep);
this.tStep = tStep;
this.bodyToInertial = new ArrayList<Transform>(n);
this.inertialToBody = new ArrayList<Transform>(n);
this.scToInertial = new ArrayList<Transform>(n);
for (AbsoluteDate date = minDate; bodyToInertial.size() < n; date = date.shiftedBy(tStep)) {
// interpolate position-velocity, allowing slight extrapolation near the boundaries
final AbsoluteDate pvInterpolationDate;
if (date.compareTo(pvCache.getEarliest().getDate()) < 0) {
pvInterpolationDate = pvCache.getEarliest().getDate();
} else if (date.compareTo(pvCache.getLatest().getDate()) > 0) {
pvInterpolationDate = pvCache.getLatest().getDate();
} else {
pvInterpolationDate = date;
}
final TimeStampedPVCoordinates interpolatedPV =
TimeStampedPVCoordinates.interpolate(pvInterpolationDate, pvFilter,
pvCache.getNeighbors(pvInterpolationDate));
final TimeStampedPVCoordinates pv = interpolatedPV.shiftedBy(date.durationFrom(pvInterpolationDate));
// interpolate attitude, allowing slight extrapolation near the boundaries
final AbsoluteDate aInterpolationDate;
if (date.compareTo(aCache.getEarliest().getDate()) < 0) {
aInterpolationDate = aCache.getEarliest().getDate();
} else if (date.compareTo(aCache.getLatest().getDate()) > 0) {
aInterpolationDate = aCache.getLatest().getDate();
} else {
aInterpolationDate = date;
}
final TimeStampedAngularCoordinates interpolatedQuaternion =
TimeStampedAngularCoordinates.interpolate(aInterpolationDate, aFilter,
aCache.getNeighbors(aInterpolationDate));
final TimeStampedAngularCoordinates quaternion = interpolatedQuaternion.shiftedBy(date.durationFrom(aInterpolationDate));
// store transform from spacecraft frame to inertial frame
scToInertial.add(new Transform(date,
new Transform(date, quaternion.revert()),
new Transform(date, pv)));
// store transform from body frame to inertial frame
final Transform b2i = bodyFrame.getTransformTo(inertialFrame, date);
bodyToInertial.add(b2i);
inertialToBody.add(b2i.getInverse());
// safety checks
final AbsoluteDate minPVDate = positionsVelocities.get(0).getDate();
final AbsoluteDate maxPVDate = positionsVelocities.get(positionsVelocities.size() - 1).getDate();
if (minPVDate.durationFrom(minDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, minDate, minPVDate, maxPVDate);
}
if (maxDate.durationFrom(maxPVDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, maxDate, minPVDate, maxPVDate);
}
final AbsoluteDate minQDate = quaternions.get(0).getDate();
final AbsoluteDate maxQDate = quaternions.get(quaternions.size() - 1).getDate();
if (minQDate.durationFrom(minDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, minDate, minQDate, maxQDate);
}
if (maxDate.durationFrom(maxQDate) > overshootTolerance) {
throw new RuggedException(RuggedMessages.OUT_OF_TIME_RANGE, maxDate, minQDate, maxQDate);
}
// set up the cache for position-velocities
final TimeStampedCache<TimeStampedPVCoordinates> pvCache =
new ImmutableTimeStampedCache<>(pvInterpolationNumber, positionsVelocities);
// set up the cache for attitudes
final TimeStampedCache<TimeStampedAngularCoordinates> aCache =
new ImmutableTimeStampedCache<>(aInterpolationNumber, quaternions);
final int n = (int) FastMath.ceil(maxDate.durationFrom(minDate) / tStep);
this.tStep = tStep;
this.bodyToInertial = new ArrayList<>(n);
this.inertialToBody = new ArrayList<>(n);
this.scToInertial = new ArrayList<>(n);
for (AbsoluteDate date = minDate; bodyToInertial.size() < n; date = date.shiftedBy(tStep)) {
// interpolate position-velocity, allowing slight extrapolation near the boundaries
final AbsoluteDate pvInterpolationDate;
if (date.compareTo(pvCache.getEarliest().getDate()) < 0) {
pvInterpolationDate = pvCache.getEarliest().getDate();
} else if (date.compareTo(pvCache.getLatest().getDate()) > 0) {
pvInterpolationDate = pvCache.getLatest().getDate();
} else {
pvInterpolationDate = date;
}
final TimeStampedPVCoordinates interpolatedPV =
TimeStampedPVCoordinates.interpolate(pvInterpolationDate, pvFilter,
pvCache.getNeighbors(pvInterpolationDate));
final TimeStampedPVCoordinates pv = interpolatedPV.shiftedBy(date.durationFrom(pvInterpolationDate));
// interpolate attitude, allowing slight extrapolation near the boundaries
final AbsoluteDate aInterpolationDate;
if (date.compareTo(aCache.getEarliest().getDate()) < 0) {
aInterpolationDate = aCache.getEarliest().getDate();
} else if (date.compareTo(aCache.getLatest().getDate()) > 0) {
aInterpolationDate = aCache.getLatest().getDate();
} else {
aInterpolationDate = date;
}
final TimeStampedAngularCoordinates interpolatedQuaternion =
TimeStampedAngularCoordinates.interpolate(aInterpolationDate, aFilter,
aCache.getNeighbors(aInterpolationDate).collect(Collectors.toList()));
final TimeStampedAngularCoordinates quaternion = interpolatedQuaternion.shiftedBy(date.durationFrom(aInterpolationDate));
// store transform from spacecraft frame to inertial frame
scToInertial.add(new Transform(date,
new Transform(date, quaternion.revert()),
new Transform(date, pv)));
// store transform from body frame to inertial frame
final Transform b2i = bodyFrame.getTransformTo(inertialFrame, date);
bodyToInertial.add(b2i);
inertialToBody.add(b2i.getInverse());
} catch (OrekitException oe) {
throw new RuggedException(oe, oe.getSpecifier(), oe.getParts());
}
}
......@@ -208,7 +200,7 @@ public class SpacecraftToObservedBody implements Serializable {
this.bodyToInertial = bodyToInertial;
this.scToInertial = scToInertial;
this.inertialToBody = new ArrayList<Transform>(bodyToInertial.size());
this.inertialToBody = new ArrayList<>(bodyToInertial.size());
for (final Transform b2i : bodyToInertial) {
inertialToBody.add(b2i.getInverse());
}
......@@ -260,30 +252,24 @@ public class SpacecraftToObservedBody implements Serializable {
/** Get transform from spacecraft to inertial frame.
* @param date date of the transform
* @return transform from spacecraft to inertial frame
* @exception RuggedException if spacecraft position or attitude cannot be computed at date
*/
public Transform getScToInertial(final AbsoluteDate date)
throws RuggedException {
public Transform getScToInertial(final AbsoluteDate date) {
return interpolate(date, scToInertial);
}
/** Get transform from inertial frame to observed body frame.
* @param date date of the transform
* @return transform from inertial frame to observed body frame
* @exception RuggedException if frames cannot be computed at date
*/
public Transform getInertialToBody(final AbsoluteDate date)
throws RuggedException {
public Transform getInertialToBody(final AbsoluteDate date) {
return interpolate(date, inertialToBody);
}
/** Get transform from observed body frame to inertial frame.
* @param date date of the transform
* @return transform from observed body frame to inertial frame
* @exception RuggedException if frames cannot be computed at date
*/
public Transform getBodyToInertial(final AbsoluteDate date)
throws RuggedException {
public Transform getBodyToInertial(final AbsoluteDate date) {
return interpolate(date, bodyToInertial);
}
......@@ -291,10 +277,8 @@ public class SpacecraftToObservedBody implements Serializable {
* @param date date of the transform
* @param list transforms list to interpolate from
* @return interpolated transform
* @exception RuggedException if frames cannot be computed at date
*/
private Transform interpolate(final AbsoluteDate date, final List<Transform> list)
throws RuggedException {
private Transform interpolate(final AbsoluteDate date, final List<Transform> list) {
// check date range
if (!isInRange(date)) {
......@@ -316,8 +300,8 @@ public class SpacecraftToObservedBody implements Serializable {
* @return true if date is in the supported range
*/
public boolean isInRange(final AbsoluteDate date) {
return (minDate.durationFrom(date) <= overshootTolerance) &&
(date.durationFrom(maxDate) <= overshootTolerance);
return minDate.durationFrom(date) <= overshootTolerance &&
date.durationFrom(maxDate) <= overshootTolerance;
}
}
/* 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, contact maintenance at {0}
INTERNAL_ERROR = Interner Fehler, wenden Sie sich bitte an die Software-Wartung, Adresse {0}
# 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)
......@@ -46,9 +46,6 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = der Rahmen {0} passt nicht zum Rahmen {
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = die Angabe ist nicht das Backup der Interpolation
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
......@@ -67,12 +64,15 @@ 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>
......@@ -81,3 +81,24 @@ 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)
......@@ -46,9 +46,6 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = frame {0} does not match frame {1} from
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = data is not an interpolator dump
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = number of estimated parameters mismatch, expected {0} got {1}
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = debug dump is already active for this thread
......@@ -67,6 +64,9 @@ LIGHT_TIME_CORRECTION_REDEFINED = light time correction redefined, line {0}, fil
# 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}
......@@ -81,3 +81,24 @@ 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, contact maintenance at {0}
INTERNAL_ERROR = error interno, contacte al soporte técnico en {0}
# 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)
......@@ -8,7 +8,7 @@ OUT_OF_TILE_INDICES = no hay datos en los índices [{0}, {1}], la faceta sólo c
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 = <MISSING TRANSLATION>
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
......@@ -46,38 +46,59 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = el sistema de referencia {0} no corresp
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = los datos no están en el volcado de datos del interpolador
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
UNKNOWN_TILE = faceta {0} desconocida, línea {1}, fichero {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = <MISSING TRANSLATION>
NO_PARAMETERS_SELECTED = no se ha seleccionado ningún parámetro que estimar
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = <MISSING TRANSLATION>
NO_REFERENCE_MAPPINGS = no hay mapeados de referencia para estimar los parámetros
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = <MISSING TRANSLATION>
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
......@@ -46,9 +46,6 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = le repère {0} ne correspond pas au rep
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = les données ne correspondent pas à une sauvegarde d''interpolateur
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = incohérence du nombre de paramètres estimés, {0} attendus, {1} renseignés
# 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
......@@ -67,6 +64,9 @@ LIGHT_TIME_CORRECTION_REDEFINED = correction de la durée lumière redéfinie li
# 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}
......@@ -81,3 +81,24 @@ NO_REFERENCE_MAPPINGS = aucune projection de référence pour l''estimation des
# 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, contact maintenance at {0}
INTERNAL_ERROR = erro interno, contacte co soporte técnico no {0}
# 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)
......@@ -46,9 +46,6 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = o sistema de referencia {0} non corresp
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = os datos non están no baleirado de datos do interpolador
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
......@@ -67,6 +64,9 @@ 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>
......@@ -81,3 +81,24 @@ 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>
......@@ -2,13 +2,13 @@
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}] inclus
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 les longitudes de {4} à {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 = <MISSING TRANSLATION>
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
......@@ -35,10 +35,10 @@ LINE_OF_SIGHT_NEVER_CROSSES_LATITUDE = la linea di visibilità non attraversa ma
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 la altitudine {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 Suolo dietro il satellite!
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
......@@ -46,38 +46,59 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = il riferimento {0} non corrisponde al r
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = i dati non corrispondono a un salvatagggio d''interpolatore
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
DEBUG_DUMP_NOT_ACTIVE = dump di debug non attivo per questo thread
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = <MISSING TRANSLATION>
CANNOT_PARSE_LINE = impossibile analizzare la linea {0}, file{1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
TILE_ALREADY_DEFINED = quadrante {0} già definito, linea {1}, file {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = <MISSING TRANSLATION>
UNKNOWN_TILE = quadrante {0} sconosciuto, linea {1}, file {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = <MISSING TRANSLATION>
NO_PARAMETERS_SELECTED = nessun parametro è stato selezionato per essere stimato
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = <MISSING TRANSLATION>
NO_REFERENCE_MAPPINGS = nessun mapping di riferimento per la stima dei parametri
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = <MISSING TRANSLATION>
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, contact maintenance at {0}
INTERNAL_ERROR = intern feil. Kontakt vedlikeholdsansvarlig {0}
# 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)
......@@ -8,7 +8,7 @@ OUT_OF_TILE_INDICES = ingen data funnet på [{0}, {1}], flisen dekker kun fra [0
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 = <MISSING TRANSLATION>
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
......@@ -46,38 +46,60 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = rammen {0} stemmer ikke med rammen {1}
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = dataen er ikke en interpolar-dump
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
DEBUG_DUMP_NOT_ACTIVE = debug dump er ikke aktiv for denne tråden
# cannot parse line {0}, file {1}: {2}
CANNOT_PARSE_LINE = <MISSING TRANSLATION>
CANNOT_PARSE_LINE = kan ikke lese linje {0}, fil {1}: {2}
# light time correction redefined, line {0}, file {1}: {2}
LIGHT_TIME_CORRECTION_REDEFINED = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
TILE_ALREADY_DEFINED = flis {0} er allerede definert, linje {1}, fil {2}: {3}
# unknown tile {0}, line {1}, file {2}: {3}
UNKNOWN_TILE = <MISSING TRANSLATION>
UNKNOWN_TILE = ukjent flis {0}, linje {1}, fil {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = <MISSING TRANSLATION>
NO_PARAMETERS_SELECTED = ingen parametere har blitt valgt til anslaget
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = <MISSING TRANSLATION>
NO_REFERENCE_MAPPINGS = ingen korrespondansereferanse for parameteranslaget
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = <MISSING TRANSLATION>
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, contact maintenance at {0}
INTERNAL_ERROR = eroare internă, contactați echipa de întrținere la {0}
# 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)
......@@ -8,7 +8,7 @@ OUT_OF_TILE_INDICES = date inexistente pentru indicii [{0}, {1}], regiunea ofer
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 = <MISSING TRANSLATION>
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
......@@ -46,38 +46,60 @@ FRAMES_MISMATCH_WITH_INTERPOLATOR_DUMP = sistemul de coordonate {0} nu se potriv
# data is not an interpolator dump
NOT_INTERPOLATOR_DUMP_DATA = datele nu reprezintă o copie de siguranță a interpolatorului
# number of estimated parameters mismatch, expected {0} got {1}
ESTIMATED_PARAMETERS_NUMBER_MISMATCH = <MISSING TRANSLATION>
# debug dump is already active for this thread
DEBUG_DUMP_ALREADY_ACTIVE = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
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 = <MISSING TRANSLATION>
UNKNOWN_TILE = titlul {0} necunoscut la linia {1} din fișierul {2}: {3}
# no parameters have been selected for estimation
NO_PARAMETERS_SELECTED = <MISSING TRANSLATION>
NO_PARAMETERS_SELECTED = niciun parametru nu a fost selectat pentru estimare
# no reference mappings for parameters estimation
NO_REFERENCE_MAPPINGS = <MISSING TRANSLATION>
NO_REFERENCE_MAPPINGS = nicio proiecție a referinței pentru estimarea parametrilor
# a different parameter with name {0} already exists
DUPLICATED_PARAMETER_NAME = <MISSING TRANSLATION>
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-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,8 +12,9 @@
limitations under the License.
-->
Building Rugged
===============
<a name="top"></a>
# Building Rugged
Rugged can be built from source using several different tools.
......@@ -21,10 +22,9 @@ 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
---------------------
## Building with Maven 3
[Maven](http://maven.apache.org/) is a build tool that goes far beyond
[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
......@@ -35,8 +35,9 @@ For systems not providing maven as a package, maven can be
Apache Software Foundation. This site also explains the
installation procedure.
As with all maven enabled projects, building Rugged is straightforward, simply
run:
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
......@@ -46,26 +47,67 @@ 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 repository. This is done
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/),
[findbugs](http://findbugs.sourceforge.net/) or
[jacoco](http://www.eclemma.org/jacoco/) reports, see the maven
plugins documentation at [maven site](http://maven.apache.org/plugins/index.html).
[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
---------------------
## Building with Eclipse
[Eclipse](http://www.eclipse.org/) is a very rich Integrated Development
[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
......@@ -73,23 +115,27 @@ site at the [Eclipse Foundation](http://www.eclipse.org/downloads/).
The simplest way to use Rugged with Eclipse is to follow these steps:
* unpack the distribution inside your Eclipse workspace
* 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
* create a new java project from existing sources and direct Eclipse to the
directory where you unpacked Rugged
The Rugged library should be configured automatically, including the dependency
to the underlying Orekit library.
* set the source folders to
* src/main/java
* src/test/java
* src/main/resources
* src/test/resources
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.
in the source tab of the Configure Build Path dialog
You can also check everything works correctly by running the junit tests.
* set the external libraries to JRE system library (provided by Eclipse),
Junit 4.x (provided by Eclipse), Hipparchus (available at
Hipparchus project
[downloads page](https://www.hipparchus.org/downloads.html),
and Orekit (available at Orekit
[downloads page](https://www.orekit.org/forge/projects/orekit/files)
in the libraries tab of the Configure Build Path dialog
[Top of the page](#top)
<!--- Copyright 2013-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,31 +12,32 @@
limitations under the License.
-->
Configuration
=============
<a name="top"></a>
As Rugged relied on Orekit for the frames computation, Orekit
must be properly initialized for Rugged to run.
# Configuration
The simplest way to configure is to first retrieve the example orekit-data.zip
file from Orekit [files](https://www.orekit.org/forge/projects/orekit/files) section
and to unzip it in a known fixed location on your computer (let's assume it is on
your home folder, and it creates an orekit-data subfolder there).
As Rugged relied on [Orekit](https://www.orekit.org/ "Orekit homepage") for the frames computation, Orekit
must be properly initialized for Rugged to run.
Then near the start of your main program, and before Orekit is called for the
first time, you will add the following code snippet:
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 home = new File(System.getProperty("user.home"));
File orekitData = new File(home, "orekit-data");
DataProvidersManager.getInstance().addProvider(new DirectoryCrawler(orekitData));
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 folder needs to be updated,
typically the UTC-TAI.history file, which is updated about once every 18 months
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 Orekit site are example only and are
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.
\ No newline at end of file
responsibility of the user.
[Top of the page](#top)
<!--- Copyright 2013-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,44 +12,42 @@
limitations under the License.
-->
Contacts
========
<a name="top"></a>
Mailing lists
-------------
# Contacts
Most discussions should occur on the public mailing lists.
## Forum
| topic | post address | subscribe URL | archive URL |
|---------------|------------------------------|--------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|
| announces | orekit-announces@orekit.org | [https://www.orekit.org/wws/subscribe/orekit-announces](https://www.orekit.org/wws/subscribe/orekit-announces) | [https://www.orekit.org/wws/arc/orekit-announces](https://www.orekit.org/wws/arc/orekit-announces) |
| users | rugged-users@orekit.org | [https://www.orekit.org/wws/subscribe/rugged-users](https://www.orekit.org/wws/subscribe/rugged-users) | [https://www.orekit.org/wws/arc/rugged-users](https://www.orekit.org/wws/arc/rugged-users) |
| developers | rugged-developers@orekit.org | [https://www.orekit.org/wws/subscribe/rugged-developers](https://www.orekit.org/wws/subscribe/rugged-developers) | [https://www.orekit.org/wws/arc/rugged-developers](https://www.orekit.org/wws/arc/rugged-developers) |
Most discussions should occur on the public forums [https://forum.orekit.org/](https://forum.orekit.org/).
The main categories are:
Please register to these mailing lists before attempting to post!
| 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) |
We're preventing unregistered members from posting in order to prevent spam. Thank you.
## Technical contact
Technical contact
-----------------
If for some reason you cannot use the public lists, you can reach the CS
Systèmes d'Information Rugged team for any question (either technically
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:
[orekit@c-s.fr](mailto:orekit@c-s.fr)
[rugged@csgroup.eu](mailto:rugged@csgroup.eu)
Administrative contact
----------------------
## Administrative contact
If you want to discuss with the space division staff at CS Systèmes d'Information,
If you want to discuss with the space division staff at CS GROUP,
please use the following address:
CS Systèmes d'Information
BU E-space & Geoinformation
parc de la plaine - 5 rue Brindejonc des Moulinais
CS GROUP
Space Business Unit
Parc de la Plaine - 6 rue Brindejonc des Moulinais
BP 15872
31506 Toulouse CEDEX 5
31506 Toulouse Cedex 5
FRANCE
phone: +33 5-61-17-66-66 (ask for Luc Maisonobe or Aude Espesset)
fax: +33 5-61-34-84-15
phone: +33 5-61-17-66-66 (ask for Luc Maisonobe or Jonathan Guinet)
[Top of the page](#top)
<!--- Copyright 2013-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,15 +12,14 @@
limitations under the License.
-->
Contributing to Ruggged
=======================
# 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 mailing lists and step up to discuss it. The
larger the community is, the better Rugged will be. The main
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-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,14 +12,15 @@
limitations under the License.
-->
Overview
--------
<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.
of the libraries, direct location and inverse location. The last class diagram is a focus on Digital Elevation Model loading.
### Initialization
......@@ -31,6 +32,7 @@ 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
......@@ -98,8 +100,7 @@ were done using a mean plane do not represent reality. These final fixes are sim
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
----------------------------------------------
## 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
......@@ -119,4 +120,6 @@ be reallocated by the Tile. The loader only sees interfaces in the API and doesn
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.
\ No newline at end of file
tile and a corresponding TileFactory in use when this algorithm is run.
[Top of the page](#top)
<!--- Copyright 2013-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,8 +12,12 @@
limitations under the License.
-->
DEM intersection
------------
<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
......@@ -43,8 +47,7 @@ meaningful in terms of computation, so it should only be used for testing purpos
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
-----------
## 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
......@@ -54,3 +57,5 @@ On the other hand, Rugged is not expected to parsed DEM files, so the algorithm
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-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,11 +12,14 @@
limitations under the License.
-->
Global architecture
-------------------
<a name="top"></a>
# Design Overview
## Global architecture
Rugged is an intermediate level mission-independent library. It relies on
the Orekit library and on the Hipparchus library. It is itself
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.
......@@ -48,8 +51,7 @@ The Rugged library is developed in the Java language and has full access to the
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
--------------------
## Functional Breakdown
The following table sorts out the various topics between the various layers.
......@@ -67,7 +69,10 @@ The following table sorts out the various topics between the various layers.
| 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
| 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-2016 CS Systèmes d'Information
<!--- 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
......@@ -12,10 +12,13 @@
limitations under the License.
-->
Earth frames
------------
<a name="top"></a>
As Rugged is built on top of Orekit and Hipparchus, all the flight dynamics and
# 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)
......@@ -77,8 +80,7 @@ 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
---------------------
## 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
......@@ -103,7 +105,7 @@ components between Q1 and Q2 or -Q1 and Q2 leads to completely different rotatio
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](http://www.agi.com/downloads/resources/white-papers/Attitude-interpolation.pdf) with slight
[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).
......@@ -122,8 +124,8 @@ As a summary, Rugged relies on either propagation or interpolation at user choic
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
------------
## Optical path
### Inside spacecraft
......@@ -198,8 +200,7 @@ when the effect is explicitly expected to be compensated at a later stage in the
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
--------------------
## 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.
......@@ -224,8 +225,7 @@ hypothesis is also available (i.e. it consider the line-of-sight is a straight l
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
---------------------------
## 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:
......@@ -237,3 +237,6 @@ The following table summarizes the error compensations performed in the Rugged l
| 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-2016 CS Systèmes d'Information
<!--- 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.
......@@ -12,14 +12,14 @@
limitations under the License.
-->
Downloads
=========
<a name="top"></a>
Development Library version
---------------------------
# 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/)
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.
......@@ -29,10 +29,9 @@ 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 https://www.orekit.org/git/rugged-main.git
git clone -b develop https://gitlab.orekit.org/orekit/rugged.git
Released Library versions
-------------------------
<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
......@@ -44,44 +43,56 @@ with groupID org.orekit and artifactId rugged so maven
internal mechanism will download automatically all artifacts and dependencies
as required.
| package | link |
|----------|-----------------------------------------------------------------------------------------------------------|
| source | [rugged-1.0-sources.zip](https://www.orekit.org/forge/attachments/download/592/rugged-1.0-sources.zip) |
| binary | [rugged-1.0.jar](https://www.orekit.org/forge/attachments/download/593/rugged-1.0.jar) |
| javadoc | [rugged-1.0-javadoc.jar](https://www.orekit.org/forge/attachments/download/594/rugged-1.0-javadoc.jar) |
version 1.0 downloads (release date: 2016-02-10)
#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})
## Data
#end
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.zip file from the download page, to unzip it anywhere you want, note the
path of the orekit-data folder that will be created and add the following lines at the start of
your program:
<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 = DataProvidersManager.getInstance();
DataProvidersManager manager = DataContext.getDefault().getDataProvidersManager();
manager.addProvider(new DirectoryCrawler(orekitData));
This file contents is:
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 up to end of 2016,
* leap seconds data,
* IERS Earth orientation parameters from 1973 to mid 2016
with predicted date to fall 2016 for some parameters (both IAU-1980 and IAU-2000),
* IERS Earth orientation parameters from 1973 (both IAU-1980 and IAU-2000),
* Marshall Solar Activity Futur Estimation from 1999 to mid 2016,
* Marshall Solar Activity Future Estimation from 1999,
* DE 430 planetary ephemerides from 1990 to 2069,
* 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 this link: [orekit-data.zip](https://www.orekit.org/forge/attachments/download/610/orekit-data.zip).
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)