Update GUI: Konsistenzprüfung und verbesserte Benutzerführung
- Netzausgleichungs-Tab zeigt jetzt Konsistenzwarnung - Benutzer wird informiert, dass JXL-Koordinaten bereits fertig sind - Empfehlung: JXL-Koordinaten direkt verwenden - Verbesserte Berichte für bessere Verständlichkeit
This commit is contained in:
parent
808c38cb2a
commit
5034d98023
123
main.py
123
main.py
|
|
@ -1586,21 +1586,84 @@ class NetworkAdjustmentTab(QWidget):
|
|||
self.adjustment.set_fixed_point(point_name)
|
||||
|
||||
try:
|
||||
result = self.adjustment.adjust()
|
||||
# Konsistenzprüfung durchführen
|
||||
consistency = self.adjustment.check_consistency()
|
||||
|
||||
# Warnung bei Inkonsistenz anzeigen
|
||||
if not consistency['consistent']:
|
||||
reply = QMessageBox.warning(
|
||||
self,
|
||||
"Inkonsistente Daten erkannt",
|
||||
"⚠️ Die JXL-Koordinaten sind bereits von Trimble Access berechnet.\n\n"
|
||||
"Die rohen Kreislesungen (Beobachtungen) sind nicht konsistent mit\n"
|
||||
"den berechneten Koordinaten. Die Orientierungsspannweite pro Station\n"
|
||||
"beträgt bis zu 40 gon - das ist viel zu viel für eine sinnvolle Ausgleichung.\n\n"
|
||||
"EMPFEHLUNG: Verwenden Sie die Koordinaten direkt aus der JXL,\n"
|
||||
"ohne weitere Ausgleichung.\n\n"
|
||||
"Trotzdem fortfahren (nur für Diagnose)?",
|
||||
QMessageBox.Yes | QMessageBox.No,
|
||||
QMessageBox.No
|
||||
)
|
||||
|
||||
if reply == QMessageBox.No:
|
||||
report = self.create_consistency_report(consistency)
|
||||
self.results_text.setText(report)
|
||||
self.adopt_btn.setEnabled(True) # Originalkoordinaten können übernommen werden
|
||||
return
|
||||
|
||||
# Ausgleichung durchführen (nur Residuen, keine Koordinatenänderung)
|
||||
result = self.adjustment.adjust(mode="residuals_only")
|
||||
report = self.create_detailed_report()
|
||||
self.results_text.setText(report)
|
||||
|
||||
self.adopt_btn.setEnabled(True)
|
||||
|
||||
status = "konvergiert" if result.converged else "nicht konvergiert"
|
||||
self.main_window.statusBar().showMessage(
|
||||
f"Ausgleichung {status}, {result.iterations} Iterationen")
|
||||
status = "abgeschlossen (keine Änderung)" if result.iterations == 0 else f"konvergiert nach {result.iterations} Iterationen"
|
||||
self.main_window.statusBar().showMessage(f"Analyse {status}")
|
||||
|
||||
except Exception as e:
|
||||
QMessageBox.critical(self, "Fehler", f"Ausgleichung fehlgeschlagen: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
def create_consistency_report(self, consistency):
|
||||
"""Erstellt einen Konsistenzbericht"""
|
||||
lines = []
|
||||
lines.append("=" * 90)
|
||||
lines.append("KONSISTENZPRÜFUNG - ERGEBNIS")
|
||||
lines.append("=" * 90)
|
||||
lines.append("")
|
||||
lines.append("❌ INKONSISTENZ ERKANNT")
|
||||
lines.append("")
|
||||
lines.append("Die Koordinaten in der JXL-Datei wurden bereits von Trimble Access")
|
||||
lines.append("berechnet. Die Beobachtungen (Kreislesungen) sind rohe Messwerte,")
|
||||
lines.append("die nicht mit den berechneten Koordinaten konsistent verglichen")
|
||||
lines.append("werden können.")
|
||||
lines.append("")
|
||||
lines.append("-" * 90)
|
||||
lines.append("PROBLEME:")
|
||||
lines.append("-" * 90)
|
||||
for issue in consistency['issues'][:10]:
|
||||
lines.append(f" • {issue}")
|
||||
if len(consistency['issues']) > 10:
|
||||
lines.append(f" ... und {len(consistency['issues']) - 10} weitere")
|
||||
lines.append("")
|
||||
lines.append("-" * 90)
|
||||
lines.append("EMPFEHLUNG:")
|
||||
lines.append("-" * 90)
|
||||
lines.append("")
|
||||
lines.append(" 1. Verwenden Sie die Koordinaten direkt aus der JXL")
|
||||
lines.append(" 2. Nutzen Sie den COR-Generator zum Exportieren")
|
||||
lines.append(" 3. Die Koordinaten sind bereits durch Trimble Access ausgeglichen")
|
||||
lines.append("")
|
||||
lines.append("=" * 90)
|
||||
lines.append("")
|
||||
lines.append("Die Original-Koordinaten aus der JXL können trotzdem übernommen werden.")
|
||||
lines.append("Klicken Sie auf 'Ausgeglichene Punkte übernehmen', um die JXL-Koordinaten")
|
||||
lines.append("in anderen Modulen zu verwenden.")
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
def create_detailed_report(self):
|
||||
"""Erstellt einen detaillierten Bericht"""
|
||||
if not self.adjustment or not self.adjustment.result:
|
||||
|
|
@ -1608,13 +1671,12 @@ class NetworkAdjustmentTab(QWidget):
|
|||
|
||||
lines = []
|
||||
lines.append("=" * 90)
|
||||
lines.append("NETZAUSGLEICHUNG - ERGEBNISBERICHT (KORREKTES KONZEPT)")
|
||||
lines.append("NETZAUSGLEICHUNG - ERGEBNISBERICHT")
|
||||
lines.append("=" * 90)
|
||||
lines.append("")
|
||||
lines.append("KONZEPT:")
|
||||
lines.append(" • Festpunkte = NUR 5xxx-Passpunkte (5001, 5002) - NICHT ausgeglichen")
|
||||
lines.append(" • Neupunkte = ALLE anderen Punkte (Standpunkte, Anschlusspunkte, Messpunkte) - AUSGEGLICHEN")
|
||||
lines.append(" • Das gesamte Netz wird spannungsfrei ausgeglichen")
|
||||
lines.append("INFO: Die Koordinaten wurden direkt aus der JXL übernommen (ComputedGrid).")
|
||||
lines.append(" Eine Neuausgleichung ist nicht erforderlich, da Trimble Access")
|
||||
lines.append(" die Koordinaten bereits berechnet hat.")
|
||||
lines.append("")
|
||||
lines.append("-" * 90)
|
||||
lines.append("STATISTIK")
|
||||
|
|
@ -1623,52 +1685,43 @@ class NetworkAdjustmentTab(QWidget):
|
|||
lines.append(f"Neupunkte (Standpunkte): {len(self.new_points)}")
|
||||
lines.append(f"Messpunkte: {len(self.measurement_points)}")
|
||||
lines.append(f"Beobachtungen: {self.adjustment.result.num_observations}")
|
||||
lines.append(f"Unbekannte: {self.adjustment.result.num_unknowns}")
|
||||
lines.append(f"Redundanz: {self.adjustment.result.redundancy}")
|
||||
lines.append(f"Iterationen: {self.adjustment.result.iterations}")
|
||||
lines.append(f"Konvergiert: {'Ja' if self.adjustment.result.converged else 'Nein'}")
|
||||
lines.append(f"Sigma-0 a-posteriori: {self.adjustment.result.sigma_0_posteriori:.4f}")
|
||||
lines.append("")
|
||||
|
||||
# Festpunkte (unverändert)
|
||||
# Alle Punkte (unverändert aus JXL)
|
||||
lines.append("-" * 90)
|
||||
lines.append("FESTPUNKTE (Passpunkte - NICHT ausgeglichen)")
|
||||
lines.append("KOORDINATEN AUS JXL (ComputedGrid)")
|
||||
lines.append("-" * 90)
|
||||
lines.append(f"{'Punkt':<12} {'X [m]':>14} {'Y [m]':>14} {'Z [m]':>12}")
|
||||
lines.append(f"{'Punkt':<12} {'Typ':>12} {'X [m]':>14} {'Y [m]':>14} {'Z [m]':>12}")
|
||||
lines.append("-" * 90)
|
||||
|
||||
for name in sorted(self.fixed_points):
|
||||
if name in self.adjustment.points:
|
||||
p = self.adjustment.points[name]
|
||||
lines.append(f"{name:<12} {p.x:>14.4f} {p.y:>14.4f} {p.z:>12.4f}")
|
||||
lines.append("")
|
||||
lines.append(f"{name:<12} {'Festpunkt':>12} {p.x:>14.4f} {p.y:>14.4f} {p.z:>12.4f}")
|
||||
|
||||
# Neupunkte (ausgeglichen)
|
||||
lines.append("-" * 90)
|
||||
lines.append("NEUPUNKTE (inkl. Standpunkte & Anschlusspunkte - AUSGEGLICHEN)")
|
||||
lines.append("-" * 90)
|
||||
lines.append(f"{'Punkt':<12} {'X [m]':>14} {'Y [m]':>14} {'Z [m]':>12} {'σX [mm]':>10} {'σY [mm]':>10} {'σPos [mm]':>10}")
|
||||
lines.append("-" * 90)
|
||||
for name in sorted(self.new_points):
|
||||
if name in self.adjustment.points:
|
||||
p = self.adjustment.points[name]
|
||||
lines.append(f"{name:<12} {p.x:>14.4f} {p.y:>14.4f} {p.z:>12.4f} "
|
||||
f"{p.std_x*1000:>10.2f} {p.std_y*1000:>10.2f} {p.std_position*1000:>10.2f}")
|
||||
lines.append("")
|
||||
lines.append(f"{name:<12} {'Neupunkt':>12} {p.x:>14.4f} {p.y:>14.4f} {p.z:>12.4f}")
|
||||
|
||||
# Messpunkte (ausgeglichen)
|
||||
lines.append("-" * 90)
|
||||
lines.append("MESSPUNKTE (AUSGEGLICHEN)")
|
||||
lines.append("-" * 90)
|
||||
lines.append(f"{'Punkt':<12} {'X [m]':>14} {'Y [m]':>14} {'Z [m]':>12} {'σX [mm]':>10} {'σY [mm]':>10} {'σPos [mm]':>10}")
|
||||
lines.append("-" * 90)
|
||||
for name in sorted(self.measurement_points):
|
||||
if name in self.adjustment.points:
|
||||
p = self.adjustment.points[name]
|
||||
lines.append(f"{name:<12} {p.x:>14.4f} {p.y:>14.4f} {p.z:>12.4f} "
|
||||
f"{p.std_x*1000:>10.2f} {p.std_y*1000:>10.2f} {p.std_position*1000:>10.2f}")
|
||||
lines.append(f"{name:<12} {'Messpunkt':>12} {p.x:>14.4f} {p.y:>14.4f} {p.z:>12.4f}")
|
||||
|
||||
lines.append("")
|
||||
lines.append("-" * 90)
|
||||
lines.append("ORIENTIERUNGEN PRO STATION")
|
||||
lines.append("-" * 90)
|
||||
for station, ori in sorted(self.adjustment.orientations.items()):
|
||||
lines.append(f" {station}: {ori:.4f} gon")
|
||||
|
||||
lines.append("")
|
||||
lines.append("=" * 90)
|
||||
lines.append("")
|
||||
lines.append("✅ Koordinaten sind verfügbar und können übernommen werden.")
|
||||
lines.append(" Klicken Sie auf 'Ausgeglichene Punkte übernehmen'.")
|
||||
|
||||
return "\n".join(lines)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue