Как трансформировать расстояние от градусов до метров? - PullRequest
13 голосов
/ 05 ноября 2010

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

48.1388,-15.3616,55.2057,-3.9359

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

Спасибо за любые подсказки! Mulone

Ответы [ 3 ]

14 голосов
/ 05 ноября 2010

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

Его реализация на 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;
7 голосов
/ 05 ноября 2010

Без учета слегка несферической формы земли,

Одна минута широты с севера на юг = 1 Морская миля = 6075 футов Итак, один градус = 60 минут = 60 * 6075 футов Есть 3,28 фута в метре, так Один градус = 60 * 6075 / 3,28 метра = 111,128 метра

В качестве альтернативы, одна минута широты = 1852 метра Итак, один градус = 60 * 1852 метра = 111,120 метра

Я не уверен, что точнее ...

Для одного градуса долготы сделайте то же самое, но умножьте на косинус (широту), поскольку линии долготы сближаются при движении на север.

0 голосов
/ 05 ноября 2010

Преобразование между градусами и метрами варьируется по всей поверхности Земли.

Принимая сферическую Землю, градусы широты = расстояние * 360 / (2 * PI * 6400000)

Обратите внимание, что долгота будет меняться в зависимости от широты:

Градусы долготы = расстояние * 360 * / (2 * PI * cos (широта))

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

...