Tony
Tony

Reputation: 3

Moving GPS coordinate

I am fairly new to Android programming, but I am getting pretty good at it (I think: ))
What I am doing is building a situated stories app. It is an app that places audio files at certain GPS markers and enables the user to listen to them at specific locations.

The next step is moving audio files. What I want to do is set a marker at a specific position in a city. (done). Next I want to check the location of a second marker that moves in a circle around it.

What I have so far is this:

public void checkCircularPosition(){
    /*
     * could be a solution?
     * 
    radius = 250; //offset in meters
    gpsLatCenter = 5.1164; //?how can i make this accurate in meters?
    gpsLonCenter = 52.0963; //??how can i make this accurate in meters?

    degree = 0; //should be variable over time (full circle in 1Hr, 3600sec --> 360/3600 =  0,1 deg/s)
    radian;

    radian = (degree/180)*Math.PI;
    gpsCircleLat = gpsLatCenter+Math.cos(radian)*radius;
    gpsCircleLon = gpsLonCenter-Math.sin(radian)*radius;
    */
}

Now, I have checked this code in adobe flash, which made a movie clip move around in a circle. So I know the calculations are somewhat right. But, I have no way of calculating the latitude and longitude of the resulting coordinates.

EDIT!!

i found the solution with the help posted below. still a lot of work to figure out how to use the results. anyway, i posted the resulting function below.

to make this work, you need _radius wich is 6371 (earth's radius), a bearing, a distance, and a start location.

thanks a lot guys!

public static void destinationPoint(double brng, double dist) {

    dist = dist/_radius;  // convert dist to angular distance in radians
    brng = Math.toRadians(brng);  // 
    double lat1 = Math.toRadians(_lat);
    double lon1 = Math.toRadians(_lon);

    double lat2 = Math.asin( Math.sin(lat1)*Math.cos(dist) + Math.cos(lat1)*Math.sin(dist)*Math.cos(brng) );
    double lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(dist)*Math.cos(lat1), Math.cos(dist)-Math.sin(lat1)*Math.sin(lat2));
    lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI;  // normalise to -180..+180º

    Log.i(APPTAG, ""+Math.toDegrees(lat2));
    Log.i(APPTAG, ""+Math.toDegrees(lon2));

    Location movLoc = new Location("");
    movLoc.setLatitude(Math.toDegrees(lat2));
    movLoc.setLongitude(Math.toDegrees(lon2));

    Log.i(APPTAG, ""+movLoc);
}

Upvotes: 0

Views: 1854

Answers (1)

TreyA
TreyA

Reputation: 3427

You should check the section Destination point given distance and bearing from start point at this website: http://www.movable-type.co.uk/scripts/latlong.html

That website has the proper formula for using your start point (gpsLatCenter/gpsLonCenter) and bearing (degree in you code) to compute the final lat/lon (gpsCircleLat/gpsCircleLon).

Upvotes: 1

Related Questions