gifts2017

Расчет расстояния между географическими точками, определение вхождения географической точки в окружность, на карте яндекса средствами 1С

Опубликовал Oleg Smolovyk (olegsmall) в раздел Обработки - Универсальные обработки

Обработка позволяет рассчитывать расстояния между двумя географическими координатами средствами 1С.
Также показан пример определения попадания точки на карте в круглую область с заданным радиусом.
Для наглядности все это выведено на яндекс карты.

Как-то недавно передо мной стала задача определения точек остановки транспорта в разрешенных и неразрешенных местах. Мне были даны координаты всех точек остановки на маршруте и области разрешенных остановок. Каждая область представляла из себя круг, который был описан координатами центра и радиусом.

Идея сводилась к тому, чтобы проверять вхождение каждой точки остановки транспорта в круглые области разрешенных остановок, а если быть точнее, то к расчету расстояния от точки остановки до центра круговой области и сравнение этого расстояния с радиусом этой области.

Долгие поиски в интернете не давали достойного ответа на решение такой, с первого взгляда простой, задачи. 
А задача оказалась совсем не простой.

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

Для расчета использована модифицированная формула гаверсинусов.

Для расчета расстояния между двумя координатами не требуется подключение никаких картографических сервисов, все расчеты выполняются локально средствами 1С. Яндекс карта в данной обработке используется только для наглядного отоборажения возможностей формулы, а также для ее тестирования.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Определение расстояния между точками на карте яндекса средствами 1с v1
.epf 10,56Kb
24.12.15
43
.epf 1 10,56Kb 43 Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Ivan Kravchenko (i.d.Kravchenko) 25.12.15 09:46
2. Oleg Smolovyk (olegsmall) 25.12.15 11:47
3. Андрей Суровов (Andris_infostart) 30.12.15 10:44
"рассчитывать расстояния между двумя географическими координатами средствами 1С"
olegsmall, Вы определяете расстояние по прямой от А до Б?
4. Oleg Smolovyk (olegsmall) 30.12.15 11:35
Да, по прямой, по поверхности шара (Земли).
У меня она используется для двух задач:
1. Попадание точки в определенную область, описанную окружностью (в данном случае точка попадает в окружность если расстояние от точки до центра окружности меньше радиуса окружности);
2. В алгоритме определения мест остановки транспортных средств (тут сверяются все рядом стоящие точки маршрута и если расстояние от Точки1 до слудующей точки "Точка2" меньше 10 метров тогда считается что движения небыло и Точка2 есть точкой остановки. Шаг регистрации точек в базе данных 30 сек)
5. Андрей Суровов (Andris_infostart) 30.12.15 11:57
(4) olegsmall, спасибо.
В своё время была необходимость вычислять расстояние ближайшего реального пути (автодороги, а не пешехода) до точки, зная координаты. Подумал, что у Вас такое реализовано, а тут всё проще :)

6. Oleg Smolovyk (olegsmall) 30.12.15 12:07
В вашей задаче не обойтись без картографических сервисов. Вот к примеру построитель маршрута от яндекса Яндекс API
7. Alexander Shvets (Alexander.Shvets) 30.12.15 12:36
8. Вадим Никонов (V.Nikonov) 30.12.15 14:31
Круто! Учет сферичности Земли! При расстояниях между точками около 100 км, какова разница между плоским и сферическим представлением поверхности? А координаты вы наверное обрабатываете которые получены с Военных систем определения позиционирования? ;-)
9. Alexander Shvets (Alexander.Shvets) 30.12.15 15:15
 &НаСервере
Процедура ПросчитатьРастояниеОтДо(Координаты1,Координаты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))))*6571
	
КонецПроцедуры 
...Показать Скрыть


Погрешность на 100 км составляет +/- 0,1 км
10. Андрей Суровов (Andris_infostart) 30.12.15 17:03
(9) Alexander.Shvets, R = 6371 км — средний радиус земного шара
как раз "играя" этим коэффициентом, в зависимости от реальных координат можно добиться уменьшения погрешности.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа