Как преобразовать расстояние от градусов к метрам?
Я использую OpenLayers с обычной картой меркатора, и я пытаюсь выбрать ограничивающий прямоугольник, найдя сетку точек в latlong.
Bbox выражается в latlon, например.
48.1388,-15.3616,55.2057,-3.9359
Я могу определить расстояние в градусах (например, x: 2.5, y: 2.4) и выработать точки оттуда.
Но я хотел бы выразить это расстояние в метрах (например, 50000), чтобы связать его с мышлением пользователя (люди понимают счетчики, а не градусы).
Как я могу преобразовать это расстояние? Я знаю, как перепрограммировать точку, но не расстояние.
Спасибо за любые подсказки!
Mulone
Ответы
Ответ 1
Используйте формулу haversine formula, чтобы получить расстояние между двумя точками lat/long. Это предполагает, что земля является сферой (которая в большинстве случаев "достаточно хороша" ).
Реализация Javascript (бесстыдно украденная из здесь) выглядит следующим образом:
var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
Ответ 2
Одна минута широты с севера на юг = 1 Морская миля = 6075 футов
Таким образом, один градус = 60 минут = 60 * 6075 футов
В метре есть 3,28 фута, поэтому
Одна градус = 60 * 6075/3,28 метра = 111 128 м.
В качестве альтернативы, одна минута Широта = 1 852 Метра
Таким образом, один градус = 60 * 1852 метра = 111 120 м.
Я не уверен, что более точно...
Для одной степени долготы сделайте то же самое, но умножите на Косинус (Широта), так как линии долготы сближаются, когда вы двигаетесь на север.
Ответ 3
Трансформация между градусами и метрами изменяется по поверхности Земли.
Предполагая сферическую Землю, градусы широты = расстояние * 360/(2 * PI * 6400000)
Обратите внимание, что долгота будет меняться в зависимости от широты:
Степени долготы = расстояние * 360 */(2 * PI * cos (широта))
Вышеуказанное относится к поверхности Земли и не использует проекцию Меркатора. Если вы хотите работать с прогнозируемым линейным расстоянием, вам нужно будет использовать проекцию Меркатора.