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