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

View File

@ -712,34 +712,41 @@ class JXLParser:
def get_reference_points(self) -> List[str]: def get_reference_points(self) -> List[str]:
""" """
Gibt die echten Passpunkte zurück. Gibt die absoluten Festpunkte (Passpunkte) zurück.
Das sind Punkte mit bekannten Koordinaten, die zur Orientierung verwendet werden.
WICHTIG: Standpunkte (1001, 1002 etc.) sind KEINE Festpunkte!
Festpunkte sind: KORREKTE LOGIK:
- Punkte aus Referenzlinien (5001, 5002) - NUR 5xxx-Serie (5001, 5002, etc.) sind echte Festpunkte
- Punkte mit Method="Coordinates" oder "AzimuthOnly" (und NICHT als Station verwendet) - 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() ref_points = set()
# Alle Stationsnamen sammeln (diese sind KEINE Festpunkte) # Methode 1: 5xxx-Serie = absolute 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)
for name, point in self.points.items(): for name, point in self.points.items():
if name in station_names: if point.deleted:
continue # Stationen überspringen continue
if point.method == 'Coordinates': # Prüfe ob Punktname mit 5 beginnt und eine Nummer ist
ref_points.add(name) try:
elif point.method == 'AzimuthOnly': if name.startswith('5') and name.isdigit():
ref_points.add(name) 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) return list(ref_points)