Категории
   
 
 
 Популярные
   
 
 
 
 
  Солнце на Google Street View
Категория: Солнце | Автор: daybit | (2017-03-11 21:42)
  Осуществил давнюю задумку. Удалось совместить уличные панорамы от гугла с моим софтом, отображающим ход солнца и аналеммы для выбранной географиской точки.

Сначала дам ссылку на сервис и опишу управляющие клавиши (в основном это клавиши со стрелками), а затем расскажу некоторые детали.

daybit.ru/sun

* стрелка Вправо - увеличивает время на 1 час (с Shift - поминутно), стрелка Влево - уменьшает;
* стрелка Вверх переходит на 22 число следующего месяца, с Shift - перемещает в среднем по неделе, точнее по 1, 8, 15, 22 числам месяцев; стрелка Вниз - то же самое в обратную сторону;
* A - вкл/выкл азимутальной сетки координат;
* I - вкл/выкл пояса аналемм;
* U - увеличение часового пояса (с Shift - уменьшение); при этом отдельно выделяется не только гринвичская полуденная аналемма, но и локальная 12 часовая для выбранного часового пояса;
* = - вкл/выкл правого окошка с картой гугл.

Стартовая точка - около башни Останкино.

https//daybit.ru/img3/170311_solnce_streetview_01_.jpg

Интересующий пункт выбирайте либо кликом по карте (туда устанавливается маркер), либо поиском (вбиваете координаты в формате "широта, долгота" или название). Соответствие панорамы маркеру текущей позиции не гарантировано, поскольку покрытие мира панорамами не полное. Более того, это один из существенных недостатков для наших ближайших соседей: Казахстана и Белоруссии. Там Street View отсутствует:

https//daybit.ru/img3/170311_solnce_streetview_02_.jpg

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

***********************

Теперь чуть подробнее о предыстории.

В январе я нашёл прожку StreetView Grabber, с помощью которой оказалось легко тащить сферические панорамы с гугло-карт, причем эти панорамы были сразу в эквидистантном формате. Оставалось лишь совместить их с моим скриптом по азимуту - и готово. Свои изыскания я закинул в несколько мест, например на пикабу, и народ вроде даже оценил.

Потом в конце января я закинул в яндекс предложение об отображении хода солнца на яндекс-картах (уличные панорамы), дав ссылку на уже сделанную единичную панораму, они ответили через несколько дней: "Спасибо за действительно очень интересное предложение, но пока, к сожалению, мы не имеем возможности для создания такого функционала на карте." И предложили свой АПИ для самостоятельной разработки. Я бы может и воспользовался, но по прошествии времени мне вдруг пришло в голову, что наверняка кто-то уже постарался и совместил движок threejs (на котором у меня закручена солнечная механика) с гугл-панорамами. Так и вышло - с ходу попались две разработки, я их покрутил-повертел, и в результате остановился на этой - GSVPano.js. Состыковать в лоб не вышло, поэтому к гугло-панорамному движку стал постепенно прикручивать солнце, стороны света и прочее, перетаскивая из своего старого скрипта и удаляя ненужный функционал - например возможность менять клавишами широту и долготу (ведь теперь есть жесткая привязка к координатам).

Если с азимутом (heading) я разобрался довольно быстро, то на двух других углах, tilt и roll, я подвис на отличненько. Tilt - это угол наклона вниз и вверх по ходу движения гугломобиля, то есть с горки или в горку. Roll - противоположный наклон, вокруг оси, продольной движению гугломобиля. Там значения достигали всего лишь нескольких градусов, в принципе можно было проигнорировать, но во-первых было жалко вот так выкидывать небесполезную информацию, во-вторых на самом сайте гугло-карт эти же панорамы демонстрировали отличную параллельность уровня горизонта верхнему и нижнему краям монитора, а в моем движке горизонт был местами, что называется, неприлично завален.

Начал разбираться. Выяснилось, что последовательное применение вращения вокруг трех осей - это кошмар какой-то. ) Если двумя, roll и tilt, поскольку они малы, довольно быстро удалось совместить горизонт с моим горизонтом, то применение третьего вращения (heading - азимут) превращало горизонт в какую-то фигню. Причём мне было непонятно, как это вообще возможно, ведь если я вращаю панораму вокруг вертикальной оси, то уже совмещенный горизонт не должен уплывать. Наконец прикрутил к управляющим клавишам все эти вращения, и натурально обалдел. Там не просто странные вращения получались, а вообще какие-то хитрые восьмерки, вплоть до отсутствия всякого вращения.

Как потом выяснил, это отсутствие вращения вокруг одной из осей называется Gimble lock - вот занятный видос на эту тему. Также понял, что надо использовать неведомые мне катернионы, посмотрел как это мне делать в threejs, нашел реализацию, из которой и вытащил нужный мне код.

В общем, я лишь пощупал тему катернионов, и, честно признаться, не особенно-то её понял. В частности, эти катернионы мне конечно помогли, но продолжили странное поведение, однако мне удалось в первом приближении решить проблему "катернионским" поворотом вокруг смещённой (предыдущими двумя поворотами тилт и ролл) вертикальной оси, чем я и удовольствовался.

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

В общем, теперь эту софтину нужно тестировать, искать баги, исправлять. В частности один баг я сегодня уже обнаружил около Эйфелевой башни - в одной точке не было информации об азимуте, и панорама оказалась повёрнута неверно относительно аналемм - разумеется это никуда не годится, буду исправлять. Найдёте ещё баги - рассказывайте.


 




----
 
 Календарь
 
« Апрель 2017 »
Пн Вт Ср Чт Пт Сб Вс
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
 
 
Архив сайта
   
 
 
© 2012-2015 daybit
Движок: NG CMS
SQL запросов: 7 | Генерация страницы: 0.08 сек 
Яндекс.Метрика