Geo::GoogleEarth::Pluggable::Plugin::GreatCircle

| Нет комментариев

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

На спане есть модуль с длинным названием Geo::GoogleEarth::Pluggable::Plugin::GreatCircle, который помогает рассчитать траекторию: по двум заданным точкам он формирует список точек, которые отрезками прямых с той или иной точностью рисуют кратчайший путь по поверхности планеты.

Эта программа печатает координаты 93-х точек между Москвой и Киевом.

use v5.10;
use strict;
use Geo::GoogleEarth::Pluggable;

my @moscow = (55.7522, 37.6156);
my @kiev = (50.4333, 30.5167);

my $arc =
   (new Geo::GoogleEarth::Pluggable)->GreatCircleArcSegment(
    startPoint => {lat => $moscow[1], lon => $moscow[0]},
    endPoint   => {lat => $kiev[1],   lon => $kiev[0]}
);

for (@{$arc->coordinates}) {
    say $_->lat, ', ', $_->lon;
}

Точность построения (иными словами, число точек и длина отрезков) возможно регулировать параметром span, переданным при вызове метода GreatCircleArcSegment. По умолчанию путь разбивается на участки длиной по 10 километров.

В ходе расчета пути выполняются другие интересные геометрические задачи, например, поиск расстояния между двумя точками, или поиск точки, которая удалена от данной на заданное расстояние в нужном направлении.

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

А вот как выглядит путь Харьков — Хабаровск.

Расстояние между Харьковом и Хабаровском

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 18.01.2010 23:31. Автор — ash.

Предыдущая запись — Perlburg

Следующая запись — Про MSN-бот

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.