Export

by H-1, Friday, August 12, 2022, 09:47 (109 days ago)

Hallo Michael

Wir nutzen dein schönes und hilfreiches Programm regelmäßig für die verschiedenste Netzausgleichungen an unseren zahlreichen Überwachungsprojekten. Vielen Dank dafür!

Neben dem sehr ausführlichen HTML–Report wäre es für uns hilfreich, wenn es neben der Punktgruppenspezifischen Exportfunktion über die rechte Maustaste in den jeweiligen Punktarten einen zusammenfassenden kompakten Export gäbe. Vielleicht in der Menüleiste unter REPORT?

So ließen sich die Ergebnisse des Projekts einfacher in einen übergeordneten Datenbankworkflow übernehmen. Schön wäre, neben einer kompakten Zusammenfassung in Form einer einfachen Tabelle/Textdatei, eine Spalte mit einer Art "Punkt-ID", um später die Art des Punktes nachvollziehen zu können.

Zum Beispiel so in etwa:

Pkt Y X Z σy σx σz Pkt_Typ_ID
1 300,0808 430,3809 255,7586 0,0006 0,0006 0,0003 NP
103 301,3787 414,5333 255,4075 0,0007 0,0007 0,0008 NP
2 299,2541 367,6440 255,7792 0,0006 0,0006 0,0003 NP
203 301,2960 404,0491 254,5927 0,0007 0,0007 0,0008 NP
303 301,2891 394,0181 254,6480 0,0007 0,0007 0,0008 NP
403 301,3888 383,4434 255,4000 0,0007 0,0007 0,0008 NP
101 - - 253,5038 - - 0,0004 NP
102 - - 253,1833 - - 0,0004 NP
201 - - 252,7576 - - 0,0004 NP
HB1 - - 256,1682 - - 0,0000 FP_Fest
A 350,1938 347,5208 255,7066 0,0004 0,0004 0,0002 FP_weich
B 355,9359 462,4411 262,2877 0,0004 0,0004 0,0005 FP_weich
C 525,2061 396,8905 260,6875 0,0005 0,0005 0,0008 FP_weich

Und wäre es eventuell möglich in den HTML–Report auch die Netzskizze zu integrieren?

Viele Grüße

Heinz

Export

by Micha ⌂, Bad Vilbel, Friday, August 12, 2022, 12:18 (109 days ago) @ H-1

Hallo Heinz,

Und wäre es eventuell möglich in den HTML–Report auch die Netzskizze zu integrieren?

Jain. Java bietet leider keine Möglichkeit, den Plot als Vektorgraphik (bspw. SVG) zu exportieren, sondern unterstützt nur eine Art Screenshotfunktion, die dann ein Rasterbild bspw. als PNG erzeugt. Diese Funktion existiert auch beim Plot bereits. Dort ist es möglich, die aktuelle Ansicht als PNG zu exportieren. Da es sich um einen Screenshot handelt, funktioniert das natürlich nur, wenn auf dem Canvas-Element tatsächlich etwas gezeichnet wurde. Hier liegt also schon die größte Hürde. Wenn man den Plot nie aufgerufen hat, wird man auch kein Bild erzeugen können auf diese Weise. Um hiervon unabhängig zu sein, müsste man praktisch für den Report die Plotfunktion noch einmal implementieren. Dazu fehlt mir ein wenig die Motivation, da man derzeit schon Bilder vom Netz exportieren kann.
Das zweite Problem, welches ich sehe, ist, dass die Anzahl an Dateien zunehmen, die zum Report gehören. Bisher wird eine einzige HTML Datei generiert, die alles enthält. Die kann man kopieren, archivieren, verschicken usw., da sie vollständig ist. Das Netz (sofern es ein Rasterbild ist), müsste in einer zusätzlichen Bilddatei gespeichert werden. Nun muss man beim Kopieren, Archivieren oder Verschicken schon aufpassen, dass man alles zusammenhält. Ja, es gibt die Möglichkeit, base64-codierte Bilder direkt im Dokument abzuspeichern. Aber dies würde die Datei um ein vielfaches aufblähen, sodass dies mMn. keine Alternative ist.
Solange ich keinen sinnvollen SVG-Export habe, erscheint mir der Aufwand zu groß.

Wenn Ihr in Eurem Workflow jedoch immer einen Netzplot erzeugt während der Analyse, dann könnte dieser "automatisch" in den Report eingebunden werden, in dem im Template einfach ein

<img src="netzplot.png" alt="Netzplot">

an der gewünschten Stelle ergänzt werden muss. Diese Option habt Ihr immer - auch jetzt schon.

Neben dem sehr ausführlichen HTML–Report wäre es für uns hilfreich, wenn es neben der Punktgruppenspezifischen Exportfunktion über die rechte Maustaste in den jeweiligen Punktarten einen zusammenfassenden kompakten Export gäbe. Vielleicht in der Menüleiste unter REPORT?

Ja, dass ist kein Problem. Damit man nicht nur Dateien mit der Endung HTML erzeugen kann, habe ich eine modifizierte JAG3D Vorversion mal erzeugt. Diese kannst Du hier herunterladen zum Testen: JAG3Dv20220812_Windows.zip. In dieser Version wird der Name des Templates nach einer möglichen Endung durchsucht. Nehmen wir an, Dein Template heißt Coordinates.txt.ftlh, dann ist der Name Coordinates und die favorisierte Endung txt. Die Endung ist unter Windows vor allem wichtig, damit die Datei (der Report) direkt mit einem Standardprogramm geöffnet wird, sonst aber nicht von belangen. Wenn Du die alte bisherige Version von JAG3D nutzt, dann würden auch Textdateien die Endung html erhalten und Du müsstest die Datei nachträglich umbenennen. Es ist also nur ein kleines Feature zur Arbeitserleichterung.

Um Deine Ausgabe zu generieren, benötigst Du ein neues (zusätzliches) Template. Speichere dieses Template im Verzeichnis JAG3D\resources\ftl\jag3d\ ab. JAG3D wird beim nächsten Start dann automatisch unter dem Reiter Report im Hauptmenü neben dem Default-Template Dein zusätzliches Template anbieten. Somit ist auch sichergestellt, dass beim nächsten Update Dein Template nicht überschrieben wird, da Du hier einen individuellen Namen vergeben hast. Inhaltlich könnte die Datei wie folgt aussehen - siehe unten. Kopiere den gezeigten Code in die Datei Coordinates.txt.ftlh und speichere diese in JAG3D\resources\ftl\jag3d\ ab. Starte JAG3D und exportiere Deine Daten mit dem neuen Template. Das Template ist ganz rudimentär und soll Dir nur zeigen, wie man es angeht. Du kannst es gern an Deine Anforderungen anpassen und umformatieren. Die Dokumentation von Freemaker lässt kaum Wünsche offen. Du kannst also sehr flexibel Deine individuellen Ausgaben generieren.


Viele Grüße
Micha

ASCII-Export: Coordinates.txt.ftlh

<#ftl output_format="plainText" encoding="utf-8">
 
<#-- Decimal format w.r.t. user preferences -->
<#assign df_length             = "${digits_length???then(digits_length, 0.00000)};;                      roundingMode=halfEven decimalSeparator='.' infinity='∞' nan='NaN'">
<#assign df_length_uncertainty = "${digits_length_uncertainty???then(digits_length_uncertainty, 0.00)};; roundingMode=halfEven decimalSeparator='.' infinity='∞' nan='NaN'">
 
<#macro printFormattedNumber value format>
 <#t>${value?string[format]?left_pad(15, " ")}<#t>
 <#return>
</#macro>
 
<#-- Define the table header names -->
<#assign header_id          = "Name">
<#assign header_east        = "East">
<#assign header_north       = "North">
<#assign header_up          = "Up">
<#assign header_sigma_east  = "σy">
<#assign header_sigma_north = "σx">
<#assign header_sigma_up    = "σz">
<#assign header_type        = "Type">
<#-- Define a placeholder for empty values -->
<#assign empty_value        = "-">
 
<#-- Create list of points -->
<#if point_groups??>
 ${header_id?right_pad(15, " ")}<#t>
 ${header_type?right_pad(15, " ")}<#t>
 ${header_east?left_pad(15, " ")}<#t>
 ${header_north?left_pad(15, " ")}<#t>
 ${header_up?left_pad(15, " ")}<#t>
 ${header_sigma_east?left_pad(15, " ")}<#t>
 ${header_sigma_north?left_pad(15, " ")}<#t>
 ${header_sigma_up?left_pad(15, " ")}<#t>
 
 <#list point_groups as group>
  <#assign point_type = "">
  <#if group.type == "REFERENCE_POINT">
   <#assign point_type = "Reference">
  <#elseif group.type == "STOCHASTIC_POINT">
   <#assign point_type = "Stochastic">
  <#elseif group.type == "DATUM_POINT">
   <#assign point_type = "Datum">
  <#elseif group.type == "NEW_POINT">
   <#assign point_type = "Unknown">
  </#if>
  <#list group.points as point>
    ${point.name?right_pad(15, " ")}<#t>
    ${point_type?right_pad(15, " ")}<#t>
    <#if group.dimension != 1>
     <@printFormattedNumber value=point.y format=df_length/>
     <@printFormattedNumber value=point.x format=df_length/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.dimension != 2>
     <@printFormattedNumber value=point.z format=df_length/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.type != "REFERENCE_POINT" && group.dimension != 1>
     <@printFormattedNumber value=point.sigma_y format=df_length_uncertainty/>
     <@printFormattedNumber value=point.sigma_x format=df_length_uncertainty/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.type != "REFERENCE_POINT" && group.dimension != 2>
     <@printFormattedNumber value=point.sigma_z format=df_length_uncertainty/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
 
  </#list>
 </#list>
</#if>

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
JAG3D, Plot, Report, Template, Freemarker, Dateierweiterung

Export

by H-1, Monday, August 15, 2022, 01:46 (106 days ago) @ Micha

Hallo Micha

Vielen Dank für die schnelle Reaktion!

Ich habe gerade die neue Report Exportfunktion für die Koordinaten Text Datei von der RC-Version getestet. Funktioniert im allen denkbaren Kombinationen sehr gut bei mir.

Eine Frage noch bezüglich der Reihenfolge: Wie bekomme ich die Spalte Punkt-ID in die letzte Spalte?

Wegen HTML Export: Verstehe die Probleme und den Aufwand bei der Einbindung des Plot in den HTML-Report gut. Das Feature ist für uns aber auch nicht essentiell.

Viele Grüße

Heinz

Export

by Micha ⌂, Bad Vilbel, Monday, August 15, 2022, 02:07 (106 days ago) @ H-1

Hallo Heinz,

Ich habe gerade die neue Report Exportfunktion für die Koordinaten Text Datei von der RC-Version getestet. Funktioniert im allen denkbaren Kombinationen sehr gut bei mir.

Super. Es wird dann in der kommenden Version enthalten sein.

Eine Frage noch bezüglich der Reihenfolge: Wie bekomme ich die Spalte Punkt-ID in die letzte Spalte?

Du kannst in der Schleife, die die Liste an Punkten durchgeht, die Reihenfolge einfach ändern (ich habe es mit Row order changed mal kenntlich gemacht die Modifikation, wobei ich von links auf rechtsbündig gegangen bin):

 
<#ftl output_format="plainText" encoding="utf-8">
 
<#-- Decimal format w.r.t. user preferences -->
<#assign df_length             = "${digits_length???then(digits_length, 0.00000)};;                      roundingMode=halfEven decimalSeparator='.' infinity='∞' nan='NaN'">
<#assign df_length_uncertainty = "${digits_length_uncertainty???then(digits_length_uncertainty, 0.00)};; roundingMode=halfEven decimalSeparator='.' infinity='∞' nan='NaN'">
 
<#macro printFormattedNumber value format>
 <#t>${value?string[format]?left_pad(15, " ")}<#t>
 <#return>
</#macro>
 
<#-- Define the table header names -->
<#assign header_id          = "Name">
<#assign header_east        = "East">
<#assign header_north       = "North">
<#assign header_up          = "Up">
<#assign header_sigma_east  = "σy">
<#assign header_sigma_north = "σx">
<#assign header_sigma_up    = "σz">
<#assign header_type        = "Type">
<#-- Define a placeholder for empty values -->
<#assign empty_value        = "-">
 
<#-- Create list of points -->
<#if point_groups??>
 ${header_type?right_pad(15, " ")}<#t>
 ${header_east?left_pad(15, " ")}<#t>
 ${header_north?left_pad(15, " ")}<#t>
 ${header_up?left_pad(15, " ")}<#t>
 ${header_sigma_east?left_pad(15, " ")}<#t>
 ${header_sigma_north?left_pad(15, " ")}<#t>
 ${header_sigma_up?left_pad(15, " ")}<#t>
 ${header_id?left_pad(15, " ")}<#t>           <#-- Row order changed -->
 
 <#list point_groups as group>
  <#assign point_type = "">
  <#if group.type == "REFERENCE_POINT">
   <#assign point_type = "Reference">
  <#elseif group.type == "STOCHASTIC_POINT">
   <#assign point_type = "Stochastic">
  <#elseif group.type == "DATUM_POINT">
   <#assign point_type = "Datum">
  <#elseif group.type == "NEW_POINT">
   <#assign point_type = "Unknown">
  </#if>
  <#list group.points as point>
    ${point_type?right_pad(15, " ")}<#t>
    <#if group.dimension != 1>
     <@printFormattedNumber value=point.y format=df_length/>
     <@printFormattedNumber value=point.x format=df_length/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.dimension != 2>
     <@printFormattedNumber value=point.z format=df_length/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.type != "REFERENCE_POINT" && group.dimension != 1>
     <@printFormattedNumber value=point.sigma_y format=df_length_uncertainty/>
     <@printFormattedNumber value=point.sigma_x format=df_length_uncertainty/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.type != "REFERENCE_POINT" && group.dimension != 2>
     <@printFormattedNumber value=point.sigma_z format=df_length_uncertainty/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    ${point.name?left_pad(15, " ")}<#t>  <#-- Row order changed -->
 
  </#list>
 </#list>
</#if>
 

Wegen HTML Export: Verstehe die Probleme und den Aufwand bei der Einbindung des Plot in den HTML-Report gut. Das Feature ist für uns aber auch nicht essentiell.

Man kann es sicher auch über ein spezielles Template lösen. Die Koordinaten und die Beobachtungen kennt man, sodass man auch eine SVG erzeugen könnte. Der Plot wäre dann optisch nicht identisch aber es wäre möglich. Vielleicht schaue ich mir das mal an und erstelle eine ganz einfache Version als Beispiel - und dann hoffen wir, dass sich ein Freiwilliger findet, dies zu verbessern und zu vervollständigen.

Viele Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
JAG3D, Report, Template, Freemarker, Export

Export

by H-1, Tuesday, August 16, 2022, 08:25 (105 days ago) @ Micha

Hallo Micha

Vielen Dank!

Ich habe mir gerade die *.fth Dateien angeschaut und auch mal ein bisschen damit herumexperimentiert. Ich denke ich habe das Prinzip verstanden.

Ich hab noch eine Idee. Wir werten in der Regel mit stochastischen Anschlußpunkten aus. Wäre es auch möglich die jeweils eingestellten Standardabweichungen der Anschlußpunkte im Report auszugeben?

Viele Grüße

Heinz

Export

by Micha ⌂, Bad Vilbel, Tuesday, August 16, 2022, 08:44 (105 days ago) @ H-1

Hallo Heinz,

Wir werten in der Regel mit stochastischen Anschlußpunkten aus. Wäre es auch möglich die jeweils eingestellten Standardabweichungen der Anschlußpunkte im Report auszugeben?

Ja, natürlich. Alle Informationen, die Du im Default-Template hast, kannst Du auch in jedem individuellen Template verwenden. Die Templates formatieren die verfügbaren Informationen letztlich nur.

Alle Variablen, die bei Punkten zur Verfügung stehen, findest Du u.a. im Template point_tbody.ftlh. Ab Zeile 16 in der Datei point_tbody.ftlh siehst Du auch, wie man auf die a-priori Standardabweichungen zugreifen kann bzw. das die zugehörigen Variablen point.sigma_x0, point.sigma_y0 bzw. point.sigma_z0 lauten. Im Template müsste man also an gewünschter Stelle einfach ergänzen:

    <#if group.type == "STOCHASTIC_POINT" && group.dimension != 1>
     <@printFormattedNumber value=point.sigma_y0 format=df_length_uncertainty/>
     <@printFormattedNumber value=point.sigma_x0 format=df_length_uncertainty/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>
    <#if group.type == "STOCHASTIC_POINT" && group.dimension != 2>
     <@printFormattedNumber value=point.sigma_z0 format=df_length_uncertainty/>
    <#else>
     ${empty_value?left_pad(15, " ")}<#t>
    </#if>

Beste Grüße
Micha

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
JAG3D, Report, Template, Freemarker, Export, Anschlusspunkte

JAG3D Report mit Netzplot als SVG

by Micha ⌂, Bad Vilbel, Thursday, September 01, 2022, 09:45 (89 days ago) @ H-1

Hallo Heinz,

ich habe Deine Anfrage nicht vergessen.

Und wäre es eventuell möglich in den HTML–Report auch die Netzskizze zu integrieren?

In den letzten Wochen habe ich ein wenig mit dem Template-System von Freemarker experimentiert und meine Idee, dass man damit auch eine SVG-Graphik generieren könnte, weiter verfolgt. Der Browser-Support ist meines Erachtens hoch, sofern wir ältere Browser ausklammern können. Meine ersten Versuche waren soweit vielversprechend und es war tatsächlich möglich, mit dem bisherigen Report auch eine Graphik zu erzeugen. Um es etwas flexibler zu gestalten, habe ich dem Report-Generator noch ein paar zusätzliche Variablen spendiert.

Mein Ziel war es nicht, den Plot Eins-zu-Eins nachzubauen, sondern vielmehr einen weitgehend unabhängigen Plot zu generieren. Farben, Symbole usw. entnehme ich daher (bisher) nicht den Einstellungen und es werden auch nicht alle Layer, die man in JAG3D darstellen kann, geplottet, da einige mMn. nur zur Analyse aber nicht zur Dokumentation verwendet werden. Wer einen der fehlenden Layer noch benötigt, kann diesen aber prinzipiell selbst noch hinzufügen. Das bisherige Script zeigt, wie man es realisieren könnte. Nachfolgend siehst Du exemplarisch mal einen generierten SVG-Netzplot.

Mit der aktuellen Version JAG3Dv20220901 wird dieser Plot im Report eingefügt als Inline-SVG. Hierdurch wird keine zusätzliche Datei erzeugt, sodass der Report nach wie vor nur aus einer einzigen Datei besteht. Wenn Du die Zeit findest, es mal auszuprobieren und mir ein wenig Feedback sendest, wäre ich Dir dankbar.

Viele Grüße
Micha

[image]

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences

Tags:
JAG3D, Ausgleichung, Report, Template, HTML, Freemarker, SVG, Scalable Vector Graphic, v20220901

JAG3D Report mit Netzplot als SVG

by H-1, Thursday, September 08, 2022, 10:53 (82 days ago) @ Micha

Hallo Michael

Ich hab mir die neue Version gerade heruntergeladen.

Vielen Dank für die Ergänzungen. Mit Plot sieht es im Report übersichtlicher aus. Ich muss mir die neue Version noch mal in Ruhe ansehen. Zur Zeit sind wir viel im Außendienst.

Bis dahin

Viele Grüße

Heinz

RSS Feed of thread