Как найти широту и долготу точки из заданной точки, учитывая расстояние между ними?

#java #javascript #jakarta-ee

#java #javascript #джакарта-ee

Вопрос:

Я хочу найти точку, которая находится на расстоянии около X км от текущей точки, скажем, A, Пример

если я знаю широту и долготу центральной точки, как я могу получить широту, долготу четырех точек по окружности…. Я ищу ТАК довольно долго, но не могу получить решение на JavaScript или на Java … расстояние в моем случае будет в нескольких километрах, поэтому я не могу рассматривать землю как плоскую поверхность, поэтому, пожалуйста, не предлагайте такое решение…

Спасибо

Комментарии:

1. это всего лишь четыре случайные точки на окружности, которые вы хотите?

2. нет точек, где в приведенных выше примерах линии касаются окружности …. на 0,90,180,270 градусов

3. несколько моментов, которые вам следует учитывать — Все точки на окружности будут находиться на требуемом расстоянии от центра, а не только на 4.-Количество километров на градус изменения широты / долготы не является постоянной величиной — как только вы определите, какой коэффициент следует использовать для преобразования километров в градус изменения широты/ долгота , это должно быть легко, если вы также знаете eqn круга, учитывая его радиус и координаты центра.

4. И да, если вы хотите определить отношение долготы к километру на основе заданных координат центра, вы можете найти необходимые уравнения в en.wikipedia.org/wiki/Longitude

5. @amal … конечно, я знаю свойства круга…. Я хочу знать, каково максимальное изменение значений широты и долготы во всех направлениях от заданной точки (A) и заданного расстояния (X км)…

Ответ №1:

Взгляните на эту страницу, которая очень подробно объясняет сферическую модель для вычисления расстояния с примерами JavaScript:

Учитывая начальную точку, начальный азимут и расстояние, будет вычислена точка назначения и конечный азимут, проходящий по (кратчайшему расстоянию) дуге большого круга.

JavaScript:

 var lat2 = Math.asin( Math.sin(lat1)*Math.cos(d/R)   
                      Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng) );
var lon2 = lon1   Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
                             Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2));
  

Комментарии:

1. спасибо за быстрый ответ @Andrey… Я пытаюсь следовать этому названию в течение нескольких часов… место, где я в замешательстве, находится всего на одну строку выше из фрагмента, который вы упомянули в ответе ur d/R is the angular distance (in radians), where d is the distance travelled and R is the earth’s radius … У меня есть расстояние в Км, как я могу изменить его на указанный формат…. помогите!!!

2. вы смотрели в movable-type.co.uk/scripts/latlon.js ? LatLon.prototype.destinationPoint = функция (brng, dist)? dist = dist/this._radius; ?

Ответ №2:

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

Вот код

 public class cal
{         
     public static void main(String []args){
         double R = 6371.0;
         double d = 0.100;
         double lat1 = 42.873, lon1 = 74.568;
         double Radlat1 = Math.toRadians(42.873);
         double Radlon1 = Math.toRadians(74.568);
         double brng = Math.toRadians(225);
         double lat2,lon2;

        System.out.println("Hello World");
        //lat2 = Math.sin();

        lat2 = Math.asin(Math.sin(Radlat1)*Math.cos(d/R)   
                      Math.cos(Radlat1)*Math.sin(d/R)*Math.cos(brng));



         System.out.println("Lat2degree" "=" Math.toDegrees(lat2) "n" "Lat2=" lat2);

        double NewRadLat2 = Math.toRadians(Math.toDegrees(lat2));


        lon2 = Radlon1 Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(Radlat1), 
                             Math.cos(d/R)-Math.sin(Radlat1)*Math.sin(lat2));

        System.out.println("Lon2" "=" Math.toDegrees(lon2));

     }
}