diff --git a/core/src/main/java/org/orekit/rugged/raster/Tile.java b/core/src/main/java/org/orekit/rugged/raster/Tile.java
index d6abd003cb298727f34aa47234048fcd5af376f1..eb91e9d2f14f473062bd25b7774abacc62c6b299 100644
--- a/core/src/main/java/org/orekit/rugged/raster/Tile.java
+++ b/core/src/main/java/org/orekit/rugged/raster/Tile.java
@@ -128,13 +128,21 @@ public interface Tile extends UpdatableTile {
     int getLongitudeColumns();
 
     /** Get the latitude index of a point.
+     * <p>
+     * This method shift indices 1/2 pixel, so that
+     * the specified latitude is always between index and index+1.
+     * </p>
      * @param latitude geodetic latitude
-     * @return latirute index (it may lie outside of the tile!)
+     * @return latitude index (it may lie outside of the tile!)
      */
     int getLatitudeIndex(double latitude);
 
     /** Get the longitude index of a point.
-     * @param longitude geodetic latitude
+     * <p>
+     * This method shift indices 1/2 pixel, so that
+     * the specified longitude is always between index and index+1.
+     * </p>
+     * @param longitude geodetic longitude
      * @return longitude index (it may lie outside of the tile!)
      */
     int getLongitudeIndex(double longitude);
diff --git a/core/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java b/core/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
index a71c1ce171a7b9fb20f183ae4ce879d1020fb108..ac0d4f974b11f3dd96a46359366c75bd6bc82fb6 100644
--- a/core/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
+++ b/core/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
@@ -115,6 +115,42 @@ public class SimpleTileTest {
         checkOutOfBound( 50, 200, tile);
     }
 
+    @Test
+    public void testIndexShift() throws RuggedException {
+
+        SimpleTile tile = new SimpleTileFactory().createTile();
+        tile.setGeometry(1.0, 2.0, 0.1, 0.2, 100, 200);
+        tile.setElevation(50, 100, 1000.0);
+        tile.tileUpdateCompleted();
+
+        // indices correspond to pixels centers
+        double latCenterColumn50 = tile.getLatitudeAtIndex(50);
+        double latCenterColumn51 = tile.getLatitudeAtIndex(51);
+        double lonCenterRow23    = tile.getLongitudeAtIndex(23);
+        double lonCenterRow24    = tile.getLongitudeAtIndex(24);
+
+        // getLatitudeIndex shift indices 1/2 pixel, so that
+        // the specified latitude is always between index and index+1
+        // so despite latWestColumn51 is very close to column 51 center,
+        // getLatitudeIndex should return 50
+        double latWestColumn51   = 0.001 * latCenterColumn50 + 0.999 * latCenterColumn51;
+        int retrievedLatIndex = tile.getLatitudeIndex(latWestColumn51);
+        Assert.assertEquals(50, retrievedLatIndex);
+        Assert.assertTrue(tile.getLatitudeAtIndex(retrievedLatIndex) < latWestColumn51);
+        Assert.assertTrue(latWestColumn51 < tile.getLatitudeAtIndex(retrievedLatIndex + 1));
+
+        // getLongitudeIndex shift indices 1/2 pixel, so that
+        // the specified longitude is always between index and index+1
+        // so despite lonSouthRow24 is very close to row 24 center,
+        // getLongitudeIndex should return 23
+        double lonSouthRow24     = 0.001 * lonCenterRow23    + 0.999 * lonCenterRow24;
+        int retrievedLonIndex = tile.getLongitudeIndex(lonSouthRow24);
+        Assert.assertEquals(23, retrievedLonIndex);
+        Assert.assertTrue(tile.getLongitudeAtIndex(retrievedLonIndex) < lonSouthRow24);
+        Assert.assertTrue(lonSouthRow24 < tile.getLongitudeAtIndex(retrievedLonIndex + 1));
+
+    }
+
     private void checkOutOfBound(int i, int j, Tile tile) {
         try {
             tile.setElevation(i, j, 1000.0);