Здравствуйте,
Уже достаточное время мучаюсь с проблемой: пытаюсь рассчитать расстояние между двумя произвольными точками, которые находятся на удалении от 30 до 1500 метров друг от друга.
Используется PHP:
$cx=31.319738; //координата x первой точки
$cy=60.901638; //координата y первой точки
$x=31.333312; //координата x второй точки
$y=60.933981; //координата y второй точки
$mx=abs($cx-$x); //высчитываем разницу иксов (первый катет прямоугольного треугольника), функция abs(x) - возвращает модуль числаx x
$my=abs($cy-$y); //высчитываем разницу игреков (второй катет прямоугольного треугольника)
$dist=sqrt(pow($mx,2)+pow($my,2)); //Получаем расстояние до метро (длину гипотенузы по правилу гипотенуза равна корню из суммы квадратов катетов)
Если непонятно, поясняю: я представляю, что расстояние между двумя точками - это гипотенуза прямоугольного треугольника. Тогда разница между иксами каждой из двух точек будет одним из катетов, а другим катетом будет разница игреков этих же двух точек. Тогда, посчитав разницы иксов и игреков, можно по формуле вычислить длину гипотенузы (т.е. расстояние между двумя точками).
Я знаю, что это правило хорошо работает для декартовой системы координат, однако, оно должно более-менее работать и через координаты longlat, т.к. измеряемое расстояние между двумя точками пренебрежимо мало (от 30 до 1500 метров).
Однако, расстояние по данному алгоритму вычисляется неверно (например, расстояние1, расчитанное по этому алгоритму, превышает расстояние2 всего на 13%, тогда как в реальности расстояние1 равно 1450 метров, я расстояние2 равно 970 метров, то есть на самом делие разница достигает почти 50%).
Если кто-то сможет помочь, буду очень признателен.
С уважением, Александр.