Преамбула: есть issue logged с API Карт Google, с просьбой исправить угол наклона улиц, чтобы компенсировать холмы. Я придумал обходное решение на стороне клиента с участием колдовства css на контейнере плитки. Вот моя функция поворота:Вычислить угол поворота для Карт Google Просмотр улиц
rotate: function() {
var tilesLoaded = setInterval(function() {
var tiles = $('map-canvas').getElementsByTagName('img');
for (var i=0; i<tiles.length; i++) {
if (tiles[i].src.indexOf(maps.panorama.getPano()) > -1) {
if (typeof maps.panorama.getPhotographerPov != 'undefined') {
var pov = maps.panorama.getPhotographerPov(),
pitch = pov.pitch,
cameraHeading = pov.heading;
/**************************
// I need help with my logic here.
**************************/
var yaw = pov.heading - 90;
if (yaw < 0) yaw += 360;
var scale = ((Math.abs(maps.heading - yaw)/90) - 1) * -1;
pitch = pov.pitch * scale;
tiles[i].parentNode.parentNode.style.transform = 'rotate(' + pitch + 'deg)';
clearInterval(tilesLoaded);
return;
}
}
}
}, 20);
}
Полный (более подробно комментировал) проверка концепции находится на this JSFiddle. Как ни странно, горизонт почти идеальный, если я вообще не делаю вычисления на примере в JSFiddle, но этот результат не согласован для каждого Lat/Lng. Это просто совпадение.
Итак, мне нужно вычислить рулон в заголовке клиента, учитывая заголовок клиента, заголовок фотографа и шаг фотографа. Предположим, что фотограф либо смотрит вверх, либо в гору, и pov.pitch
является превосходным (с минимальным или максимальным пределом). Как я могу рассчитать желаемый шаг, обращенный к стороне в определенной степени?
Редактировать: Я нашел уравнение, которое, кажется, работает очень хорошо. Я обновил код и скрипку. Хотя это, кажется, довольно близко к ответу, мой алгоритм является линейным. Я считаю, что правильное уравнение должно быть логарифмическим, что приводит к более тонким настройкам ближе к заголовку камеры и наоборот, в то время как регулировки слева и справа камеры больше.
Следует отметить, что, хотя я продолжаю вычислять 'maps.growX' способом, показанным в примере выше, я перешел к вычислению' maps.growY' как пропорции. Таким образом, соотношение сторон не изменяется. См. Скрипт для обновления. – rojo