ZoomInNavigationControl.prototype.zoomIn = function() {
    this.terria.analytics.logEvent('navigation', 'click', 'zoomIn');

    this.isActive = true;

    if (defined(this.terria.leaflet)) {
         this.terria.leaflet.map.zoomIn(1);
    }

    if (defined(this.terria.cesium)) {
        var scene =  this.terria.cesium.scene;
        var camera = scene.camera;
        var focus = this.getCameraFocus(scene);
        var direction = Cartesian3.subtract(focus, camera.position, cartesian3Scratch);
        var movementVector = Cartesian3.multiplyByScalar(direction, 2.0 / 3.0, cartesian3Scratch);
        var endPosition = Cartesian3.add(camera.position, movementVector, cartesian3Scratch);

        this.flyToPosition(scene, endPosition);
    }

     this.terria.currentViewer.notifyRepaintRequired();
     this.isActive = false;
};
Exemple #2
0
CameraView.fromLookAt = function(targetPosition, headingPitchRange) {
    if (!defined(targetPosition)) {
        throw new DeveloperError('targetPosition is required.');
    }
    if (!defined(headingPitchRange)) {
        throw new DeveloperError('headingPitchRange is required.');
    }

    var positionENU = offsetFromHeadingPitchRange(headingPitchRange.heading, -headingPitchRange.pitch, headingPitchRange.range, scratchPosition);
    var directionENU = Cartesian3.normalize(Cartesian3.negate(positionENU, scratchDirection), scratchDirection);
    var rightENU = Cartesian3.cross(directionENU, Cartesian3.UNIT_Z, scratchRight);

    if (Cartesian3.magnitudeSquared(rightENU) < CesiumMath.EPSILON10) {
        Cartesian3.clone(Cartesian3.UNIT_X, rightENU);
    }

    Cartesian3.normalize(rightENU, rightENU);
    var upENU = Cartesian3.cross(rightENU, directionENU, scratchUp);
    Cartesian3.normalize(upENU, upENU);

    var targetCartesian = Ellipsoid.WGS84.cartographicToCartesian(targetPosition, scratchTarget);
    var transform = Transforms.eastNorthUpToFixedFrame(targetCartesian, Ellipsoid.WGS84, scratchMatrix4);

    var offsetECF = Matrix4.multiplyByPointAsVector(transform, positionENU, scratchOffset);
    var position = Cartesian3.add(targetCartesian, offsetECF, new Cartesian3());
    var direction = Cartesian3.normalize(Cartesian3.negate(offsetECF, new Cartesian3()), new Cartesian3());
    var up = Matrix4.multiplyByPointAsVector(transform, upENU, new Cartesian3());

    // Estimate a rectangle for this view.
    var fieldOfViewHalfAngle = CesiumMath.toRadians(30);
    var groundDistance = Math.tan(fieldOfViewHalfAngle) * (headingPitchRange.range + targetPosition.height);
    var angle = groundDistance / Ellipsoid.WGS84.minimumRadius;
    var extent = new Rectangle(targetPosition.longitude - angle, targetPosition.latitude - angle, targetPosition.longitude + angle, targetPosition.latitude + angle);

    return new CameraView(extent, position, direction, up);
};