diff --git a/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java b/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java index fa618c1bd2aa0fb6a18cc0db322fb3b52d83be50..8aac9fa9b7b611bb86b73e873d2ae40c5c4c7a17 100644 --- a/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java +++ b/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java @@ -16,18 +16,18 @@ */ package org.orekit.rugged.core.dem; -import org.orekit.rugged.api.UpdatableTile; +import org.apache.commons.math3.util.FastMath; -/** Simple implementation of a {@link UpdatableTile}. +/** Simple implementation of a {@link Tile}. * @author Luc Maisonobe */ public class SimpleTile implements Tile { - /** Reference latitude. */ - private double referenceLatitude; + /** Minimum latitude. */ + private double minLatitude; - /** Reference longitude. */ - private double referenceLongitude; + /** Minimum longitude. */ + private double minLongitude; /** Step in latitude (size of one raster element). */ private double latitudeStep; @@ -54,16 +54,16 @@ public class SimpleTile implements Tile { /** {@inheritDoc} */ @Override - public void setGeometry(final double referenceLatitude, final double referenceLongitude, - final double latitudeStep, final double longitudeStep, - final int latitudeRows, final int longitudeColumns) { - this.referenceLatitude = referenceLatitude; - this.referenceLongitude = referenceLongitude; - this.latitudeStep = latitudeStep; - this.longitudeStep = longitudeStep; - this.latitudeRows = latitudeRows; - this.longitudeColumns = longitudeColumns; - this.elevations = new double[latitudeRows * longitudeColumns]; + public void setGeometry(final double minLatitude, final double minLongitude, + final double latitudeStep, final double longitudeStep, + final int latitudeRows, final int longitudeColumns) { + this.minLatitude = minLatitude; + this.minLongitude = minLongitude; + this.latitudeStep = latitudeStep; + this.longitudeStep = longitudeStep; + this.latitudeRows = latitudeRows; + this.longitudeColumns = longitudeColumns; + this.elevations = new double[latitudeRows * longitudeColumns]; } /** {@inheritDoc} */ @@ -76,14 +76,14 @@ public class SimpleTile implements Tile { /** {@inheritDoc} */ @Override - public double getReferenceLatitude() { - return referenceLatitude; + public double getMinimumLatitude() { + return minLatitude; } /** {@inheritDoc} */ @Override - public double getReferenceLongitude() { - return referenceLongitude; + public double getMinimumLongitude() { + return minLongitude; } /** {@inheritDoc} */ @@ -118,6 +118,15 @@ public class SimpleTile implements Tile { return elevations[latitudeIndex * longitudeColumns + longitudeIndex]; } + /** {@inheritDoc} */ + @Override + public boolean covers(final double latitude, final double longitude) { + final int latitudeIndex = (int) FastMath.floor((latitude - minLatitude) / latitudeStep); + final int longitudeIndex = (int) FastMath.floor((longitude - minLongitude) / longitudeStep); + return latitudeIndex >= 0 && latitudeIndex < latitudeRows && + longitudeIndex >= 0 && longitudeIndex < longitudeColumns; + } + /** Check indices. * @param latitudeIndex * @param longitudeIndex @@ -125,7 +134,7 @@ public class SimpleTile implements Tile { */ private void checkIndices(int latitudeIndex, int longitudeIndex) throws IllegalArgumentException { - if (latitudeIndex < 0 || latitudeIndex >= latitudeRows || + if (latitudeIndex < 0 || latitudeIndex >= latitudeRows || longitudeIndex < 0 || longitudeIndex >= longitudeColumns) { throw new IllegalArgumentException(); } diff --git a/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java b/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java index f6e3fbcb8659caede1d186bdb4b0cc71ac1f7607..82e53d5f4325139b19b4d2a5208f2a0b87ee30f4 100644 --- a/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java +++ b/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java @@ -23,15 +23,15 @@ import org.orekit.rugged.api.UpdatableTile; */ public interface Tile extends UpdatableTile { - /** Get reference latitude. - * @return reference latitude + /** Get minimum latitude. + * @return minimum latitude */ - double getReferenceLatitude(); + double getMinimumLatitude(); - /** Get reference longitude. - * @return reference longitude + /** Get minimum longitude. + * @return minimum longitude */ - double getReferenceLongitude(); + double getMinimumLongitude(); /** Get step in latitude (size of one raster element). * @return step in latitude @@ -62,4 +62,11 @@ public interface Tile extends UpdatableTile { double getElevationAtIndices(int latitudeIndex, int longitudeIndex) throws IllegalArgumentException; + /** Check if a tile covers a ground point. + * @param latitude ground point latitude + * @param longitude ground point longitude + * @return true if the tile covers the ground point + */ + boolean covers(double latitude, double longitude); + } diff --git a/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java b/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java index f182feb3c1df28de291f4315e3f0cb0c52b9282f..9faae3454335ca18220021735937c4fc718c4c7d 100644 --- a/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java +++ b/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java @@ -25,8 +25,8 @@ public class SimpleTileTest { @Test public void testEmpty() { SimpleTile tile = new SimpleTile(); - Assert.assertEquals(0, tile.getReferenceLatitude(), 1.0e-10); - Assert.assertEquals(0, tile.getReferenceLongitude(), 1.0e-10); + Assert.assertEquals(0, tile.getMinimumLatitude(), 1.0e-10); + Assert.assertEquals(0, tile.getMinimumLongitude(), 1.0e-10); Assert.assertEquals(0, tile.getLatitudeStep(), 1.0e-10); Assert.assertEquals(0, tile.getLongitudeStep(), 1.0e-10); Assert.assertEquals(0, tile.getLatitudeRows()); @@ -44,13 +44,18 @@ public class SimpleTileTest { } } - Assert.assertEquals(1.0, tile.getReferenceLatitude(), 1.0e-10); - Assert.assertEquals(2.0, tile.getReferenceLongitude(), 1.0e-10); + Assert.assertEquals(1.0, tile.getMinimumLatitude(), 1.0e-10); + Assert.assertEquals(2.0, tile.getMinimumLongitude(), 1.0e-10); Assert.assertEquals(0.1, tile.getLatitudeStep(), 1.0e-10); Assert.assertEquals(0.2, tile.getLongitudeStep(), 1.0e-10); Assert.assertEquals(100, tile.getLatitudeRows()); Assert.assertEquals(200, tile.getLongitudeColumns()); + Assert.assertTrue(tile.covers( 6.0, 22.0)); + Assert.assertFalse(tile.covers( 0.0, 22.0)); + Assert.assertFalse(tile.covers(12.0, 22.0)); + Assert.assertFalse(tile.covers( 6.0, 1.0)); + Assert.assertFalse(tile.covers( 6.0, 43.0)); for (int i = 0; i < tile.getLatitudeRows(); ++i) { for (int j = 0; j < tile.getLongitudeColumns(); ++j) {