iPad Sun Calculator with Google Maps Support
I am a DIY learner and don‘t have a professional coding education. So I apologize upfront for not having structured my code as a professional would do.
The reason I post my project is to show what you can achieve as a non-professional by just examining the Pythonista examples program folders in Pythonista App, researching omz forum and stackoverflow.
The application I wrote calculates the Sun path coordinates including sunrise, noon and sunset data (direction and height in degrees) for a given day for any place on earth. This works completely offline including timezone deviation.
In addition to that, moon data is fetched from a server in Norway that offers a free moon data API. Based on that data I calculate moon phase, illumination and dates for coming new moon and full moon on my own.
A satellite picture is being taken from the given location and also a world map overview where you can see your selected spot.
The app provides a possibility to generate ODT and PDF report files (examples to be found in the linked zip file). You need a free Cloudmersive API key for PDF generation though. For ODT you need odfpy module (see installation manual which is also included) and there is also a free Open Office Distribution called AO Office in the Apple AppStore.
You can create, edit and delete new locations and please note that you can also change the satellite picture map size in the report settings menu for visualizing bigger geological structures. There is also an options switch in the report settings menu that includes moon data into the ODT/PDF report instead of the satellite picture.
There is also a Google Maps webview integrated for finding new locations to copying in your clipboard and processing from there. You need to zoom in and long press a location first, then press share button and close the app to properly adapt a location from Google maps web app. The Google Maps web app provides more clipboard information than Apple Maps so I used that one. The world map picture is fetched from Apple Maps though.
I know you can not only integrate Google Maps but also draw directly draw paths and spots into the live application that runs as a sub view in your app. I don‘t know yet how to do this however.
I hope you don’t face installation problems and that some of you bite your way through the installation process and give it a try.
Btw. the app is iPad only and refuses to work on iPhones (Maybe I do an iPhone version lateron).
[Edit: Dropbox archive link removed and replaced with GitHub link]
must switch to raw view and manually select, copy and paste which is a pain when copying big scripts.
As soon you know the (permanent) url of the raw version, this little script downloads the .py
url = 'https://raw.githubusercontent.com/your_user/..../suncalc.py' data = requests.get(url).content with open('suncalc.py', mode='wb') as out_file: out_file.write(data)
Thus it is easy to write, for instance, a little tool in the share sheet to download any GitHub file from its raw page.
See also my
DownloadGithubRawFile.pyin https://github.com/cvpe/Pythonista-scripts. Check its readme and its usage of folder_picker
@cvp Thank you very much for these little helpers making life easier with Github.
@ccc The github repo for the ipad version of SunCalc has just been created.
Can you please check if you can access it the same way as everyone else does? It is the first time ever I create something with github myself, I was a myself a passive github downloader until now.
I will also create a separate iPhone release, but this will take some more days. I have to translate ui changes to English and I also want to use JSON instead of pyui successfully, so the user has less manual installation steps.
Thank you for giving a short feedback if you could properly access and import all files.
Can you please check if you can access it the same way as everyone else does
The iPhone version is ready and uploaded to a separate github repository:
More compact ui
Weekeday abbreviations in English now (I forgot to translate
No more manual renaming of pyui and ttf required for local installation - it works with json and txt suffix now
I used ccc‘s optimized iPad code as a starting point for the iPhone version - still I had to put the „import arrow“ Statement at the end of the import block due to overwrite problems (ccc put it at a place where it fits better into the readability of the Code)
I still have too much cyclomatic complexity and after I re-placed the „import arrow“ Statement github sent me a message that lint tests failed. The Script works fine though, I still must learn what clean code is about.
Please see below in the Screenshots the way to copy new locations to clipboard from Google Maps to process the clipboard data in the app for calculations
This post is deleted!last edited by
For everyone who has already downloaded the App from Github, please go to
for iPad and
and import the current file suncalc.py from there to your local Pythonista app directory.
When you use „My Location“ and „Current date“ the app did not recognize switch to Standard time since Oct 31st 2021.
This should now be fixed on both iPhone and ipad.
Hello, I added an additional script to both archives
This program (works both on iPad and iPhone) shows instant sun data of your current location at the current time, no matter where in the world you are.
The program works offline, you only need GPS enabled. A correct timezone recognition is implemented, too.
This program was originally supposed to be a widget but Pythonista won‘t display it because it is too complex.
Instead, I released it as a regular Pythonista Script. I hope it is useful to some of you.
Please find my latest addition for the iPhone version: a sun compass that uses the iPhone magnetometer and GPS.
The compass is precise, but you might need to calibrate the compass by moving the iPhone in the shape of a horizontal „8“.
When using the compass, hold the iPhone horizontal and parallel to the ground and rotate without rolling or pitching your phone, otherwise the compass fails.
I don’t know the magic the iOS compass app from Apple does to keep the value stable even if you roll and pitch the phone around.
Thecompass is realtime-tracking the time, your heading and the sun position and the app stays permanently open, but the GPS coordinate are not updated permanently, I decided it to be CPU waste to do so.
Instead, you get a position refresh at each new launch.
The app recognizes your time zone and DST Status, also if the sun does not rise or set at all. It works all offline, only GPS is required.
I had also memory leak issues with ui.imageview and bytesio first and switched to using scene. The app ran much longer but Pythonista still crashed. I finally fixed the issue by placing a gc command at the end of my while loop.
I stopped measuring run time with active Display after 1 hour. Note that your battery is being sucked empty quicker when the app is running.
Roll and pitch values of your iPhone for optimal horizontal positioning of your compass.
The values in the upper right corner must be both < 0.009xx in order to show the same heading as the official Apple iPhone compass app, given there are no other disturbing influences on the magnetometer.
As I already said above, the official iPhone compass app is more robust and you don’t need to treat it like a raw egg to ensure precision, but I don’t know what Apple does to achieve this.