diff --git a/src/main/java/org/orekit/rugged/api/Rugged.java b/src/main/java/org/orekit/rugged/api/Rugged.java index b4177481b7ab3a5b49f1491f0bdd6c626fb3ec9b..31c30b2f74798b1a955a3242ae3ca97aa39ba4a7 100644 --- a/src/main/java/org/orekit/rugged/api/Rugged.java +++ b/src/main/java/org/orekit/rugged/api/Rugged.java @@ -343,9 +343,9 @@ public class Rugged { algorithm.intersection(ellipsoid, pBody, lBody)); // compute atmosphere deviation. - AtmosphericRefraction atmosphericRefraction = new MultiLayerModel(); + //AtmosphericRefraction atmosphericRefraction = new MultiLayerModel(); // result.getZenith() - long deviation = atmosphericRefraction.getDeviation(pBody, lBody, result.getAltitude()); + //long deviation = atmosphericRefraction.getDeviation(pBody, lBody, result.getAltitude()); } diff --git a/src/main/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModel.java b/src/main/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModel.java index 54a556290e364e7792be4c76c3d591ce931cd96b..50dcb737d42f5776ee2bb4d856f14948337de3b5 100644 --- a/src/main/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModel.java +++ b/src/main/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModel.java @@ -18,11 +18,16 @@ package org.orekit.rugged.atmosphericrefraction; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.util.FastMath; +import org.orekit.bodies.GeodeticPoint; import org.orekit.bodies.OneAxisEllipsoid; import org.orekit.errors.OrekitException; import org.orekit.frames.FramesFactory; import org.orekit.rugged.errors.RuggedException; +import org.orekit.rugged.intersection.IntersectionAlgorithm; +import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTile; +import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTileFactory; import org.orekit.rugged.raster.Tile; +import org.orekit.rugged.raster.TilesCache; import org.orekit.rugged.utils.ExtendedEllipsoid; import org.orekit.rugged.utils.NormalizedGeodeticPoint; import org.orekit.utils.Constants; @@ -45,7 +50,7 @@ public class MultiLayerModel implements AtmosphericRefraction { private static Map<Double, ExtendedEllipsoid> atmosphericEllipsoids; public MultiLayerModel() throws OrekitException { - Map<Double, Double> meanAtmosphericRefractions = new TreeMap(Collections.reverseOrder()); + meanAtmosphericRefractions = new TreeMap(Collections.reverseOrder()); meanAtmosphericRefractions.put(-1000.00000000000, 1.00030600000); meanAtmosphericRefractions.put(0.00000000000, 1.00027800000); meanAtmosphericRefractions.put(1000.00000000000, 1.00025200000); @@ -62,7 +67,7 @@ public class MultiLayerModel implements AtmosphericRefraction { meanAtmosphericRefractions.put(50000.00000000000, 1.00000000000); meanAtmosphericRefractions.put(100000.00000000000, 1.00000000000); - Map<Double, ExtendedEllipsoid> atmosphericEllipsoids = new HashMap<Double, ExtendedEllipsoid>(); + atmosphericEllipsoids = new HashMap<Double, ExtendedEllipsoid>(); for (Double altitude : meanAtmosphericRefractions.keySet()) { OneAxisEllipsoid ellipsoid = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS + altitude, Constants.WGS84_EARTH_FLATTENING, FramesFactory.getITRF(IERSConventions.IERS_2010, true)); @@ -111,6 +116,8 @@ public class MultiLayerModel implements AtmosphericRefraction { previousRefractionIndex = entry.getValue(); } + System.out.println("GP: " + gp + ", LOS: " + los); + NormalizedGeodeticPoint newGeodeticPoint = tile.cellIntersection(gp, los, 0, 0); return newGeodeticPoint; } diff --git a/src/test/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModelTest.java b/src/test/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModelTest.java index 5b3d7cd4fd7bf5c2c3be22d5eea3ff19b5589867..cde2b8aef87104cf07f40459612498d9ccff61b8 100644 --- a/src/test/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModelTest.java +++ b/src/test/java/org/orekit/rugged/atmosphericrefraction/MultiLayerModelTest.java @@ -17,75 +17,56 @@ package org.orekit.rugged.atmosphericrefraction; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; -import org.apache.commons.math3.util.FastMath; +import org.junit.Assert; import org.junit.Test; import org.orekit.bodies.GeodeticPoint; -import org.orekit.bodies.OneAxisEllipsoid; import org.orekit.errors.OrekitException; -import org.orekit.frames.FramesFactory; import org.orekit.rugged.errors.RuggedException; import org.orekit.rugged.intersection.AbstractAlgorithmTest; import org.orekit.rugged.intersection.IntersectionAlgorithm; import org.orekit.rugged.intersection.duvenhage.DuvenhageAlgorithm; import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTile; import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTileFactory; +import org.orekit.rugged.raster.Tile; import org.orekit.rugged.raster.TileUpdater; -import org.orekit.rugged.utils.ExtendedEllipsoid; -import org.orekit.rugged.utils.NormalizedGeodeticPoint; -import org.orekit.utils.Constants; -import org.orekit.utils.IERSConventions; +import org.orekit.rugged.raster.TilesCache; public class MultiLayerModelTest extends AbstractAlgorithmTest { @Test public void testGetPointOnGround() throws OrekitException, RuggedException { -// Vector3D position = new Vector3D(-3787079.6453602533, 5856784.405679551, 1655869.0582939098); -// Vector3D los = new Vector3D( 0.5127552821932051, -0.8254313129088879, -0.2361041470463311); -// -// OneAxisEllipsoid oneAxisEllipsoid = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, -// Constants.WGS84_EARTH_FLATTENING, FramesFactory.getITRF(IERSConventions.IERS_2010, true)); -// ExtendedEllipsoid ellipsoid = new ExtendedEllipsoid(oneAxisEllipsoid.getEquatorialRadius(), ellipsoid.getFlattening(), -// ellipsoid.getBodyFrame()); -// -// -// // compute intersection with ellipsoid -// final NormalizedGeodeticPoint gp0 = ellipsoid.pointOnGround(position, los, 0.0); -// // locate the entry tile along the line-of-sight -// MinMaxTreeTile tile = cache.getTile(gp0.getLatitude(), gp0.getLongitude()); - - // check mayon volcano tiles - - setUpMayonVolcanoContext(); - final IntersectionAlgorithm algorithm = createAlgorithm(updater, 8); Vector3D position = new Vector3D(-3787079.6453602533, 5856784.405679551, 1655869.0582939098); Vector3D los = new Vector3D( 0.5127552821932051, -0.8254313129088879, -0.2361041470463311); GeodeticPoint intersection = algorithm.refineIntersection(earth, position, los, algorithm.intersection(earth, position, los)); + Assert.assertNotNull(intersection); + // intersection {lat: 13.4045888388 deg, lon: 123.0160362249 deg, alt: 16} - MultiLayerModel model = new MultiLayerModel(); - +// MinMaxTreeTile tile = new MinMaxTreeTileFactory().createTile(); +// updater.updateTile(intersection.getLatitude(), intersection.getLongitude(), tile); +// tile.interpolateElevation(intersection.getLatitude(), intersection.getLongitude()); - final double latitude = FastMath.toRadians(13.27); - final double longitude = FastMath.toRadians(123.68); - MinMaxTreeTile tile = new MinMaxTreeTileFactory().createTile(); - updater.updateTile(latitude, longitude, tile); - double altitude = tile.interpolateElevation(latitude, longitude); - final GeodeticPoint groundGP = new GeodeticPoint(latitude, longitude, altitude); - Vector3D groundP = earth.transform(groundGP); + TilesCache cache = new TilesCache<MinMaxTreeTile>(new MinMaxTreeTileFactory(), updater, 8); + // locate the entry tile along the line-of-sight + Tile tile = cache.getTile(intersection.getLatitude(), intersection.getLongitude()); + System.out.println("TILE: minlat: " + tile.getMinimumLatitude() + ", maxlat: " + tile.getMaximumLatitude() + + ", minlon: " + tile.getMinimumLongitude() + ", maxlon: " + tile.getMaximumLongitude()); + MultiLayerModel model = new MultiLayerModel(); + GeodeticPoint gp = model.getPointOnGround(position, los, intersection.getZenith(), intersection.getAltitude(), + tile); - // Vector3D initialPos, Vector3D initialLos, Vector3D initialZenith, double altitude, Tile tile - // model.getPointOnGround(); - + Assert.assertNotNull(gp); + System.out.println("Distance: " + Vector3D.distance(intersection.getWest(), gp.getWest())); }