Horizontpanorama als simple Linien für SkySafari aus TXT-File erzeugen

Status
Es sind keine weiteren Antworten möglich.

markusd112

Aktives Mitglied
Hallo,

leider bietet SkySafari nur die Möglichkeit, eine Grafik als benutzerdefinierten Horizont zu hinterlegen.

Ich habe eine Textdatei mit Heading und Höhe in Grad, die ich z.B. in Stellarium, NINA, SkyTools4 etc. verwenden kann.

Gibt es irgendein Tool, mit dem ich aus diesem Textfile eine Grafikdatei erzeugen kann, um sie als Horizont in SkySafari zu hinterlegen?

Vielleicht auch mittels eines kleinen Scripts, denn eigentlich ist es recht simpel:
- Textfile parsen und die Wertepaare extrahieren
- Grafik mit den Abmessungen 2048px (Breite) x 1024px Höhe erzeugen
- Linien anhand der Wertepaare zeichnen (X-Achse ist das Heading von links beginnend 0° = Nord bis 359° ganz rechts, Y-Achse ist die Höhe: 0° bis 90° Zenit)
- Bereich unterhalb der Linie füllen

Leider sind meine Programmierkenntnisse schon ziemlich eingerostet, aber vielleicht gibt es ja hier jemanden, für den ein kleines (z.B.) Python-Script eine Sache von wenigen Minuten ist, um so etwas zu erzeugen. Oder es gibt schon eine Software, die sowas kann?

Viele Grüße

Markus
 
Hallo Markus,

also sowas:
Eine Grafik, deren Größe genau 2048x1024px (BxH) ist und eine Linie über die gesamte Breite enthält. Unter der Linie undurchsichtig (bzw. teildurchsichtig) und oberhalb transparent. Die Linie selbst wird mit (x,y)-Koordinaten vorgegeben.
Dateiformat .png?
Ist das so in etwa korrekt?

cs,
harald

--
 
Hallo Harald,
ja genau, so in etwa. Die Textfiles enthalten zwei Werte in jeder Zeile: die erste Zahl gibt die Himmelsrichtung im Uhrzeigersinn in Grad an, wobei 0° = Norden ist. Der zweite Wert die Höhe der Horizontlinie, ebenfalls in Grad (0° = Waagerecht/Horizont, 90° = Zenit).

Ich habe zwischenzeitlich ein kleines Python-Script geschrieben, dass eine passende PNG-Datei erzeugt. Man muss nur noch mit GIMP o.ä. den schwarzen Bereich oberhalb der erzeugten Linie markieren und löschen, so dass es dort transparent wird (evtl. geht das auch direkt mit der Python-Lib, aber ich konnte auf die Schnelle keine Option dazu finden):

Python:
# Custom horizon creator für SkySafary Astronomy App
# by markusd112, 07.09.2023
#
# This little script imports a simple ASCII textfile called "Polygon.txt" and converts the
# heading and height information of an observing place to create a custom horizon graphics file
# that you can use with SkySafari Astronomy App. These textfiles are common used in several astronomy
# applications, like NINA, Stellarium, SkyTools4, etc.
# The script creates a PNG file named "MyLandscape.png" which you have to post process e.g. with GIMP to
# remove black background color above horizon line to get transparent background
#
# It is necessary that the PNG file has 32bit and the dimension of 2048px (width) x 1024px (height) to
# be accepted by SkySafari 7
#
# The textfile contains two values in each line separated by a space character:
# - the heading (0 degress = north to 359)
# - the height from 0 degrees (horizon) to 90 degrees (zenith)
#
# e.g.:
# 0 15
# 30 40
# 40 60
# 50 30
# 120 10
# 160 20
# 350 50
#
# There are some tools for smartphones to get the heading and height information using the camera, e.g. Geo Cam for android platform

from tkinter import *
from PIL import Image, ImageDraw

def main():
    master = Tk()
    w = Canvas(master, width=2048, height=1024)
    w.pack()
  
    image1 = Image.new("RGB", (2048, 1024))
    draw = ImageDraw.Draw(image1)
  
    Xalt = 0
    Yalt = 0
  
    with open("Polygon.txt", encoding="ascii") as lines:
        for line in lines:
            print(line)
            Punkt = line.split(" ")
            print("X = " + Punkt[0])
            print("Y = " + Punkt[1])
          
            X = int(Punkt[0]) * 2048 // 360
            Y = 1024 - ((int(Punkt[1])+90) * 1024 // 180)
            print(X, Y)
          
            w.create_line(Xalt, Yalt, X, Y, fill="yellow", width=3)
            draw.line(((Xalt, Yalt), (X, Y)), width=3, fill="yellow")
          
            Xalt = X
            Yalt = Y
          
  
  
    filename = "MyLandscape.png"
    image1.save(filename)
  
    mainloop()

if __name__ == "__main__":
    main()

Bei mir hat es damit nun wunderbar geklappt:
1694100965345.png


Mit der Methode erspart man sich das mühsame filmen eines 360° Panoramas. Die Himmelsrichtung und Höhe der Horizontlinie (Bäume, Nachbarhäuser, etc.) kann man z.B. mit der Android App Geo Cam sehr bequem ermitteln und dann die Textdatei damit schreiben.
Diese lässt sich dann bequem in Stellarium, NINA, etc. und nun auch in SkySafari nutzen.

Viele Grüße

Markus
 
Sehr schön! :y:
Wie sieht es da mit der ImageResolution aus? Was braucht man bzw. kann man das einstellen?
Persönlich würde ich ja den unteren Teil ganz leicht durchsichtig machen, aber das ist Geschmachssache.

Mit JavaScript ginge das wohl auch, allerdings weiß ich nicht genau wie dort die Canvas mit Transparenzen klarkommt. Für den Export als .png braucht man da auch ein entsprechendes Plugin/Repository zusätzlich.
Aber das sieht ja schon mal sehr gut aus. Der Vorteil von JS wäre eventuell noch eine mögliche Online-Bereitstellung. Werde mal ein wenig herumtesten, ob da was geht.

cs,
harald

--
 
Zuletzt bearbeitet:
Moin Harald,
die Bildgröße ist ja fest vorgegeben: 2048px x 1024px. Die Frage nach der Auflösung (Punkte pro Fläche) ergibt sich dadurch m.E. nicht, denn das ist ja davon abhängig, wie/wo es angezeigt wird.

Ja, Du hast Recht: man kann bei der Deckkraft der Fläche sicherlich noch optimieren. Oder eine kleine GUI (oder Kommandozeilenparameter) mit verschiedenen Einstellmöglichkeiten, auch Farbe, Liniendicke, etc. Auch dass der Teil über der Horizontlinie nicht direkt transparent ist, ist unschön.

Vielleicht ist die verwendete PIL-Library auch nicht ideal dafür geeignet und es gibt eine bessere Möglichkeit. Und auf jeden Fall: man kann das mit diversen Sprachen lösen, ich hab jetzt einfach mal zu Python gegriffen.

Wichtig war mir erstmal, mit wenig Aufwand zur passenden Horizont-Grafik für SS7 zu kommen. Idealerweise baut Simulation Curriculum direkt eine Import-Möglichkeit für eine solche Polygon-Textdatei ein, dann kann man sich diese Klimmzüge ersparen.

Gerne dürft Ihr alle für diesen Feature Request eine Stimme abgeben und ihn so nach vorne bringen, in der Hoffnung, dass er bald umgesetzt wird :) :


Mein Script darf natürlich gerne weiterverwendet und verbessert werden. Ich würde mich freuen, wenn Ihr Eure Verbesserungen der Allgemeinheit zur Verfügung stellt.

Viele Grüße

Markus
 
Status
Es sind keine weiteren Antworten möglich.
Zurück
Oben