Как преобразовать расстояние из градусов в метры?
-
29-09-2019 - |
Вопрос
Я использую OpenLayers с обычной картой mercator, и я пытаюсь создать ограничивающую рамку, найдя сетку точек в latlong.bbox выражается в latlon, например
48.1388,-15.3616,55.2057,-3.9359
Я могу определить расстояние в степени (например,x:2.5, y:2.4) и проработайте пункты, исходя из этого.Но я хотел бы выразить эту дистанцию в метры (например,50000), чтобы соотнести это с мышлением пользователя (люди понимают метры, а не градусы).Как я могу преобразовать это расстояние?Я знаю, как перепроектировать точку, но не расстояние.
Спасибо за любые подсказки!Малоне
Решение
Используйте формула хаверсина чтобы получить расстояние между двумя точками широты / длины.Это предполагает, что земля представляет собой сферу (что в большинстве случаев "достаточно хорошо").
Его реализация на 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;
Другие советы
Не позволяя слегка неферической формы земли,
Одна минута широты к северу на юг = 1 морская миля = 6075 футов, поэтому одна градус = 60 минут = 60 * 6075 футов. В метре 3,28 фута, поэтому одна градус = 60 * 6075 / 3,28 метра = 111,128 метра
Альтернативно, одна минута широты = 1,852 метра, поэтому в одной степени = 60 * 1852 метра = 111,120 метров
Я не уверен, что более точен ...
За одну степень долготы, сделайте то же самое, но умножить на косинус (широту), поскольку линии долгота все ближе, когда вы двигаетесь на севере.
Преобразование между степенями и метрами варьируется по всей поверхности Земли.
Предполагая сферическую землю, градусы широта = расстояние * 360 / (2 * pi * 6400000)
Обратите внимание, что долгота будет варьироваться в зависимости от широты:
Степень долготы = расстояние * 360 * / (2 * pi * cos (широта))
Приведенное выше для поверхности Земли и не использует проекцию заказа. Если вы хотите работать с прогнозированным линейным расстоянием, вам нужно будет использовать проекцию Mercator.