@nebula.gl/layers
Version:
A suite of 3D-enabled data editing layers, suitable for deck.gl
126 lines (93 loc) • 14.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ElevationHandler = void 0;
var _modeHandler = require("./mode-handler");
var _modifyHandler = require("./modify-handler");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
function _createSuper(Derived) { return function () { var Super = _getPrototypeOf(Derived), result; if (_isNativeReflectConstruct()) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function defaultCalculateElevationChange(_ref) {
var pointerDownScreenCoords = _ref.pointerDownScreenCoords,
screenCoords = _ref.screenCoords;
return 10 * (pointerDownScreenCoords[1] - screenCoords[1]);
} // TODO edit-modes: delete handlers once EditMode fully implemented
var ElevationHandler = /*#__PURE__*/function (_ModifyHandler) {
_inherits(ElevationHandler, _ModifyHandler);
var _super = _createSuper(ElevationHandler);
function ElevationHandler() {
_classCallCheck(this, ElevationHandler);
return _super.apply(this, arguments);
}
_createClass(ElevationHandler, [{
key: "makeElevatedEvent",
value: function makeElevatedEvent(event, position) {
if (!event.pointerDownScreenCoords) {
return event;
}
var _ref2 = this._modeConfig || {},
_ref2$minElevation = _ref2.minElevation,
minElevation = _ref2$minElevation === void 0 ? 0 : _ref2$minElevation,
_ref2$maxElevation = _ref2.maxElevation,
maxElevation = _ref2$maxElevation === void 0 ? 20000 : _ref2$maxElevation,
_ref2$calculateElevat = _ref2.calculateElevationChange,
calculateElevationChange = _ref2$calculateElevat === void 0 ? defaultCalculateElevationChange : _ref2$calculateElevat; // $FlowFixMe - really, I know it has something at index 2
var elevation = position.length === 3 ? position[2] : 0; // calculateElevationChange is configurable becase (at this time) modes are not aware of the viewport
elevation += calculateElevationChange({
pointerDownScreenCoords: event.pointerDownScreenCoords,
screenCoords: event.screenCoords
});
elevation = Math.min(elevation, maxElevation);
elevation = Math.max(elevation, minElevation);
return Object.assign({}, event, {
groundCoords: [position[0], position[1], elevation]
});
}
}, {
key: "handlePointerMove",
value: function handlePointerMove(event) {
var editHandle = (0, _modeHandler.getPickedEditHandle)(event.pointerDownPicks);
var position = editHandle ? editHandle.position : event.groundCoords; // @ts-ignore
return _get(_getPrototypeOf(ElevationHandler.prototype), "handlePointerMove", this).call(this, this.makeElevatedEvent(event, position));
}
}, {
key: "handleStopDragging",
value: function handleStopDragging(event) {
var editHandle = (0, _modeHandler.getPickedEditHandle)(event.picks);
var position = editHandle ? editHandle.position : event.groundCoords; // @ts-ignore
return _get(_getPrototypeOf(ElevationHandler.prototype), "handleStopDragging", this).call(this, this.makeElevatedEvent(event, position));
}
}, {
key: "getCursor",
value: function getCursor(params) {
var cursor = _get(_getPrototypeOf(ElevationHandler.prototype), "getCursor", this).call(this, params);
if (cursor === 'cell') {
cursor = 'ns-resize';
}
return cursor;
}
}], [{
key: "calculateElevationChangeWithViewport",
value: function calculateElevationChangeWithViewport(viewport, _ref3) {
var pointerDownScreenCoords = _ref3.pointerDownScreenCoords,
screenCoords = _ref3.screenCoords;
// Source: https://gis.stackexchange.com/a/127949/111804
var metersPerPixel = 156543.03392 * Math.cos(viewport.latitude * Math.PI / 180) / Math.pow(2, viewport.zoom);
return metersPerPixel * (pointerDownScreenCoords[1] - screenCoords[1]) / 2;
}
}]);
return ElevationHandler;
}(_modifyHandler.ModifyHandler);
exports.ElevationHandler = ElevationHandler;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlLWhhbmRsZXJzL2VsZXZhdGlvbi1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbImRlZmF1bHRDYWxjdWxhdGVFbGV2YXRpb25DaGFuZ2UiLCJwb2ludGVyRG93blNjcmVlbkNvb3JkcyIsInNjcmVlbkNvb3JkcyIsIkVsZXZhdGlvbkhhbmRsZXIiLCJldmVudCIsInBvc2l0aW9uIiwiX21vZGVDb25maWciLCJtaW5FbGV2YXRpb24iLCJtYXhFbGV2YXRpb24iLCJjYWxjdWxhdGVFbGV2YXRpb25DaGFuZ2UiLCJlbGV2YXRpb24iLCJsZW5ndGgiLCJNYXRoIiwibWluIiwibWF4IiwiT2JqZWN0IiwiYXNzaWduIiwiZ3JvdW5kQ29vcmRzIiwiZWRpdEhhbmRsZSIsInBvaW50ZXJEb3duUGlja3MiLCJtYWtlRWxldmF0ZWRFdmVudCIsInBpY2tzIiwicGFyYW1zIiwiY3Vyc29yIiwidmlld3BvcnQiLCJtZXRlcnNQZXJQaXhlbCIsImNvcyIsImxhdGl0dWRlIiwiUEkiLCJwb3ciLCJ6b29tIiwiTW9kaWZ5SGFuZGxlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsK0JBQVQsT0FNRztBQUFBLE1BTERDLHVCQUtDLFFBTERBLHVCQUtDO0FBQUEsTUFKREMsWUFJQyxRQUpEQSxZQUlDO0FBQ0QsU0FBTyxNQUFNRCx1QkFBdUIsQ0FBQyxDQUFELENBQXZCLEdBQTZCQyxZQUFZLENBQUMsQ0FBRCxDQUEvQyxDQUFQO0FBQ0QsQyxDQUVEOzs7SUFDYUMsZ0I7Ozs7Ozs7Ozs7Ozs7c0NBRVRDLEssRUFDQUMsUSxFQUNxQjtBQUNyQixVQUFJLENBQUNELEtBQUssQ0FBQ0gsdUJBQVgsRUFBb0M7QUFDbEMsZUFBT0csS0FBUDtBQUNEOztBQUhvQixrQkFTakIsS0FBS0UsV0FBTCxJQUFvQixFQVRIO0FBQUEscUNBTW5CQyxZQU5tQjtBQUFBLFVBTW5CQSxZQU5tQixtQ0FNSixDQU5JO0FBQUEscUNBT25CQyxZQVBtQjtBQUFBLFVBT25CQSxZQVBtQixtQ0FPSixLQVBJO0FBQUEsd0NBUW5CQyx3QkFSbUI7QUFBQSxVQVFuQkEsd0JBUm1CLHNDQVFRVCwrQkFSUiwwQkFXckI7OztBQUNBLFVBQUlVLFNBQVMsR0FBR0wsUUFBUSxDQUFDTSxNQUFULEtBQW9CLENBQXBCLEdBQXdCTixRQUFRLENBQUMsQ0FBRCxDQUFoQyxHQUFzQyxDQUF0RCxDQVpxQixDQWNyQjs7QUFDQUssTUFBQUEsU0FBUyxJQUFJRCx3QkFBd0IsQ0FBQztBQUNwQ1IsUUFBQUEsdUJBQXVCLEVBQUVHLEtBQUssQ0FBQ0gsdUJBREs7QUFFcENDLFFBQUFBLFlBQVksRUFBRUUsS0FBSyxDQUFDRjtBQUZnQixPQUFELENBQXJDO0FBSUFRLE1BQUFBLFNBQVMsR0FBR0UsSUFBSSxDQUFDQyxHQUFMLENBQVNILFNBQVQsRUFBb0JGLFlBQXBCLENBQVo7QUFDQUUsTUFBQUEsU0FBUyxHQUFHRSxJQUFJLENBQUNFLEdBQUwsQ0FBU0osU0FBVCxFQUFvQkgsWUFBcEIsQ0FBWjtBQUVBLGFBQU9RLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JaLEtBQWxCLEVBQXlCO0FBQzlCYSxRQUFBQSxZQUFZLEVBQUUsQ0FBQ1osUUFBUSxDQUFDLENBQUQsQ0FBVCxFQUFjQSxRQUFRLENBQUMsQ0FBRCxDQUF0QixFQUEyQkssU0FBM0I7QUFEZ0IsT0FBekIsQ0FBUDtBQUdEOzs7c0NBR0NOLEssRUFDc0U7QUFDdEUsVUFBTWMsVUFBVSxHQUFHLHNDQUFvQmQsS0FBSyxDQUFDZSxnQkFBMUIsQ0FBbkI7QUFDQSxVQUFNZCxRQUFRLEdBQUdhLFVBQVUsR0FBR0EsVUFBVSxDQUFDYixRQUFkLEdBQXlCRCxLQUFLLENBQUNhLFlBQTFELENBRnNFLENBR3RFOztBQUNBLHFHQUErQixLQUFLRyxpQkFBTCxDQUF1QmhCLEtBQXZCLEVBQThCQyxRQUE5QixDQUEvQjtBQUNEOzs7dUNBRWtCRCxLLEVBQXlEO0FBQzFFLFVBQU1jLFVBQVUsR0FBRyxzQ0FBb0JkLEtBQUssQ0FBQ2lCLEtBQTFCLENBQW5CO0FBQ0EsVUFBTWhCLFFBQVEsR0FBR2EsVUFBVSxHQUFHQSxVQUFVLENBQUNiLFFBQWQsR0FBeUJELEtBQUssQ0FBQ2EsWUFBMUQsQ0FGMEUsQ0FHMUU7O0FBQ0Esc0dBQWdDLEtBQUtHLGlCQUFMLENBQXVCaEIsS0FBdkIsRUFBOEJDLFFBQTlCLENBQWhDO0FBQ0Q7Ozs4QkFFU2lCLE0sRUFBeUM7QUFDakQsVUFBSUMsTUFBTSxtRkFBbUJELE1BQW5CLENBQVY7O0FBQ0EsVUFBSUMsTUFBTSxLQUFLLE1BQWYsRUFBdUI7QUFDckJBLFFBQUFBLE1BQU0sR0FBRyxXQUFUO0FBQ0Q7O0FBQ0QsYUFBT0EsTUFBUDtBQUNEOzs7eURBR0NDLFEsU0FRUTtBQUFBLFVBTk52Qix1QkFNTSxTQU5OQSx1QkFNTTtBQUFBLFVBTE5DLFlBS00sU0FMTkEsWUFLTTtBQUNSO0FBQ0EsVUFBTXVCLGNBQWMsR0FDakIsZUFBZWIsSUFBSSxDQUFDYyxHQUFMLENBQVVGLFFBQVEsQ0FBQ0csUUFBVCxHQUFvQmYsSUFBSSxDQUFDZ0IsRUFBMUIsR0FBZ0MsR0FBekMsQ0FBaEIsR0FBaUVoQixJQUFJLENBQUNpQixHQUFMLENBQVMsQ0FBVCxFQUFZTCxRQUFRLENBQUNNLElBQXJCLENBRG5FO0FBR0EsYUFBUUwsY0FBYyxJQUFJeEIsdUJBQXVCLENBQUMsQ0FBRCxDQUF2QixHQUE2QkMsWUFBWSxDQUFDLENBQUQsQ0FBN0MsQ0FBZixHQUFvRSxDQUEzRTtBQUNEOzs7O0VBdEVtQzZCLDRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9zaXRpb24gfSBmcm9tICdAbmVidWxhLmdsL2VkaXQtbW9kZXMnO1xuaW1wb3J0IHsgUG9pbnRlck1vdmVFdmVudCwgU3RvcERyYWdnaW5nRXZlbnQgfSBmcm9tICcuLi9ldmVudC10eXBlcyc7XG5pbXBvcnQgeyBFZGl0QWN0aW9uLCBnZXRQaWNrZWRFZGl0SGFuZGxlIH0gZnJvbSAnLi9tb2RlLWhhbmRsZXInO1xuXG5pbXBvcnQgeyBNb2RpZnlIYW5kbGVyIH0gZnJvbSAnLi9tb2RpZnktaGFuZGxlcic7XG5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxjdWxhdGVFbGV2YXRpb25DaGFuZ2Uoe1xuICBwb2ludGVyRG93blNjcmVlbkNvb3JkcyxcbiAgc2NyZWVuQ29vcmRzLFxufToge1xuICBwb2ludGVyRG93blNjcmVlbkNvb3JkczogUG9zaXRpb247XG4gIHNjcmVlbkNvb3JkczogUG9zaXRpb247XG59KSB7XG4gIHJldHVybiAxMCAqIChwb2ludGVyRG93blNjcmVlbkNvb3Jkc1sxXSAtIHNjcmVlbkNvb3Jkc1sxXSk7XG59XG5cbi8vIFRPRE8gZWRpdC1tb2RlczogZGVsZXRlIGhhbmRsZXJzIG9uY2UgRWRpdE1vZGUgZnVsbHkgaW1wbGVtZW50ZWRcbmV4cG9ydCBjbGFzcyBFbGV2YXRpb25IYW5kbGVyIGV4dGVuZHMgTW9kaWZ5SGFuZGxlciB7XG4gIG1ha2VFbGV2YXRlZEV2ZW50KFxuICAgIGV2ZW50OiBQb2ludGVyTW92ZUV2ZW50IHwgU3RvcERyYWdnaW5nRXZlbnQsXG4gICAgcG9zaXRpb246IFBvc2l0aW9uXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmICghZXZlbnQucG9pbnRlckRvd25TY3JlZW5Db29yZHMpIHtcbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBtaW5FbGV2YXRpb24gPSAwLFxuICAgICAgbWF4RWxldmF0aW9uID0gMjAwMDAsXG4gICAgICBjYWxjdWxhdGVFbGV2YXRpb25DaGFuZ2UgPSBkZWZhdWx0Q2FsY3VsYXRlRWxldmF0aW9uQ2hhbmdlLFxuICAgIH0gPSB0aGlzLl9tb2RlQ29uZmlnIHx8IHt9O1xuXG4gICAgLy8gJEZsb3dGaXhNZSAtIHJlYWxseSwgSSBrbm93IGl0IGhhcyBzb21ldGhpbmcgYXQgaW5kZXggMlxuICAgIGxldCBlbGV2YXRpb24gPSBwb3NpdGlvbi5sZW5ndGggPT09IDMgPyBwb3NpdGlvblsyXSA6IDA7XG5cbiAgICAvLyBjYWxjdWxhdGVFbGV2YXRpb25DaGFuZ2UgaXMgY29uZmlndXJhYmxlIGJlY2FzZSAoYXQgdGhpcyB0aW1lKSBtb2RlcyBhcmUgbm90IGF3YXJlIG9mIHRoZSB2aWV3cG9ydFxuICAgIGVsZXZhdGlvbiArPSBjYWxjdWxhdGVFbGV2YXRpb25DaGFuZ2Uoe1xuICAgICAgcG9pbnRlckRvd25TY3JlZW5Db29yZHM6IGV2ZW50LnBvaW50ZXJEb3duU2NyZWVuQ29vcmRzLFxuICAgICAgc2NyZWVuQ29vcmRzOiBldmVudC5zY3JlZW5Db29yZHMsXG4gICAgfSk7XG4gICAgZWxldmF0aW9uID0gTWF0aC5taW4oZWxldmF0aW9uLCBtYXhFbGV2YXRpb24pO1xuICAgIGVsZXZhdGlvbiA9IE1hdGgubWF4KGVsZXZhdGlvbiwgbWluRWxldmF0aW9uKTtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBldmVudCwge1xuICAgICAgZ3JvdW5kQ29vcmRzOiBbcG9zaXRpb25bMF0sIHBvc2l0aW9uWzFdLCBlbGV2YXRpb25dLFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlUG9pbnRlck1vdmUoXG4gICAgZXZlbnQ6IFBvaW50ZXJNb3ZlRXZlbnRcbiAgKTogeyBlZGl0QWN0aW9uOiBFZGl0QWN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZDsgY2FuY2VsTWFwUGFuOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IGVkaXRIYW5kbGUgPSBnZXRQaWNrZWRFZGl0SGFuZGxlKGV2ZW50LnBvaW50ZXJEb3duUGlja3MpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gZWRpdEhhbmRsZSA/IGVkaXRIYW5kbGUucG9zaXRpb24gOiBldmVudC5ncm91bmRDb29yZHM7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiBzdXBlci5oYW5kbGVQb2ludGVyTW92ZSh0aGlzLm1ha2VFbGV2YXRlZEV2ZW50KGV2ZW50LCBwb3NpdGlvbikpO1xuICB9XG5cbiAgaGFuZGxlU3RvcERyYWdnaW5nKGV2ZW50OiBTdG9wRHJhZ2dpbmdFdmVudCk6IEVkaXRBY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlZGl0SGFuZGxlID0gZ2V0UGlja2VkRWRpdEhhbmRsZShldmVudC5waWNrcyk7XG4gICAgY29uc3QgcG9zaXRpb24gPSBlZGl0SGFuZGxlID8gZWRpdEhhbmRsZS5wb3NpdGlvbiA6IGV2ZW50Lmdyb3VuZENvb3JkcztcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHN1cGVyLmhhbmRsZVN0b3BEcmFnZ2luZyh0aGlzLm1ha2VFbGV2YXRlZEV2ZW50KGV2ZW50LCBwb3NpdGlvbikpO1xuICB9XG5cbiAgZ2V0Q3Vyc29yKHBhcmFtczogeyBpc0RyYWdnaW5nOiBib29sZWFuIH0pOiBzdHJpbmcge1xuICAgIGxldCBjdXJzb3IgPSBzdXBlci5nZXRDdXJzb3IocGFyYW1zKTtcbiAgICBpZiAoY3Vyc29yID09PSAnY2VsbCcpIHtcbiAgICAgIGN1cnNvciA9ICducy1yZXNpemUnO1xuICAgIH1cbiAgICByZXR1cm4gY3Vyc29yO1xuICB9XG5cbiAgc3RhdGljIGNhbGN1bGF0ZUVsZXZhdGlvbkNoYW5nZVdpdGhWaWV3cG9ydChcbiAgICB2aWV3cG9ydDogYW55LFxuICAgIHtcbiAgICAgIHBvaW50ZXJEb3duU2NyZWVuQ29vcmRzLFxuICAgICAgc2NyZWVuQ29vcmRzLFxuICAgIH06IHtcbiAgICAgIHBvaW50ZXJEb3duU2NyZWVuQ29vcmRzOiBQb3NpdGlvbjtcbiAgICAgIHNjcmVlbkNvb3JkczogUG9zaXRpb247XG4gICAgfVxuICApOiBudW1iZXIge1xuICAgIC8vIFNvdXJjZTogaHR0cHM6Ly9naXMuc3RhY2tleGNoYW5nZS5jb20vYS8xMjc5NDkvMTExODA0XG4gICAgY29uc3QgbWV0ZXJzUGVyUGl4ZWwgPVxuICAgICAgKDE1NjU0My4wMzM5MiAqIE1hdGguY29zKCh2aWV3cG9ydC5sYXRpdHVkZSAqIE1hdGguUEkpIC8gMTgwKSkgLyBNYXRoLnBvdygyLCB2aWV3cG9ydC56b29tKTtcblxuICAgIHJldHVybiAobWV0ZXJzUGVyUGl4ZWwgKiAocG9pbnRlckRvd25TY3JlZW5Db29yZHNbMV0gLSBzY3JlZW5Db29yZHNbMV0pKSAvIDI7XG4gIH1cbn1cbiJdfQ==
;