0

I am trying to get a portion of code to work (similar to what I have below), so that OBJECT_LOC and CONVERTED_LOC are exactly the same. I thought the code was pretty straightforward with what I was doing, but for some reason they don't come out equal? What am I doing wrong? (You can see output below).

import com.bbn.openmap.LatLonPoint;
import com.bbn.openmap.proj.Length;
import com.bbn.openmap.proj.coords.DMSLatLonPoint;

public class Test {

       /**
        * @param args
        */
       public static void main(String[] args) {

               // 45:20:00.0N/24:00:00.0E
               LatLonPoint BASE_LOC = new DMSLatLonPoint(false, 45, 20, 00.0f, false,
                               24, 00, 00.0f).getLatLonPoint();

               System.out.println("BASE_LOC: " + BASE_LOC);

               LatLonPoint OBJECT_LOC = new LatLonPoint(52.749355, 26.346556);

               System.out.println("OBJECT_LOC: " + OBJECT_LOC);

               float distanceX = BASE_LOC.distance(new LatLonPoint(BASE_LOC
                               .getLatitude(), OBJECT_LOC.getLongitude()));

               float distanceY = BASE_LOC.distance(new LatLonPoint(OBJECT_LOC
                               .getLatitude(), BASE_LOC.getLongitude()));


               LatLonPoint CONVERTED_POINT = new LatLonPoint(BASE_LOC.getLatitude()
                               + Length.DECIMAL_DEGREE.fromRadians(distanceY),
                               BASE_LOC.getLongitude()
                                               + Length.DECIMAL_DEGREE.fromRadians(distanceX));

               System.out.println("CONVERTED_POINT " + CONVERTED_POINT);

       }
}

Output:

BASE_LOC: LatLonPoint[lat=45.333332,lon=24.0]
OBJECT_LOC: LatLonPoint[lat=52.749355,lon=26.346556]
CONVERTED_POINT LatLonPoint[lat=52.749355,lon=25.649527]
mainstringargs
  • 13,563
  • 35
  • 109
  • 174

2 Answers2

1

After looking at the API docs and some literature on geography it looks like your method of finding out the second point is flawed. The right way to do it is using the distance and the bearing(azimuth). Following is the corrected code:

import com.bbn.openmap.LatLonPoint;
import com.bbn.openmap.proj.coords.DMSLatLonPoint;

public class TestProgram {

   /**
    * @param args
    */
   public static void main(String[] args) {

           // 45:20:00.0N/24:00:00.0E
           LatLonPoint BASE_LOC = new DMSLatLonPoint(false, 45, 20, 00.0f, false, 24, 00, 00.0f).getLatLonPoint();
           System.out.println("BASE_LOC: " + BASE_LOC);

           LatLonPoint OBJECT_LOC = new LatLonPoint(52.749355, 26.0);
           System.out.println("OBJECT_LOC: " + OBJECT_LOC);

           float distance = BASE_LOC.distance(OBJECT_LOC);
           float az = BASE_LOC.azimuth(OBJECT_LOC);

           LatLonPoint CONVERTED_POINT = BASE_LOC.getPoint(distance, az);

           System.out.println("CONVERTED_POINT " + CONVERTED_POINT);

   }

}

Some information is available here - http://www.movable-type.co.uk/scripts/latlong.html

Puneet
  • 736
  • 9
  • 17
0

For what it's worth, when you're doing your BASE_LOC.distance() calls, you're swapping between OBJECT_LOC/BASE_LOC in the arguments for the two distances. OBJECT_LOC/BASE_LOC in one, BASE_LOC/OBJECT_LOC in the other.

Marc B
  • 356,200
  • 43
  • 426
  • 500
  • Thats on purpose. In the first call I set the BASE_LOC as the Latitude so I can get just the X distance from the OBJECT_LOC.. In the next call I set the I set the BASE_LOC as the Longitude, so I can get just the y distance from the OBJECT_LOC – mainstringargs Oct 06 '11 at 23:36