GridEntry.java
/* Copyright 2002-2024 Thales Alenia Space
* 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.
*/
package org.orekit.models.earth.weather;
import java.util.Map;
import org.hipparchus.util.MathUtils;
/** Grid entry in Global Pressure Temperature models.
* @author Luc Maisonobe
* @since 12.1
*/
class GridEntry {
/** Conversion factor from degrees to mill arcseconds. */
public static final int DEG_TO_MAS = 3600000;
/** Latitude (radian). */
private final double latitude;
/** Latitude key (mas). */
private final int latKey;
/** Longitude (radian). */
private final double longitude;
/** Longitude key (mas). */
private final int lonKey;
/** Undulation. */
private final double undulation;
/** Height correction. */
private final double hS;
/** Seasonal models. */
private Map<SeasonalModelType, SeasonalModel> models;
/** Build an entry from its components.
* @param latitude latitude (radian)
* @param latKey latitude key (mas)
* @param longitude longitude (radian)
* @param lonKey longitude key (mas)
* @param undulation undulation (m)
* @param hS height correction
* @param models seasonal models
*/
GridEntry(final double latitude, final int latKey, final double longitude, final int lonKey,
final double undulation, final double hS, final Map<SeasonalModelType, SeasonalModel> models) {
this.latitude = latitude;
this.latKey = latKey;
this.longitude = longitude;
this.lonKey = lonKey;
this.undulation = undulation;
this.hS = hS;
this.models = models;
}
/** Build a new entry 360° to the East of instance.
* @return new wrapping entry (always same type as instance)
*/
public GridEntry buildWrappedEntry() {
return new GridEntry(latitude, latKey,
longitude + MathUtils.TWO_PI,
lonKey + DEG_TO_MAS * 360,
undulation, hS,
models);
}
/** Get latitude (radian).
* @return latitude (radian)
*/
double getLatitude() {
return latitude;
}
/** Get latitude key (mas).
* @return latitude key (mas)
*/
int getLatKey() {
return latKey;
}
/** Get longitude (radian).
* @return longitude (radian)
*/
double getLongitude() {
return longitude;
}
/** Get longitude key (mas).
* @return longitude key (mas)
*/
int getLonKey() {
return lonKey;
}
/** Get undulation.
* @return undulation
*/
double getUndulation() {
return undulation;
}
/** Get height correction.
* @return height correction
*/
double getHs() {
return hS;
}
/** Get a model.
* @param type model type
* @return model
*/
SeasonalModel getModel(final SeasonalModelType type) {
return models.get(type);
}
}