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

1С 8.3 : Как в 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 |  Дата:   Прочитано: 15160
 +5 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
Вывод результата запроса на форму УП в таблицу значений (аналог СоздатьКолонки() для УП) 2
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки(): Процедура ПоискНажатие(Элемент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокументоОборот.Этап, | ДокументоОборот.Отдел, | Докуме
История развития запросов: Простые запросы, Временные таблицы, Пакетные запросы 0
Простые запросы Разберем, как изменялся (скорее дополнялся) синтаксис текстов запросов на простом примере: Проводится документ Расходная содержащая в табличной части Товары список продаваемых товаров и количество. При проведении такого документа не
Как в запросе объединить несколько значений в один столбец отобрав по условию? 1
Бывают ситуации, особенно когда формируешь отчеты по проводкам, где надо вывести отчет по одному типу значений и эти значения могут быть в разных колонках регистра. В примере ниже, необходимо собрать отчет в разбивке по Номенклатурным группам. Про
Как получить координаты выделенной области на Яндекс Карте? 3
На одном проекте потребовалось получать координаты выделенной области на яндекс карте, после долгих изучений получилось следующее: Вид Формы: На карте выделяете объект, нажимаете кнопку Получить координаты выделенной области и заполняется таб
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.