Как преобразовать расстояние (миль) в градусы?
Я работаю над приложением с пространственными данными. Здесь мне нужно найти расстояние от центроида до точки. Может знать, как конвертировать мили в градусы в Java?
4 ответа
Окончательное редактирование: изучите Великое окружное расстояние и геодезические, чтобы обнаружить сложности, которые вы действительно задали в этом вопросе. Это по общему признанию хорошо из моего знакомства с математикой.
[Оставляя оригинальные предложения по историческим причинам. Хотя части могут помочь вам, они не будут непосредственно отвечать на ваш вопрос.]
См. /questions/28791889/prostyie-raschetyi-dlya-rabotyi-s-shirotoj-dolgotoj-km-rasstoyaniya/28791899#28791899 для ответа на этот вопрос.
Широта: 1 градус = 110,54 км
Долгота: 1 градус = 111.320*cos(широта) км
Чтобы пойти в другом направлении, мне интересно, сможем ли мы сделать это (моя алгебра ржавая):
Широта: 1 км = 1 град / 110,54 км
Долгота: 1 км = 1 град / (111,320 * cos (широта) км)
заявка
Ваше расстояние всегда строго Восток-Запад или Север-Юг? Если это так, вы должны быть в состоянии сказать:
Integer latTraveledMiles = 100;
Double latTraveledKM = 100 * 0.621371;
Double latTraveledDeg = (1 / 110.54) * latTraveledKM;
или же
Double currentLat = 74.0064;
Integer longTraveledMiles = 100;
Double longTraveledKM = 100 * 0.621371;
Double longTraveledDeg = (1 / (111.320 * Math.cos(currentLat))) * longTraveledKM;
Скорее всего, вам нужно будет знать расстояние как в направлениях Север-Юг, так и Восток-Запад (и принять это в область "не прямо"). Вы можете взглянуть на теорему Пифагора. Вы знаете "длинную сторону" треугольника (c^2) и можно рассчитать для долготы (a^2) и широты (b^2).
Вы должны быть в состоянии применить части моих предыдущих фрагментов кода, чтобы выяснить,
c = sqrt(a^2 + b^2).
Удачи.
Если это действительно прямой вопрос, мы должны игнорировать широту и долготу и просто посмотреть на угол между радиусами двух точек, чтобы расстояние между ними вдоль большого круга, содержащего обе точки, составляло м миль.
Чтобы держать это действительно прямым, мы должны предположить, что земля сферическая, так что ответ не зависит от местоположения. Я использую средний радиус 3 958,761 миль.
Один радиан - это угол для линии длиной 3 958,761 миль, поэтому угол для линии длиной в миль составляет м /3 958,761 радиана. Используйте Math.toDegrees, если вы хотите угол в градусах.
Выражение вашего расстояния в градусах - неправильный подход, потому что градусы расстояния не равны во всех положениях на земле, и они выражаются по-разному для широты и долготы.
Примеры: 1° долготы на экваторе составляет около 70 миль, тогда как вокруг северного полюса это несколько футов.
Широта не изменяется по поверхности земли, но как насчет расстояний, которые не находятся вдоль меридиана или параллели? В какой мере вы их представляете?
Ответ от dwight-degroff отличный (спасибо, это помогло мне), но содержит один опечатка, которая, конечно, имеет очень низкое значение. Если вы хотите быть более точным (например, вы готовите тесты на основе внешних данных, поступающих из источника с большим количеством десятичных разрядов), то это должно быть
Широта: 1 км = 1 град / 110,574 км
вместо:
Широта: 1 км = 1 град / 110,54 км
И, таким образом, для широты это:
Integer latTraveledMiles = 100;
Double latTraveledKM = 100 * 0.621371;
Double latTraveledDeg = (1 / 110.574) * latTraveledKM;
И на самом деле, для долготы это 111,319 вместо 111,320, так что:
Double currentLat = 74.0064;
Integer longTraveledMiles = 100;
Double longTraveledKM = 100 * 0.621371;
Double longTraveledDeg = (1 / (111.319 * Math.cos(currentLat))) * longTraveledKM;
Тем не менее, оба исправления могут быть незначительными.