Получить местоположение на расстоянии географической точки

Я работаю над приложением для Android, и у меня есть широта и долгота географической точки, и я хотел бы получить координаты места, расположенного от X метров (север) и Y метров (запад). GeoPoint не реализует такую ​​функциональность, поэтому мне нужно найти способ сделать это самостоятельно ...

Я сделал несколько поисков, но не нашел ничего интересного, вы знаете, как действовать?


person vital    schedule 29.09.2012    source источник


Ответы (2)


С помощью следующего метода вы получите широту и долготу, которые нужно добавить к исходному местоположению, чтобы добраться до последнего. Имейте в виду, что это работает только на относительно небольших расстояниях, поскольку игнорирует кривизну Земли.

private static final float GAP_LAT_LON = 0.00005f; //aprox 5 meters
private float results[] = new float[1];

private PointF getGaps(Location initial, float distanceX, float distanceY, PointF gaps){
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude(), initial.getLongitude() + GAP_LAT_LON, results);
    double factorX = GAP_LAT_LON / results[0];
    Location.distanceBetween(initial.getLatitude(), initial.getLongitude(), initial.getLatitude() + GAP_LAT_LON, initial.getLongitude(), results);
    double factorY = GAP_LAT_LON / results[0];
    if(gaps == null)
        gaps = new PointF();
    gaps.set((float)(distanceX * factorX), (float)(distanceY * factorY));
    return gaps;
}

//to use
private void teste(){
    PointF gaps = null;
    Location initial = new Location("");

    initial.setLatitude(23.5);
    initial.setLongitude(13.2);

    //100 meters West/East and 300 meters North/South
    getGaps(initial, 100, 300, gaps);

    //gaps.x returns x offset to add/subtract to initial latitude
    //gaps.y returns y offset to add/subtract to initial longitude
}

удачи

person Luis    schedule 29.09.2012
comment
Вы можете настроить его, выбрав значение GAP_LAT_LON, которое ближе к значениям расстояния, с которым вы работаете. Вы также можете повысить точность, если вернете пробелы как double, но вам придется определить свой собственный класс, поскольку PointD (double) не существует. - person Luis; 30.09.2012

Сложно, потому что расстояние между двумя целыми долготами зависит от широты, и расстояние также зависит от высоты ...

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

Начните с одной оси и выполните своего рода бинарный поиск, пока не найдете местоположение в X метрах к северу. Затем проделайте то же самое для другой оси.

person zmbq    schedule 29.09.2012