Расстояние между двумя точками.Восток-запад + север-юг - PullRequest
0 голосов
/ 11 июля 2010

Мне нужно рассчитать расстояние между двумя точками, но не обычным способом. Мне нужно знать «расстояние с востока на запад» + «расстояние с севера на юг». Полагаю, это проще, чем обычные вычисления «по прямой линии», но я до сих пор не могу понять, как это сделать.

Я хочу сделать это, используя запрос MySQL, и желательно, чтобы результат возвращался в км. Одна из точек будет константой в запросе, а другая точка является точкой из БД, поэтому что-то вроде SELECT abs (долгота-39.12345) ... + abs (широта ... AS Расстояние от магазинов WHERE shopname = 'Bingo '.

Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 11 июля 2010

Расстояние с севера на юг пропорционально разнице в широтах. Это примерно 1 морская миля в минуту дуги (окружность Земли составляет около 21600 морских миль).

Расстояние между востоком и западом пропорционально разности долгот, но оно также зависит от широты (например, оно равно нулю на полюсах): я думаю, оно пропорционально косинусу широты.

0 голосов
/ 29 декабря 2013

Разница между востоком и западом между двумя точками в разных широтах - это отдельное число в градусах долготы, но преобразование этого в мили является проблематичным, поскольку мили на градус варьируются в зависимости от широты.Например, Лос-Анджелес и Нью-Йорк расположены на расстоянии 44,3 градуса по долготе, но преобразование этого значения в мили приведет к большему числу на широте Лос-Анджелеса, чем на широте Нью-Йорка, поскольку линии широты являются самыми длинными на экваторе и уменьшаются до нуля на полюсах,

Разумным условием было бы считать расстояние EW как среднее двух расстояний, рассчитанных на двух широтах.

0 голосов
/ 11 июля 2010

Ваш ответ зависит от точности, необходимой в вашем ответе.Если вам не нужен более точный ответ, чем модель сферической земли, вы можете использовать решение, аналогичное предложенному капитаном Томом.Если вам требуется больше точности, вы должны предположить, что Земля представляет собой сжатый сфероид.См. http://en.wikipedia.org/wiki/Vincenty%27s_formulae для нескольких решений.

0 голосов
/ 11 июля 2010

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

Ниже приведен пример в C #, который показывает, как это сделать:

var earth_radius = Constants.EarthRadius; // 6377.8 km

var dLat = ToRadians(fromLatitude - toLatitude);
var dLon = ToRadians(fromLongitude - toLongitude);

var a = 
    Math.Sin(dLat / 2) * 
    Math.Sin(dLat / 2) +
    Math.Cos(ToRadians(fromLatitude)) *
    Math.Cos(ToRadians(toLatitude)) *
    Math.Sin(dLon / 2) * 
    Math.Sin(dLon / 2);

var c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));

var distanceInKilometers = earth_radius * c;
0 голосов
/ 11 июля 2010

Используйте простой триг.Нормальное расстояние «по прямой линии» - это гипотенуза прямоугольного треугольника, образованная двумя точками, которые вы имеете в виду на обоих концах гипотенузы.

Просто посмотрите на это http://en.wikipedia.org/wiki/Hypotenuse ирешение должно стать ясным.

...