void ViewpointProvider::flyTo() { if ( m_refManipulator == NULL ) { return; } Viewpoint currentVP = m_refManipulator->getViewpoint(); osgEarth::GeoPoint vp0( currentVP.getSRS(), currentVP.getFocalPoint(), osgEarth::ALTMODE_ABSOLUTE ); osgEarth::GeoPoint vp1( this->getSRS(), this->getFocalPoint(), osgEarth::ALTMODE_ABSOLUTE ); double distance = vp0.distanceTo( vp1 ); double duration = osg::clampBetween( distance / VP_METERS_PER_SECOND, VP_MIN_DURATION, VP_MAX_DURATION ); m_refManipulator->setViewpoint( *this, duration ); }