From fd1b2842144e02d2e8f179eff3502aa21559d271 Mon Sep 17 00:00:00 2001 From: trancen Date: Tue, 3 Feb 2026 21:14:21 +0000 Subject: [PATCH] fix(grayline): Simplify Enhanced DX Zone segment pairing logic Changed from complex segment matching to simple index-based pairing. Added debug logging to diagnose segment creation. Since both upper and lower lines are generated with the same longitude points and split at the same positions, corresponding segments should have the same index. --- src/plugins/layers/useGrayLine.js | 100 ++++++++++++------------------ 1 file changed, 40 insertions(+), 60 deletions(-) diff --git a/src/plugins/layers/useGrayLine.js b/src/plugins/layers/useGrayLine.js index 719815b..41bf38f 100644 --- a/src/plugins/layers/useGrayLine.js +++ b/src/plugins/layers/useGrayLine.js @@ -567,69 +567,49 @@ export function useLayer({ enabled = false, opacity = 0.5, map = null }) { const upperSegments = splitAtDateLine(enhancedUpper); const lowerSegments = splitAtDateLine(enhancedLower); - // For each upper segment, find corresponding lower segment and create polygon - // If there's only one segment in each, create single polygon - if (upperSegments.length === 1 && lowerSegments.length === 1) { - // No date line crossing - create single polygon - const enhancedZone = [...upperSegments[0], ...lowerSegments[0].reverse()]; - const enhancedPoly = L.polygon(enhancedZone, { - color: '#ffaa00', - fillColor: '#ffaa00', - fillOpacity: opacity * 0.15, - weight: 1, - opacity: opacity * 0.3 - }); - enhancedPoly.bindPopup(` -
- ⭐ Enhanced DX Zone
- Best HF propagation window
- ±5° from terminator
- Ideal for long-distance contacts -
- `); - enhancedPoly.addTo(map); - newLayers.push(enhancedPoly); - } else { - // Date line crossing - create multiple polygons - // Match segments by their longitude ranges - upperSegments.forEach((upperSeg, i) => { - // Find matching lower segment with similar longitude range - const upperLons = upperSeg.map(p => p[1]); - const upperMinLon = Math.min(...upperLons); - const upperMaxLon = Math.max(...upperLons); + console.log('🔶 Enhanced DX Zone segments:', { + upperCount: upperSegments.length, + lowerCount: lowerSegments.length, + upperSegmentLengths: upperSegments.map(s => s.length), + lowerSegmentLengths: lowerSegments.map(s => s.length) + }); + + // Create polygon for each corresponding segment pair + // Both upper and lower should have same number of segments + const numSegments = Math.min(upperSegments.length, lowerSegments.length); + + for (let i = 0; i < numSegments; i++) { + const upperSeg = upperSegments[i]; + const lowerSeg = lowerSegments[i]; + + if (upperSeg.length > 1 && lowerSeg.length > 1) { + // Create polygon from upper segment + reversed lower segment + const enhancedZone = [...upperSeg, ...lowerSeg.reverse()]; - // Find lower segment that overlaps with this upper segment - const matchingLowerSeg = lowerSegments.find(lowerSeg => { - const lowerLons = lowerSeg.map(p => p[1]); - const lowerMinLon = Math.min(...lowerLons); - const lowerMaxLon = Math.max(...lowerLons); - - // Check for longitude overlap - return (lowerMinLon <= upperMaxLon && lowerMaxLon >= upperMinLon) || - (upperMinLon <= lowerMaxLon && upperMaxLon >= lowerMinLon); + console.log(`🔶 Creating Enhanced DX polygon segment ${i+1}/${numSegments}:`, { + upperPoints: upperSeg.length, + lowerPoints: lowerSeg.length, + totalPolygonPoints: enhancedZone.length }); - if (matchingLowerSeg && matchingLowerSeg.length > 1) { - const enhancedZone = [...upperSeg, ...matchingLowerSeg.reverse()]; - const enhancedPoly = L.polygon(enhancedZone, { - color: '#ffaa00', - fillColor: '#ffaa00', - fillOpacity: opacity * 0.15, - weight: 1, - opacity: opacity * 0.3 - }); - enhancedPoly.bindPopup(` -
- ⭐ Enhanced DX Zone
- Best HF propagation window
- ±5° from terminator
- Ideal for long-distance contacts -
- `); - enhancedPoly.addTo(map); - newLayers.push(enhancedPoly); - } - }); + const enhancedPoly = L.polygon(enhancedZone, { + color: '#ffaa00', + fillColor: '#ffaa00', + fillOpacity: opacity * 0.15, + weight: 1, + opacity: opacity * 0.3 + }); + enhancedPoly.bindPopup(` +
+ ⭐ Enhanced DX Zone
+ Best HF propagation window
+ ±5° from terminator
+ Ideal for long-distance contacts +
+ `); + enhancedPoly.addTo(map); + newLayers.push(enhancedPoly); + } } } }