![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Cache |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.11.2007 Репутация: нет Всего: нет |
Здравствуйте!
Делаю проект на PHP и api яндекс карт Можно ли в PHP вычислить расстояние (например в метрах) между двумя точками на карте точки для примера: 37.63 55.75 и 37.61 55.75 между ними чуть больше 1 км. |
|||
|
||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А какие проблемы? Немного тригонометрии, гугла и магии ;) Радиус земли можно поискать в Гугле, остальное - в учебнике тригонометрии, магия - для демонстрации результата...
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Cache, а в АПИ нет никакого метода?
можно и посчитать, но для эллипсоида это сложнее, чем для шара. кроме того, что Земля - не идеальный эллипсоид. |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
Cache |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.11.2007 Репутация: нет Всего: нет |
skyboy, в API есть функция только для JS
расстояния, между которыми нужно будет искать длину пути, у меня совсем небольшие - около 100км., что по земным меркам не особо внушительно) поэтому и сфера должна подойти сейчас попробую написать скрипт, после - выложу исходник |
|||
|
||||
Cache |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.11.2007 Репутация: нет Всего: нет |
мм, вот например:
S = 111,2×arccos(sin φ1 × sin φ2 + cos φ1 × cos φ2 × cos (L2-L1)), где S - расстояние, км; φ1 и L1 - широта и долгота точки 1 (для северной широты и восточной долготы со знаком плюс, для южной широты и западной долготы со знаком минус), градусы; φ2 и L2 - широта и долгота точки 2, градусы; константа 111,2 - средняя длина дуги в один градус на поверхности Земли, км. отсюда тогда все просто:
выдает - 2.44km но яндекс по тем же координатам выдает - 2.09 км. из-за чего такая погрешность? действительно из-за формы планеты? *UPDATE* попробовал еще 2 раза с другими координатами - погрешность стала гораздо ниже - на 25км - 200м в принципе меня такая ситуация устраивает, но если возможно что-то точнее - буду рад если поделитесь) всем спасибо! Это сообщение отредактировал(а) Cache - 12.3.2010, 19:04 |
|||
|
||||
wOOx |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 20.12.2009 Репутация: нет Всего: нет |
ну я бы вообще считал для плоскости
мне кажется, холмистость местности может повлиять на точность результата сильнее, чем форма планеты ![]() |
|||
|
||||
solenko |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Погрешность вызвана тем, что в одном градусе очень разное количество километров в зависимости от широты.
Сравните, сколько километов между меридианами на экваторе и на полюсе ) Добавлено через 3 минуты и 40 секунд ну, приведенный код и считает для плоскости -------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Мой экспириенс в тригонометрии невысок, однако меня смушает в этой формуле отсутствие магического числа Pi и тот факт, что синус - периодическая функция с периодом 2*Pi... Если вообразить себе гео-сферическую систему координат, вообразить себе , что земля нифига не геоид, а идеальная сфера, считать, что точки, между которыми нужно мерить расстояние расположены близко друг к другу, помянуть незлым тихим словом Евклида и наплевать на сферическую геометрию, порисовать все это добро на бумажке, немного бумажку почирикать, то вполне вероятно, получится что-то такое: длина минуты (1 градус) широты = 2*Pi*R/360, где Pi и в Африке Pi, а R - радиус Земли. Длина же минуты долготы будет примерно такой = 2*Pi*R*cos(M_PI*$s1/180)/360, где $s1 - одна из "широт" (они расположены близко!). Итого, формула вычисления расстояния по координатам, после не очень сложных сокращений, будет примерно такой.
Что дает нам 2.07км для заявленных координат. Примерно похоже на то, что дает нам гугл в неисповедимой мудрости его... Это сообщение отредактировал(а) ksnk - 13.3.2010, 12:02 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
||||
|
|||||
ReDComraD |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 7.6.2010 Репутация: нет Всего: нет |
ksnk - Спасибо Тебе большое, действительно формула Твоя дает очень точный результат и не надо API гугла загружать для высчита расстояния.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |