Как преобразовать расстояние из градусов в метры?
Я использую OpenLayers с обычной картой Меркатора, и я пытаюсь попробовать ограничивающую коробку, найдя сетку точек в latlong.
Bbox выражается в латлоне, например
48.1388,-15.3616,55.2057,-3.9359
Я могу определить расстояние в градусах (например, x: 2.5, y: 2.4) и вычислить точки оттуда.
Но я хотел бы выразить это расстояние в метрах (например, 50000), чтобы соотнести его с мышлением пользователя (люди понимают метры, а не градусы).
Как я могу преобразовать это расстояние? Я знаю, как это сделать. перепроецировать точку, но не расстояние.
Спасибо за любые подсказки!
Мулоне
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