Моя цель состоит в том, чтобы вычислить количество часов для данного дня, в течение которых солнце светит в данном месте, используя Python, при условии ясного неба. Проблема возникает из-за поиска недвижимости. Я хотел бы знать, сколько солнца я действительно получу от некоторой собственности, чтобы мне не приходилось полагаться на заявления, сделанные продавцом недвижимости, и я мог бы судить об объекте исключительно по адресу. Я ищу в районе с несколькими близлежащими горами, которые следует учитывать при расчете. Подход, который я хотел бы использовать, следующий:
- В течение всего года (с 1.1.2020 по 31.12.2020) с заданным временным разрешением (например, в минутах) вычислить высоту и азимут углы солнца для определенного местоположения.
- Найдите angular высоту ближайших препятствий, если смотреть с места, получая пары значений азимута и углов высоты. Это могут быть деревья, постройки или уже упомянутые горы. Предположим, что деревья и здания незначительны, и это в основном горы, которые забирают солнце.
- Каждый день проверяйте каждый раз с заданным разрешением, не превышает ли угол высоты Солнца высоту угол препятствия в азимутальном положении солнца. Тогда для каждого дня года я могу узнать, в какое время видно солнце.
Шаги 1 и 3 просты. Для шага 1 я могу использовать, например, модуль pysolar Python. Шаг 2 более сложный. Если бы я стоял на совершенно плоской плоскости, которая простирается далеко до горизонта, высота препятствия была бы 0 для всех азимутальных углов. Если бы поблизости была гора, мне нужно было бы знать форму горы, как видно с места. К сожалению, я даже не знаю, с чего начать решение шага 2, и я не знаю, как назвать эту проблему, т.е. я не знаю, как найти решение в Google. В лучшем случае был бы модуль Python, который будет выполнять эти вычисления за меня, например, подключаясь к данным топографии на основе OpenStreetMap или других сервисов. Если такой модуль не существует, мне пришлось бы вручную запрограммировать доступ к данным топографии, а затем выполнить какой-либо тип поиска по сетке - разделить ландшафт на мелкую сетку (возможно, сферические координаты), вычислить высоту и азимутальный угол точек сетки как видно из местоположения (с учетом кривизны земли и высоты в местоположении) и найти максимум для данного азимутального угла. Есть ли более простые способы сделать это? Существуют ли Python модули, которые это делают?