Странный расчет большого круга - PullRequest
5 голосов
/ 28 октября 2010

У меня есть некоторые проблемы с вычислением большого расстояния по кругу с помощью карты.

Контекст: http://airports.palzkill.de/search/

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

Это работает нормально, только если центр круга близок к 0/0, а маркер радиуса не слишком далеко от него.Чем больше вы перемещаете какие-либо маркеры в «крайности», тем больше неких касательных все происходит и ничего не дает, кроме дерьма.

Это код, используемый для расчета обновлений, вы также можете найти веськод в файле JS js.js, строки с 146 по 184:

function searchmapupdate()
{   
rad_lat_radiuspos = (circleradiusmarker.getPosition().lat()*Math.PI/180);
rad_lon_radiuspos = (circleradiusmarker.getPosition().lng()*Math.PI/180);
rad_lat_circlecenter = (circlecentermarker.getPosition().lat()*Math.PI/180);
rad_lon_circlecenter = (circlecentermarker.getPosition().lng()*Math.PI/180);

circleradiusvar = Math.acos(Math.sin(rad_lat_circlecenter)*Math.sin(rad_lat_radiuspos)+Math.cos(rad_lat_circlecenter)*Math.cos(rad_lon_radiuspos)*Math.cos(rad_lon_circlecenter-rad_lon_radiuspos))*6371.01*1000;

if (isNaN(circleradiusvar)==false) circle.setOptions({center:circlecentermarker.getPosition(), radius:circleradiusvar});

document.getElementById("mapsearchhead").innerHTML = Math.round(circleradiusvar/1000);
}

Поскольку все это действительно вычисляет некоторый правильный вывод, я предполагаю, что сама математика не является полностью неправильной, я думаю, что есть только некоторые "исправительные"вещи отсутствуют?К сожалению, я абсолютно паршив в тригонометрии, поэтому я не имею ни малейшего понятия, что здесь может быть не так, или даже где начать искать идеи о том, как это исправить.

Марко

PS: IЗнайте, что из-за сферической природы проекции все это должно действовать «нелогично» вокруг полюсов.Но это не объясняет, что происходит, когда вы перемещаете оба маркера близко к линии даты вокруг экватора (0/179, 0 / -179).

1 Ответ

3 голосов
/ 29 октября 2010

Хорошо, после реализации еще немного кода, я фактически обнаружил ошибку в уравнении: используя lon, где я должен был использовать lat.

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

...