@mapbox/react-map-gl
Version:
A React wrapper for MapboxGL-js and overlay API.
158 lines (136 loc) • 5.53 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
import _createClass from "@babel/runtime/helpers/esm/createClass";
import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
import _assertThisInitialized from "@babel/runtime/helpers/esm/assertThisInitialized";
import _inherits from "@babel/runtime/helpers/esm/inherits";
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import WebMercatorViewport from 'viewport-mercator-project';
import assert from '../assert';
import TransitionInterpolator from './transition-interpolator';
import { isValid, getEndValueByShortestPath } from './transition-utils';
import { lerp } from '../math-utils';
var VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];
/**
* Performs linear interpolation of two viewports.
*/
var LinearInterpolator =
/*#__PURE__*/
function (_TransitionInterpolat) {
_inherits(LinearInterpolator, _TransitionInterpolat);
/**
* @param opts {Object}
* - opts.transitionProps {Array}] - list of props to apply linear transition to.
* - opts.around {Array} - a screen point to zoom/rotate around
*/
function LinearInterpolator() {
var _this;
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, LinearInterpolator);
_this = _possibleConstructorReturn(this, _getPrototypeOf(LinearInterpolator).call(this));
_defineProperty(_assertThisInitialized(_this), "around", void 0);
if (Array.isArray(opts)) {
// backward compatibility
opts = {
transitionProps: opts
};
}
_this.propNames = opts.transitionProps || VIEWPORT_TRANSITION_PROPS;
if (opts.around) {
_this.around = opts.around;
}
return _this;
}
_createClass(LinearInterpolator, [{
key: "initializeProps",
value: function initializeProps(startProps, endProps) {
var startViewportProps = {};
var endViewportProps = {};
if (this.around) {
// anchor point in origin screen coordinates
startViewportProps.around = this.around; // anchor point in spherical coordinates
var aroundLngLat = new WebMercatorViewport(startProps).unproject(this.around);
Object.assign(endViewportProps, endProps, {
// anchor point in destination screen coordinates
around: new WebMercatorViewport(endProps).project(aroundLngLat),
aroundLngLat: aroundLngLat
});
}
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = this.propNames[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
var startValue = startProps[key];
var endValue = endProps[key];
assert(isValid(startValue) && isValid(endValue), "".concat(key, " must be supplied for transition"));
startViewportProps[key] = startValue;
endViewportProps[key] = getEndValueByShortestPath(key, startValue, endValue);
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
_iterator["return"]();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return {
start: startViewportProps,
end: endViewportProps
};
}
}, {
key: "interpolateProps",
value: function interpolateProps(startProps, endProps, t) {
var viewport = {};
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = this.propNames[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
viewport[key] = lerp(startProps[key], endProps[key], t);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
_iterator2["return"]();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
if (endProps.around) {
// zoom around provided point
var _getMapCenterByLngLat = new WebMercatorViewport(Object.assign({}, endProps, viewport)).getMapCenterByLngLatPosition({
lngLat: endProps.aroundLngLat,
// anchor point in current screen coordinates
pos: lerp(startProps.around, endProps.around, t)
}),
_getMapCenterByLngLat2 = _slicedToArray(_getMapCenterByLngLat, 2),
longitude = _getMapCenterByLngLat2[0],
latitude = _getMapCenterByLngLat2[1];
viewport.longitude = longitude;
viewport.latitude = latitude;
}
return viewport;
}
}]);
return LinearInterpolator;
}(TransitionInterpolator);
export { LinearInterpolator as default };
//# sourceMappingURL=linear-interpolator.js.map