Question

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]
Was it helpful?

Solution

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

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top