Перемещение координат GPS - PullRequest
0 голосов
/ 04 марта 2012

Я довольно новичок в программировании на Android, но у меня это хорошо получается (я думаю:))
То, что я делаю, это создание приложения с расположенными историями. Это приложение, которое помещает аудиофайлы в определенные маркеры GPS и позволяет пользователю прослушивать их в определенных местах.

Следующим шагом является перемещение аудиофайлов. Что я хочу сделать, это установить маркер на определенную позицию в городе. (сделанный). Далее я хочу проверить местоположение второго маркера, который движется по кругу вокруг него.

То, что я имею до сих пор, это:

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;
    */
}

Теперь я проверил этот код в Adobe Flash, что заставило мувиклип перемещаться по кругу. Так что я знаю, что расчеты несколько верны. Но я не могу рассчитать широту и долготу полученных координат.

EDIT !!

Я нашел решение с помощью приведенной ниже помощи. еще много работы, чтобы выяснить, как использовать результаты. в любом случае, я разместил полученную функцию ниже.

, чтобы сделать эту работу, вам нужно _radius, который равен 6371 (радиус Земли), азимут, расстояние и начальное местоположение.

Большое спасибо, ребята!

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);
}

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Вам следует проверить раздел Точка назначения с учетом расстояния и направления от начальной точки на этом веб-сайте: http://www.movable -type.co.uk / scripts / latlong.html

Этот веб-сайт имеет правильную формулу для использования вашей начальной точки (gpsLatCenter / gpsLonCenter) и направления ( градус в вашем коде) для вычисления конечного широты / долготы (gpsCircleLat / gpsCircleLon).

0 голосов
/ 04 марта 2012

проверьте этот сайт:

http://zipcodeworld.com/samples/distance.java.html

возможно, вы можете получить от него вдохновение

...