Satellite measurement — the AI got it wrong twice, a human clicked the right answer.
Geocoded Fortuna Hotel Hanoi, 6B Láng Hạ via OpenStreetMap Nominatim:
lat = 21.0213317°N lon = 105.8177774°E 17 storeys, 350 rooms
Esri World Imagery, z=19 (~0.2787 m/px). Red circle = hotel.
The pool is on the lower podium roof, not the tower's top floor.
Failure 1: Color-threshold bounding box. Segmented "blue" pixels, fit a minimum-area rectangle. The mask leaked onto shadows; result (16.4 × 10 m at 36°) had wrong rotation.
Failure 2: Measured the wrong feature. Picked corners on the pavilion roof (the lower /) instead of the pool. Reported ~7.8 × 6.6 m.
Failure 3: Right feature, wrong endpoints. Finally identified the correct dark-teal pool, but placed the top-right endpoint ~3 m past the pool-roof junction. Reported 17.83 m.
I stopped guessing and built an interactive canvas tool: click two points on the satellite image, get meters and angle. The operator clicked the pool's actual top-edge endpoints:
endpoints (displayed px): (111, 77) → (231, 149) scale: 0.106 m per displayed px length: √(120² + 72²) × 0.106 = 14.84 m angle: 31.0°
Red = AI's 17.83 m line. It cuts through the pool body into the pavilion roof.
Green = human's 14.84 m line. It traces the top edge of the dark-teal water cleanly from corner to where it meets the pavilion.
Error: 3.0 m too long — I kept pushing the right endpoint past the pool-roof junction because the edge is only a few pixels sharp at 0.28 m/px.
14.84 m along the pool's top edge — drawn by the human on /pool/draw.html.
14.84 m is a solid resort-style lap pool — short of 25 m Olympic, but plenty for casual lap swimming. Consistent with guest reviews calling it a "decent lap pool." Width is likely in the 6–8 m range based on visible glimpses of the pool edge left of the pavilion, but not confidently measurable from overhead imagery alone.