#0
by IronDemon
Есть лог GPS-логера с координатами. Нужно рассчитать сколько проехала машина. Поиски привели к "формуле гаверсинуса" и "расстояние большого круга" Вот только как это на 1С перевести...
#2
by Fragster
у тебя же координаты на каждую секунду должны быть - так там вообще за 0% погреность принять можно
#11
by Злой Бобр
В код невчитывался, но суть в передаче в скуль файла (или таблицы) и получении назад результата. Можно даже с 1срр заморочиться.
#18
by IronDemon
lat="47.877987" lon="35.071194" lat="47.877289" lon="35.072243" lat="47.876556" lon="35.072796"
#19
by Адинэснег
рисуешь прямоугольник в голове, потом считаешь диагональ как в 5м классе, и умножаешь на 111 км/градус
#20
by Михаил Козлов
А atan2 в какой из 3-х ссылок упоминается? Что-то не увидел. Вся эта "сферичность" нужна только для немаленьких расстояний, когда сказывается сферичность Земли. Для небольших расстояний можно Землю считать плоской+сделать поправку (1 градус - 111 км).
#22
by Михаил Козлов
+20. Или формулу в ряд разложить. Наверное, будет 2-й член (разница в квадрате).
#26
by borozavr
в первой ссылке классный пример в Экселе, пробовал вводить разные данные 1я формула отлично считает, а там нет никаких ATAN2
#28
by Aleksey_3
Есть еще подъем в гору, или спуск с горы. Или например ты проехал 50 метров прямо, повернул на 90 грудосов и проехал еще 50 метров, т.е. реально ты проехал - 100 метров, а по координатам - 70 метров (длина гипотенузы < длины суммы катетов)
#37
by borozavr
Да у меня тоже есть )), там в примере 3 формулы расчета 1я через ACOS,остальные ATAN2 и ATAN. Пробовал вводить разные координаты-результаты совершенно одинаковые, при условии, что первая функция проще. Так что можно без джавы, стандарной 8 функцией.
#42
by supremum
+ В общем думаю самый простой вариант это взять длину дуги градуса широты и долготы для местности, погрешность будет, но не большая. Тогда длина дуги между двумя точками будет такая: длина пути = ((lon_1*d_Lat)^2+(lon_1*d_Lon)^2)^(1/2) где: lat_1 - длина одного градуса широты для местности lon_1 - длина одного градуса долготы для местности d_Lat=lat1-lon2 - разница широт d_Lon=lon1-lon2 - разница долгот.
#43
by zak555
ну и какие там проблемы вычисления ? lat="47.877987" lon="35.071194" lat="47.877289" lon="35.072243" lat="47.876556" lon="35.072796" расстояние == sqrt((47.877987 - 47.877289)^2 + (35.071194 - 35.072243)^2) + sqrt((47.877289 - 47.876556)^2 + (35.072243 - 35.072796)^2)
#47
by also
через яндекс.api можно...Он по своим картам может и маршрут проложить и расстояние вернуть
#54
by supremum
+ 1) Длина дуги окружности = радиус * угол в радианах. 2) На малых маштабах сферичностью можно принебречь
#57
by IronDemon
Уряяяяя. Функция ABS(Число) Если Число<0 Тогда Возврат -1*Число; Иначе Возврат Число; КонецЕсли; КонецФункции Процедура КнопкаВыполнитьНажатие(Кнопка) Пи=3.14; РадиусЗ = 6372795; Ширина1=47.877987; Долгота1=35.071194; Ширина2=47.877289; Долгота2=35.072243; Расстояние = РадиусЗ*ATAN(Sqrt(Pow(COS(Пи*Ширина2/180)*SIN(ABS(Пи*Долгота2/180-Пи*Долгота1/180)),2)+Pow(COS(Пи*Ширина1/180)*SIN(Пи*Ширина2/180)-SIN(Пи*Ширина1/180)*COS(Пи*Ширина2/180)*COS(ABS(Пи*Долгота2/180-Пи*Долгота1/180)),2))/(SIN(Пи*Ширина1/180)*SIN(Пи*Ширина2/180)+COS(Пи*Ширина1/180)*COS(Пи*Ширина2/180)*COS(ABS(Пи*Долгота2/180-Пи*Долгота1/180)))); Сообщить(Расстояние); КонецПроцедуры
#59
by Адинэснег
rulerDistance {Number} rulerDistance(point1, point2) Возвращает расстояние между двумя заданными точками (в метрах), если двигаться вдоль прямой соединяющей точки на карте. Используется для расчета расстояний в элементе управления "Линейка". Параметры:Имя Тип Описание point1 YMaps.GeoPoint Первая точка. point2 YMaps.GeoPoint Вторая точка. Возвращает:Тип Описание Number Расстояние "по линейке" между двумя заданными точками.
#63
by Кирпич
Вот из переделал. вроде работает Процедура РасстояниеПоКоординатам(StartLat,StartLong,EndLat,EndLong,Distance,Bearing) // Передаваемые широта/долгота в градусах и сотых долях //StartLat: double; // Начальная широта //StartLong: double; // Начальная долгота //EndLat: double; // Конечная широта //EndLong: double; // Конечная долгота //// Переменные, используемые для вычисления смещения и расстояния //fPhimean: Double; // Средняя широта //fdLambda: Double; // Разница между двумя значениями долготы //fdPhi: Double; // Разница между двумя значениями широты //fAlpha: Double; // Смещение //fRho: Double; // Меридианский радиус кривизны //fNu: Double; // Поперечный радиус кривизны //fR: Double; // Радиус сферы Земли //fz: Double; // Угловое расстояние от центра сфероида //fTemp: Double; // Временная переменная, использующаяся в вычислениях //Distance: Double; // Вычисленное расстояния в метрах //Bearing: Double; // Вычисленное от и до смещение // Константы, используемые для вычисления смещения и расстояния D2R = 0.017453; // Константа для преобразования градусов в радианы R2D = 57.295781; // Константа для преобразования радиан в градусы a = 6378137.0; // Основные полуоси b = 6356752.314245; // Неосновные полуоси e2 = 0.006739496742337; // Квадрат эксцентричности эллипсоида f = 0.003352810664747; // Выравнивание эллипсоида fdLambda = (StartLong - EndLong) * D2R; fdPhi = (StartLat - EndLat) * D2R; fPhimean = ((StartLat + EndLat) / 2.0) * D2R; // Вычисляем меридианные и поперечные радиусы кривизны средней широты fTemp = 1 - e2 * (Pow(Sin(fPhimean), 2)); fRho = (a * (1 - e2)) / Pow(fTemp, 1.5); fNu = a / (Sqrt(1 - e2 * (Sin(fPhimean) * Sin(fPhimean)))); // Вычисляем угловое расстояние fz = Sqrt(Pow(Sin(fdPhi / 2.0), 2) + Cos(EndLat * D2R) * Cos(StartLat * D2R) * Pow(Sin(fdLambda / 2.0), 2)); fz = 2 * ASin(fz); // Вычисляем смещение fAlpha = Cos(EndLat * D2R) * Sin(fdLambda) * 1 / Sin(fz); fAlpha = ASin(fAlpha); // Вычисляем радиус Земли fR = (fRho * fNu) / ((fRho * Pow(Sin(fAlpha), 2)) + (fNu * Pow(Cos(fAlpha), 2))); // Получаем смещение и расстояние Distance = (fz * fR); AbsAD = fAlpha * R2D; if AbsAD < 0 then AbsAD = AbsAD * (-1); endif; if ((StartLat < EndLat) and (StartLong < EndLong)) then Bearing = AbsAD; elsif ((StartLat < EndLat) and (StartLong > EndLong)) then Bearing = 360 - AbsAD; elsif ((StartLat > EndLat) and (StartLong > EndLong)) then Bearing = 180 + AbsAD; elsif ((StartLat > EndLat) and (StartLong < EndLong)) then Bearing = 180 - AbsAD; endif; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) Distance = 0; Bearing = 0; //StartLat = 55.791444; // Начальная широта //StartLong = 37.665028; // Начальная долгота //EndLat = 55.791589; // Конечная широта //EndLong = 37.669148; // Конечная долгота StartLat = 47.877987; // Начальная широта StartLong = 35.071194; // Начальная долгота EndLat = 47.877289; // Конечная широта EndLong = 35.072243; // Конечная долгота РасстояниеПоКоординатам(StartLat,StartLong,EndLat,EndLong,Distance,Bearing); Сообщить("Distance (расстояние) = Расстояние в метрах " + Distance); Сообщить("Bearing (смещение) = Смещение в градусах " + Bearing); КонецПроцедуры
#64
by ИгрунЛего
можешь сдуть с проекта: freefin.ucoz.org в восьмерошной демке модули форм не закрыты.
#69
by ИгрунЛего
На продажную версию пароль. Демку качай. В ней нет возможности добавления регионов, а в остальном и математика и хранение и слив с устройств да всё остальное присутствуют. Модально.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Выбор ячейки таблицы значений одним кликом
- Двойное проведение одного документа. Плохой тон?
- Из поля со списком в строку справочника 1с 7.7
- Удаление строк из регистра сведений и физические таблицы.
- Про унифицированную форму Т-54а
- Как из базы, являющейся центральным узлом, сделать подчиненную?
- Анализ работы пользователей (в виде отчета)
- Как прочитать в xml номер переданного сообщения
- v8: УТ - запрет скидки на номенклатуру
- Вопрос по Excel . имеется надо преобразовать число в текст (формат денежный) +
- Как программно настроить вид колонок?
- Ошибка при групповой обработке справочников
- V8: "Недостачно памяти" в 1С:Рознице при редактировании шаблонов этикеток
- Автовысота строки в динамическом списке
- Какие ERP системы наиболее распространены в США?
- Помогите с запросом по ОС
- Как быстро проверить заблокирован ли документ?
- 1с розница магазин одежды и сканер ШК
- Как скрыть лишние меню (кнопку) в подменю
- УПП 1.2.32.1 Оплата по среднему зарабоотку не считает средний дневной заработок