У меня есть некоторые проблемы с вычислением большого расстояния по кругу с помощью карты.
Контекст: 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).