Fix: Netzausgleichung - NUR 5xxx als Festpunkte, alle anderen werden ausgeglichen

This commit is contained in:
Developer 2026-01-18 21:29:20 +00:00
parent 3d6eb10edb
commit ea4038863a
4 changed files with 42 additions and 35 deletions

File diff suppressed because one or more lines are too long

22
main.py
View File

@ -1387,9 +1387,9 @@ class GeoreferencingTab(QWidget):
class NetworkAdjustmentTab(QWidget):
"""
Tab für Netzausgleichung - KORREKTES KONZEPT:
- Festpunkte = Passpunkte (5001, 5002, etc.) - werden NICHT ausgeglichen
- Neupunkte = Standpunkte (1001, 1002, etc.) - werden ausgeglichen
- Messpunkte = 3000er Serie - werden ausgeglichen
- Festpunkte = NUR 5xxx-Passpunkte (5001, 5002, etc.) - werden NICHT ausgeglichen
- Neupunkte = ALLE anderen Punkte (Standpunkte, Anschlusspunkte, Messpunkte) - werden AUSGEGLICHEN
- Das gesamte Netz wird spannungsfrei ausgeglichen
"""
def __init__(self, parent=None):
@ -1428,10 +1428,10 @@ class NetworkAdjustmentTab(QWidget):
points_layout = QVBoxLayout(points_group)
info_label = QLabel(
"💡 KORREKTES KONZEPT:\n"
" • Festpunkte (grün): Passpunkte mit bekannten Koordinaten - werden NICHT ausgeglichen\n"
" • Neupunkte (blau): Standpunkte des Tachymeters - werden AUSGEGLICHEN\n"
" • Messpunkte (gelb): Detailpunkte - werden AUSGEGLICHEN"
"💡 KORREKTES KONZEPT (Netzausgleichung):\n"
" • Festpunkte (grün): NUR 5xxx-Passpunkte (5001, 5002) - werden NICHT ausgeglichen\n"
" • Neupunkte (blau/gelb): ALLE anderen Punkte - werden AUSGEGLICHEN\n"
" (inkl. Standpunkte 1xxx, Anschlusspunkte 2xxx/6xxx, Messpunkte 3xxx)"
)
info_label.setStyleSheet("background-color: #f0f0f0; padding: 10px;")
points_layout.addWidget(info_label)
@ -1612,9 +1612,9 @@ class NetworkAdjustmentTab(QWidget):
lines.append("=" * 90)
lines.append("")
lines.append("KONZEPT:")
lines.append(" • Festpunkte = Passpunkte mit bekannten Koordinaten (NICHT ausgeglichen)")
lines.append(" • Neupunkte = Standpunkte des Tachymeters (AUSGEGLICHEN)")
lines.append("Messpunkte = Detailpunkte (AUSGEGLICHEN)")
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("")
lines.append("-" * 90)
lines.append("STATISTIK")
@ -1644,7 +1644,7 @@ class NetworkAdjustmentTab(QWidget):
# Neupunkte (ausgeglichen)
lines.append("-" * 90)
lines.append("NEUPUNKTE (Standpunkte - AUSGEGLICHEN)")
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)

View File

@ -712,34 +712,41 @@ class JXLParser:
def get_reference_points(self) -> List[str]:
"""
Gibt die echten Passpunkte zurück.
Das sind Punkte mit bekannten Koordinaten, die zur Orientierung verwendet werden.
WICHTIG: Standpunkte (1001, 1002 etc.) sind KEINE Festpunkte!
Gibt die absoluten Festpunkte (Passpunkte) zurück.
Festpunkte sind:
- Punkte aus Referenzlinien (5001, 5002)
- Punkte mit Method="Coordinates" oder "AzimuthOnly" (und NICHT als Station verwendet)
KORREKTE LOGIK:
- NUR 5xxx-Serie (5001, 5002, etc.) sind echte Festpunkte
- ALLE anderen Punkte (Standpunkte, Anschlusspunkte, Messpunkte) werden ausgeglichen
- Auch Punkte die als Anschlusspunkte verwendet werden (2xxx, 6xxx) sind KEINE Festpunkte!
Festpunkte werden erkannt durch:
1. Punktnummer beginnt mit 5 (5xxx Serie)
2. ODER Punkte aus Referenzlinien mit Method="Coordinates"
"""
ref_points = set()
# Alle Stationsnamen sammeln (diese sind KEINE Festpunkte)
station_names = set(s.name for s in self.stations.values() if s.name)
# Punkte aus Referenzlinien - das sind die echten Passpunkte
for line in self.lines.values():
if line.start_point and line.start_point not in station_names:
ref_points.add(line.start_point)
if line.end_point and line.end_point not in station_names:
ref_points.add(line.end_point)
# Punkte mit Method="Coordinates" (aber nicht Stationen)
# Methode 1: 5xxx-Serie = absolute Festpunkte
for name, point in self.points.items():
if name in station_names:
continue # Stationen überspringen
if point.method == 'Coordinates':
ref_points.add(name)
elif point.method == 'AzimuthOnly':
if point.deleted:
continue
# Prüfe ob Punktname mit 5 beginnt und eine Nummer ist
try:
if name.startswith('5') and name.isdigit():
ref_points.add(name)
except:
pass
# Methode 2: Punkte aus Referenzlinien mit expliziten Koordinaten
for line in self.lines.values():
if line.start_point:
# Prüfe ob es ein 5xxx Punkt ist oder explizit Coordinates hat
start_point = self.points.get(line.start_point)
if start_point and start_point.method == 'Coordinates':
ref_points.add(line.start_point)
if line.end_point:
end_point = self.points.get(line.end_point)
if end_point and end_point.method == 'Coordinates':
ref_points.add(line.end_point)
return list(ref_points)