@mapbox/react-map-gl
Version:
A React wrapper for MapboxGL-js and overlay API.
176 lines (142 loc) • 6.31 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _viewportMercatorProject = _interopRequireDefault(require("viewport-mercator-project"));
var _assert = _interopRequireDefault(require("../assert"));
var _transitionInterpolator = _interopRequireDefault(require("./transition-interpolator"));
var _transitionUtils = require("./transition-utils");
var _mathUtils = require("../math-utils");
var VIEWPORT_TRANSITION_PROPS = ['longitude', 'latitude', 'zoom', 'bearing', 'pitch'];
/**
* Performs linear interpolation of two viewports.
*/
var LinearInterpolator =
/*#__PURE__*/
function (_TransitionInterpolat) {
(0, _inherits2["default"])(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] : {};
(0, _classCallCheck2["default"])(this, LinearInterpolator);
_this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(LinearInterpolator).call(this));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_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;
}
(0, _createClass2["default"])(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 _viewportMercatorProject["default"](startProps).unproject(this.around);
Object.assign(endViewportProps, endProps, {
// anchor point in destination screen coordinates
around: new _viewportMercatorProject["default"](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];
(0, _assert["default"])((0, _transitionUtils.isValid)(startValue) && (0, _transitionUtils.isValid)(endValue), "".concat(key, " must be supplied for transition"));
startViewportProps[key] = startValue;
endViewportProps[key] = (0, _transitionUtils.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] = (0, _mathUtils.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 _viewportMercatorProject["default"](Object.assign({}, endProps, viewport)).getMapCenterByLngLatPosition({
lngLat: endProps.aroundLngLat,
// anchor point in current screen coordinates
pos: (0, _mathUtils.lerp)(startProps.around, endProps.around, t)
}),
_getMapCenterByLngLat2 = (0, _slicedToArray2["default"])(_getMapCenterByLngLat, 2),
longitude = _getMapCenterByLngLat2[0],
latitude = _getMapCenterByLngLat2[1];
viewport.longitude = longitude;
viewport.latitude = latitude;
}
return viewport;
}
}]);
return LinearInterpolator;
}(_transitionInterpolator["default"]);
exports["default"] = LinearInterpolator;
//# sourceMappingURL=linear-interpolator.js.map