Гугл-карты с третьей версией API научились рисовать путь между двумя пунктами на Земле по «большому кругу» (great circle), поэтому без жалости можно отправить в архив фрагмент кода, вычисляющий координаты дуги.
my $span = 10;
$span = int($distance) / 100 if int($distance) > $span * 100;
my $arc = (new Geo::GoogleEarth::Pluggable)
->GreatCircleArcSegment(
startPoint => {
lat => $coords_pair[0],
lon => $coords_pair[1]
},
endPoint => {
lat => $coords_pair[2],
lon => $coords_pair[3]
},
span => $span * 1000, # meters
);
my $arcNode = add_node($pairNode, 'arc');
for (@{$arc->coordinates}) {
add_node(
$arcNode,
'point', {
lat => $_->lat,
long => $_->lon,
},
);
}
Еще большая часть ушла из яваскрипта. Перед этим мой коллега проверил, насколько расходятся пути Гугла и наш. Чтобы заметить разницу, пришлось сократить число точек, иначе обе линии полностью сливались.

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