Как преобразовать расстояние из градусов в метры?



Я использую OpenLayers с обычной картой Меркатора, и я пытаюсь попробовать ограничивающую коробку, найдя сетку точек в latlong.
Bbox выражается в латлоне, например



48.1388,-15.3616,55.2057,-3.9359


Я могу определить расстояние в градусах (например, x: 2.5, y: 2.4) и вычислить точки оттуда.
Но я хотел бы выразить это расстояние в метрах (например, 50000), чтобы соотнести его с мышлением пользователя (люди понимают метры, а не градусы).
Как я могу преобразовать это расстояние? Я знаю, как это сделать. перепроецировать точку, но не расстояние.



Спасибо за любые подсказки!
Мулоне

1372   3  

3 ответов:

Использовать Формула гаверсинуса, чтобы получить расстояние между двумя точками широта/долгота. Это предполагает, что Земля является сферой (которая в большинстве случаев "достаточно хороша").

Его 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 (широта))

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

Comments

    Ничего не найдено.