helpf.pro
Регистрация
 +5 
Распечатать

1С 8.2 УП : Как в 1С посчитать расстояние между двумя географическими координатами?

На одном проекте была платная работа с картами и отображением складов на них, часто требовалось рассчитать расстояние между географическими координатами.

Земля может быть описана как сфера, поэтому для вычисления расстояния между точками на поверхности земли мы можем использовать уравнения для расчета сферического расстояния большого круга. При расчете мы берем сферу радиусом 6372795 метров. Ввиду того что земля на самом деле не сфера, а эллипсоид, - пограшность вычисления расстояния может составлять около 0.5%.

В результате были использованы следующие функции:

Код 1C v 8.3
 
Функция ABS(Число) 
   Если Число<0 Тогда 
       Возврат -1*Число; 
   Иначе 
       Возврат Число; 
   КонецЕсли; 
КонецФункции 

Функция РастояниеВМетрахОтДо(Ширина1,Долгота1,Ширина2,Долгота2)
Пи=3.14; РадиусЗ = 6372795; 
Расстояние = РадиусЗ*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)))); 
Возврат Расстояние;     
КонецФункции

//Пример 2
Функция ПросчитатьРастояниеОтДо(ШиротаКоординаты1,ДолготаКоординаты1,ШиротаКоординаты2,ДолготаКоординаты2)
//    cos(d) = sin(φА)*sin(φB) + cos(φА)*cos(φB)*cos(λА − λB),
//    где φА и φB & широты, λА, λB & долготы данных пунктов, d & расстояние между пунктами, измеряемое в радианах 
//      длиной дуги большого круга земного шара. 
//    Расстояние между пунктами, измеряемое в километрах, определяется по формуле:
//    L = d·R,
//    где R = 6371 км & средний радиус земного шара.
    Возврат (ASin(sin(ШиротаКоординаты1)*sin(ШиротаКоординаты2) + cos(ШиротаКоординаты1)*cos(ШиротаКоординаты2)*cos(ДолготаКоординаты1 - ДолготаКоординаты2)))*6371;     
КонецФункции
Разместил:   Версии: | 8.2 УП | 8.3 |  Дата:   Прочитано: 15159
 +5 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое
ZIP-архив Создание 0
Для того чтобы записать файлы в ZIP-архив необходимо выполнить несколько простых действий: * Создать архив с необходимыми параметрами, в который будут помещаться файлы. * Поместить в архив необходимые файлы. * Записать архив. Создание объекта За
В чем разница между ОБЪЕДИНИТЬ и ОБЪЕДИНИТЬ ВСЕ в языке запросов 1С 12
Цитата из справки 1С: " По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные РАЗНЫМИ запросами, заменяются одной . Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое
Временные таблицы в отчетах СКД 0
Нужно в отчете СКД Связать Данные из Регистра Накопления ВзаиморасчетыСРаботниками и Табличной Части Документа ЗарплатаКВыплате по Ссылке на Документ и ФизЛицу! И вывести полученные данные за указанный Период(с ДатаН по ДатаК) - Запрос будет такой:
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.