Openseamap/DE:Seamap-Editor
Die Objekteigenschaften auf der Seekarte werden konform zur IHO-S-57 beschrieben. Dadurch ergibt sich für die Datenbank ein ziemlich kompliziertes Attribute-Schema, das selbst erfahrene Seeleute nicht kennen und nicht verstehen. Damit die Benutzer sich nicht damit auseinandersetzen müssen, trennen wir strikt in ein Frontend und ein Backend.
Geplant sind ein Online-Editor und ein Offline-Editor:
- Seamap-Editor, direkt auf der Karte (online) [1]
- JOSM-Editor "sea and coast", JOSM-Plugin für Seamap (offline)
Ein komfortabler Editor (GUI-Frontend) soll den Benutzer bei der Datenerfassung unterstützen. Übersichtliche Eingabemasken, eine intelligente Benutzerführung und integrierte Eingabeprüfung sollen die Datenerfassung simpel machen und schon bei der Eingabe für möglichst valide Daten sorgen.
Die erfassten Daten (Backend) werden automatisch in das Format S-57 überführt. Diese werden im XML-Format in die OSM-Datenbank gespeichert.
JOSM-Editor
Der JOSM-Editor ist als Plugin gestaltet. Ergänzend zu den JOSM-Vorlagen ermöglicht es komplexe regelbasierte Eingaben und Eingabeprüfungen.
Exemplarisch wird das Editor-Konzept am Beispiel "sea and coast" umgesetzt. Die dabei erzielten Ergebnisse und gemachten Erfahrungen können natürlich auch für JOSM als Ganzes genutzt und auf weitere Anwendungen übertragen werden.
Siehe auch Ticket 2327
Aufbau
- Plugin (Grundgerüst)
- Tags von JOSM-Objekten holen
- Eingabemaske anzeigen
- Eingaben entgegennehmen
- Eingabeprüfung
- alles zusammenführen und nach Regeln ergänzen und wieder in JOSM laden
Ideen zum Grundgerüst, Ideen zur JOSM-Schnittstelle, Mailingliste für Entwicklerfragen zu JOSM
Aufgaben
1. Aufrufbar über einen Menü-Eintrag, beispielsweise als Eintrag „Seezeichen“ in den Vorlagen.
2. Liste von Seezeichen als Icon. Der Benutzer soll mit dem Icon ein Objekt wählen.
3. Je nach gewähltem Objekt öffnet eine Eingabemaske, die nur objektrelevante Einträge zulässt
- Eingabemöglichkeiten sind: Icons, CheckBox, Radiobuttons, Listenfeld, Zahlen, Text
- sowie eingabespezifisch weitere Icons und Felder zur verzweigten Auswahl.
- Nur objektkonforme Einträge werden angeboten/zugelassen.
4. Alle Eingaben werden nach Regeln geprüft (Wertebereich, etc)
- Fehler verlangen Korrektur
- Freitext nur in den Feldern „Name“ und „Bemerkung“
5. Die Daten werden je nach Objekt nach Regeln automatisch mit weiteren Daten ergänzt:
- a) durch spezifische Verzweigungen und weitere manuelle Eingaben
- b) beim Hochladen automatisch zu einem S-57-konformen Datensatz
6. Der komplette Datensatz wird in die DB hochgeladen
Weitere Ideen:
7. Für alle Eingabefelder gibt es eine kontextsensitive Mouseover-Hilfe,
- und generelle Links zu den passenden Wiki-Seiten,
- damit auch Nicht-Seeleute damit umgehen können.
8. Regeln werden aus einer Regel-DB entnommen.
9. Begriffe, Hilfetexte, Übersetzungen der Begriffe und Hilfetexte
- werden aus einer Übersetzungs-DB entnommen.
Masken-Elemente
Alle Eingabeelemente können mit einem Standardwert vorbelegt sein. Dieser kann auch "unbekannt" lauten.
- Icon
- Wo immer möglich werden intuitiv-eindeutige Icons verwendet.
- Beispielsweise zur Auswahl der Seezeichen (Tonnen, Baken, etc.)
- Sie können auch der Steuerung des Editors dienen.
- Listenfeld
- Listenfelder enthalten eine festgelegte Werteliste.
- Die Werte werden immer in Landessprache angezeigt.
- Damit sie sprachübergreifend eindeutig sind, werden die Übersetzungen aus einer zentralen DB entnommen.
- Um Klicks zu sparen, ist die Liste erst ausgeklappt, nach Auswahl eines Wertes klappt sie zu einer Dropdown-Liste zusammen und lässt sich wie eine solche wieder öffnen.
- Checkbox
- Mehrere Checkboxen können zu einer Gruppe zusammengefasst werden.
- 0..n Checkboxen können in einer Gruppe ausgewählt sein.
- Sie können auch der Steuerung des Editors dienen.
- Gruppe von Radiobuttons
- Mehrere Radiobuttons sind zu einer Gruppe zusammengefasst.
- Nur einer aus der Gruppe kann ausgewählt sein.
- Textfeld
- Textfelder können in der Zeichenzahl begrenzt werden.
- Über Masken kann die Eingabe zusätzlich eingeschränkt werden.
- Fliesskommazahl
- Fliesskommazahlen werden mit einem Wertebereich begrenzt.
- Über Masken kann die Eingabe zusätzlich eingeschränkt werden.
- Als Komma ist auch der Punkt zugelassen.
- Notizfeld
- Zu jedem Objekt gibt es ein Notizfeld für detaillierte Bemerkungen.
- Darin sind mindestens Zeilenumbrüche möglich.
- Schlüssel
- Schlüssel werden aus der S-57 entnommen.
- In OSM werden sie hierarchisch gebildet, beginnend mit "seamap", getrennt durch Doppelpunkt ":"
- Array's werden hilfsweise hierarchisch mit einer im Schlüssel enthaltenen Indexzahl abgebildet.
- Werte, Wertelisten
- Werte werden immer in Landessprache angezeigt.
- Damit sie sprachübergreifend eindeutig sind, werden die Übersetzungen aus einer zentralen DB entnommen.
- Bezeichner
- Bezeichner und Überschriften werden immer in Landessprache angezeigt.
- Damit sie sprachübergreifend eindeutig sind, werden die Übersetzungen aus einer zentralen DB entnommen.
- MouseOver
- Zu jedem Element der Eingabemaske existiert ein Hilfetext, der bei MouseOver angezeigt wird.
- Hilfetexte werden immer in Landessprache angezeigt.
- Damit sie sprachübergreifend eindeutig sind, werden die Übersetzungen aus einer zentralen DB entnommen.
Eingabeprüfung
Um den Benutzer bestmöglich zu unterstützen und um logische Fehler und Tippfehler zu vermeiden, werden die Eingaben unmittelbar einer Prüfung unterzogen.
- Regeln
- Damit die Regeln eindeutig sind, werden sie aus einer zentralen DB entnommen.
- Hinweistexte
- Hinweistexte werden immer in Landessprache angezeigt.
- Damit sie sprachübergreifend eindeutig sind, werden die Übersetzungen aus einer zentralen DB entnommen.
Beispiel zu „erklärende Grafik“
- Übersicht
Die vier Kardinaltonnen sind rund um eine Untiefe gruppiert.
Jede Tonne ist klickbar und verzweigt zum entsprechenden Child-Eingabeformular.
Klickbar ist grossräumig der jeweilige Quadrant als Fläche.
- Seezeichen
Jedes Seezeichen wird aus den Elementen Tonnenkörper, Topzeichen, Lichtkegel zusammengesetzt. Entsprechend der Auswahl in den Auswahlfeldern wird das Ergebnis gleich grafisch in der Eingabemaske dargestellt:
Eingabemasken
In Vorlage
Deutsch: „Seezeichen“ (öffnet das Plugin) Englisch: „Seamark“
Darunter und darüber ein Trennstrich.
Bei Auswahl eines Seezeichens
Wenn der Cursor im Auswahl-Modus auf ein Seezeichen (seamark=...) gesetzt wird, öffnet automatisch das Plugin, liest die Attribute aus und zeigt diese in der passenden Maske und im Änderungsmodus an.
Übersicht Seezeichen
Dies ist die Eltern-Maske aller Seezeichen. Hier werden die Seezeichen in Gruppen zur Auswahl angeboten. Besonders häufige Seezeichen werden bereits auf dieser Ebene als Icon angeboten. Dabei werden die Icons erklärend in einer Grafik gezeigt.
In einer ersten Ausbaustufe sind dies:
Untiefentonne Untiefentonne Nord Untiefentonne Ost Untiefentonne Süd Untiefentonne West Einzelgefahr Fahrwassertonne Fahrwassertonne grün Fahrwassertonne rot Ansteuertonne Weitere Fahrwassertonnen Sonderzeichen Leuchtfeuer
Vorerst reicht eine klickbare Liste mit „Icon und Bezeichnung“.
- Beispiel zu „erklärende Grafik“
- Die vier Kardinaltonnen sind rund um eine Untiefe gruppiert.
- Jede Tonne ist klickbar und verzweigt zum entsprechenden Child-Eingabeformular.
- Klickbar ist grossräumig der jeweilige Quadrant als Fläche.
- Mouseover-Hilfe für
- Weitere Fahrwassertonnen
- Sonderzeichen
- Kardinalzeichen
Je nach Auswahl in der Eltern-Maske „Übersicht Seezeichen“ wird angezeigt:
- Bei „Untiefentonne Nord“
- Erklärende Grafik, Untiefentonne Nord hervorgehoben
- Checkbox „befeuert“ (ja | nein)
- Ok | Zurück
- Bei „Untiefentonne Ost“
- Erklärende Grafik, Untiefentonne Ost hervorgehoben
- Checkbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Untiefentonne Süd“
- Erklärende Grafik, Untiefentonne Süd hervorgehoben
- Checkbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Untiefentonne West“
- Erklärende Grafik, Untiefentonne West hervorgehoben
- Checkbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Einzelgefahrentonne“
- Erklärende Grafik, Einzelgefahrentonne
- Checkbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
Vorerst reicht anstelle der Grafik ein Icon plus die Bezeichnung „Untiefentonne XXX“.
bzw. Icon plus „Einzelgefahrentonne“.
- Automatische Erweiterung des Formulars
- Bei „Checkbox befeuert=ja:
- die zugehörige Kennung wird angezeigt,
- und (ausser bei der Einzelgefahr) die Wiederkehr erfragt (Radiobutton).
- Wiederkehr=(Schnelles Funkellicht (SFkl) | Funkellicht (Fkl), Standard: Fkl)
- Bei „Checkbox befeuert=ja plus Untiefentonne Nord“:
- Anzeigefeld „Kennung“: Fkl ; Bild der Kennung
- Bei „Checkbox befeuert=ja plus Untiefentonne West“:
- Anzeigefeld „Kennung“: Fkl (3) ; Bild der Kennung
- Bei „Checkbox befeuert=ja plus Untiefentonne Süd“:
- Anzeigefeld „Kennung“: Fkl (6) + Blk ; Bild der Kennung
- Bei „Checkbox befeuert=ja plus Untiefentonne Nord“:
- Anzeigefeld „Kennung“: Fkl (9) ; Bild der Kennung
- Bei „Checkbox befeuert=ja plus Einzelgefahrenstelle“:
- Anzeigefeld „Kennung“: Blz (2) ; Bild der Kennung
Lateralzeichen
- IALA-System A/B
- Wird automatisch anhand der Koordinaten bestimmt.
- Vorerst reicht anstelle der Automatik die Auswahl per Radiobutton:
- Radiobutton „IALA“ (A | B, Standard: A)
Je nach Auswahl in der Eltern-Maske „Übersicht Seezeichen“ wird angezeigt:
- Bei „Fahrwassertonne grün“
- Erklärende Grafik, je nach IALA A/B entsprechende Tonne hervorgehoben
- Dropdown „Tonnenform“ (laut S-57, Standard: unbekannt)
- Checkbox „Radarreflektor“ (ja | nein, Standard: nein)
- SteuerCheckbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Fahrwassertonne rot“
- Erklärende Grafik, je nach IALA A/B entsprechende Tonne hervorgehoben
- Dropdown „Tonnenform“ (laut S-57, Standard: unbekannt)
- Checkbox „Radarreflektor“ (ja | nein, Standard: nein)
- SteuerCheckbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Ansteuerungstonne“
- Erklärende Grafik, Ansteuerungstonne hervorgehoben
- Dropdown „Tonnenform“ (laut S-57, Standard: unbekannt)
- Droptown „Heultonne“ (unbekannt | nein | Horn | Glocke | Morse, Standard: unbekannt)
- wenn "Morse": Eingabefeld "Buchstabe" (A..Z)
- Checkbox „Radarreflektor“ (ja | nein, Standard: nein)
- Checkbox „RACON“ (ja | nein, Standard: nein)
- SteuerCheckbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Abzweigungstonne backbord“
- Erklärende Grafik, je nach IALA A/B entsprechende Tonne hervorgehoben, backbord/steuerbord
- Checkbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Abzweigungstonne steuerbord“
- Erklärende Grafik, je nach IALA A/B entsprechende Tonne hervorgehoben, backbord/steuerbord
- Checkbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
Vorerst reicht anstelle der Grafik die Bezeichnung „Icon plus XX-Tonne XXX“.
- Mouseover-Hilfe für
- Tonnenform
- IALA
- Bei „Checkbox befeuert=ja“
- wird das Formular „Befeuerung“ als Kind neben dem Elternformular geöffnet.
Sonderzeichen
- Erklärende Grafik
- Dropdown „Tonnenform“ (laut S-57, Standard: unbekannt)
- Ausgabefeld „Tonnenfarbe“ (gelb)
- Dropdown „Topzeichen“ (laut S-57, Standard: unbekannt)
- wenn Toppzeichen != ohne oder != unbekannt: Dropdown „Topzeichenfarbe“ (gelb|rot, Sandard: unbekannt)
- Checkbox „Radarreflektor“ (ja | nein, Standard: nein)
- SteuerCheckbox „befeuert“ (ja | nein, Standard: nein)
- Ok | Zurück
- Bei „Checkbox befeuert=ja“
- wird das Formular „Befeuerung“ als Kind neben dem Elternformular geöffnet.
Leuchtturm / Leuchtbake
Leuchtfeuer bestehen aus dem physischen Feuerträger, plus dem Feuer mit Kennung.
In der Maske „Leuchtfeuer“ wird en Leuchtturm als Feuerträger erfasst.
- Textfeld „Name“ (landesspezifische Bezeichnung)
- Textfeld „Name (englisch)“ (englische Bezeichnung)
- Feld „Internationale Leuchtfeuer-Nr“ (X-#####, Standard: leer)
- Feld „LAT“ (##,######); Feld „N/S“ (N | S, Standard: leer)
- Feld „LON“ (###,######); Feld „E/W ( E | W, Standard: leer)
- Enthält die genaue Koordinate, als Sicherung gegen ungewolltes Verschieben.
- wenn „Lat|LON“: Dropin „Koordinatensystem“ (WGS-84 | … | … | … , Standard: „bitte wählen“)
- Feld „ALT“ (####,# [m WGS-84] , Standard: leer)
- Feld „Höhe Feuer über Meer“ (####,# [m])
- wenn „Alt|HüM“: Dropin „Höhenbezugsystem“ (LAT | LLSW | MW, Standard: „bitte wählen“)
- Feld „Höhe Turm“ (###,# [m])
- Dropdown „Form“ ( rund | eckig | Gittermast | Stab/Säule, Standard: leer )
- Dropdown „Material“ ( Holz | Granit | gemauert | Beton | …, Standard: leer )
- Dropdown „Farbe“ ( weiss | grau | braun | rot | grün | gelb | …, Standard: leer )
- Checkbox „bewohnt“ (ja | nein, Standard: nein)
- Feld „gebaut“ (YYYY, Standard: leer)
- Textfeld „Beschreibung“ (Fliesstext)
- Dropin „aktiv“ (dauernd | unsicher | ausser Betrieb, Standard: „bitte wählen“ )
- SteuerCheckbox „befeuert“ (ja | nein, Standard: ja)
- Ok | Zurück
- Bei „Checkbox befeuert=ja“
wird das Formular „Befeuerung“ als Kind neben dem Elternformular geöffnet.
Leuchtfeuer
Abhängig von Eltern-Formular:
- Tonnen haben keine Sektoren
- Kardinalzeichen sind bereits definiert
- Dropin „Charakteristik“ ( F | Oc | Iso | Fl | LFl | Q | IQ | IVQ | UQ | Mo(*) | FFl | AI.**, Standard: leer)
- wenn „Mo“: Feld „Buchstabe“ (aa..zz, muss); Feld „Wiederkehr“
- wenn „Iso“: Feld „Wiederkehr“ (## [Sekunden], Standard: „bitte ausfüllen“)
- Steuerfeld „S-Gruppen“ (ja | nein, Standard: nein))
- Wenn „S-Gruppen=ja“:
- Dropin „Gruppen“ (2 | 3 | 4 | 5 | 6 | 9 | 2+1 | 2+3 | 3+1 )
- Feld „Wiederkehr“ (## [Sekunden], Standard: „bitte ausfüllen“)
- Steuerfeld „weitere Kennung“ (ja | nein, Standard: nein)
- wenn „ja“: 1x Wiederholung von „Charakteristik“ und „Gruppen“
- Tabelle "Sektoren"
- Feld "Nr" (##)
- Feld „Beginn“ (### [° rechtsweisend, von See her gesehen])
- Feld „Ende“ (### [° rechtsweisend, von See her gesehen])
- Feld „Sektorfarbe“ ( weiss | rot | grün | nicht sichtbar, Standard: weiss)
- Feld „Nenntragweite“ (## [nm])
- Schaltfläche "weiterere Sektor" ( Klick )
- wenn Klick: neue Tabellenzeile
- Ausgabefeld: „Kennung“ (String)
- Ok | Zurück
Tips und Ideen
Dialogfenster mit JAVA
Dirk schreibt:
Ist nicht besonders schwer. Im WMS-Client sind für die Prefs auch Beispiele drin. In JOSM ist die add()-Funktion des PropertiesDialogs ein gutes Beispiel. Die Struktur ist generell:
p = new JPanel(); x = new JTextField(); ... x.setText(wert); ... p.add(x); l = Jlabel(text); p.add(l); ... p.createDialog(Main.parent, tr("xxx")).setVisible(true); val = x.getText();
Also:
- Panel anlegen
- Elemente anlegen (TextField, Label, ...)
- Elemente mit add dem Panel hinzufügen
- Dialog erstellen
- Nachher Werte auslesen
Denk daran, dass es sich in die bestehende Struktur einfügen muss. Das ganze dann aufhübschen, ausrichten, mit Auswahllisten statt Textfeldern versehen, ... macht gern einer von uns wenn die Funktionalität steht. Wenn Du als Dialog-Unkundiger ein Design machst, wo Du ein Label erstellst mit "Gib einen der folgenden Werte 'a', 'b', 'c' im folgenden Feld ein" reicht das erstmal aus.