kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
133 lines (132 loc) • 16.1 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = useFetchVectorTileMetadata;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = require("react");
var _pmtiles = require("@loaders.gl/pmtiles");
var _constants = require("@kepler.gl/constants");
var _table = require("@kepler.gl/table");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var DEFAULT_PROCESS_FUNCTION = function DEFAULT_PROCESS_FUNCTION(json) {
return _objectSpread({
metaJson: null,
bounds: null,
center: null,
maxZoom: null,
minZoom: null,
fields: []
}, json);
};
/** Hook to fetch and return mvt or pmtiles metadata. */
function useFetchVectorTileMetadata(_ref) {
var remoteTileFormat = _ref.remoteTileFormat,
tilesetUrl = _ref.tilesetUrl,
metadataUrl = _ref.metadataUrl,
_ref$process = _ref.process,
process = _ref$process === void 0 ? DEFAULT_PROCESS_FUNCTION : _ref$process;
var _useState = (0, _react.useState)(null),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
error = _useState2[0],
setError = _useState2[1];
var _useState3 = (0, _react.useState)(null),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
data = _useState4[0],
setData = _useState4[1];
var _useState5 = (0, _react.useState)(false),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
loading = _useState6[0],
setLoading = _useState6[1];
(0, _react.useEffect)(function () {
var getAndProcessMetadata = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
var metadata, tileSource, processedMetadata;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
setError(null);
setData(null);
if (!metadataUrl) {
_context.next = 33;
break;
}
setLoading(true);
_context.prev = 4;
metadata = null;
if (!(remoteTileFormat === _constants.RemoteTileFormat.MVT)) {
_context.next = 12;
break;
}
_context.next = 9;
return (0, _table.getMVTMetadata)(metadataUrl);
case 9:
metadata = _context.sent;
_context.next = 16;
break;
case 12:
tileSource = _pmtiles.PMTilesSource.createDataSource(metadataUrl, {});
_context.next = 15;
return tileSource.metadata;
case 15:
metadata = _context.sent;
case 16:
if (metadata) {
_context.next = 18;
break;
}
throw new Error('Failed to fetch metadata');
case 18:
processedMetadata = process(metadata);
if (!(processedMetadata instanceof Error)) {
_context.next = 23;
break;
}
setError(processedMetadata);
_context.next = 27;
break;
case 23:
setError(null);
_context.next = 26;
return (0, _table.getFieldsFromTile)({
remoteTileFormat: remoteTileFormat,
tilesetUrl: tilesetUrl,
metadataUrl: metadataUrl,
metadata: processedMetadata
});
case 26:
setData(processedMetadata);
case 27:
_context.next = 32;
break;
case 29:
_context.prev = 29;
_context.t0 = _context["catch"](4);
setError(_context.t0);
case 32:
setLoading(false);
case 33:
case "end":
return _context.stop();
}
}, _callee, null, [[4, 29]]);
}));
return function getAndProcessMetadata() {
return _ref2.apply(this, arguments);
};
}();
getAndProcessMetadata();
}, [metadataUrl, tilesetUrl, remoteTileFormat, setError, setData, process]);
return {
data: data,
loading: loading,
error: error
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3BtdGlsZXMiLCJfY29uc3RhbnRzIiwiX3RhYmxlIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJERUZBVUxUX1BST0NFU1NfRlVOQ1RJT04iLCJqc29uIiwibWV0YUpzb24iLCJib3VuZHMiLCJjZW50ZXIiLCJtYXhab29tIiwibWluWm9vbSIsImZpZWxkcyIsInVzZUZldGNoVmVjdG9yVGlsZU1ldGFkYXRhIiwiX3JlZiIsInJlbW90ZVRpbGVGb3JtYXQiLCJ0aWxlc2V0VXJsIiwibWV0YWRhdGFVcmwiLCJfcmVmJHByb2Nlc3MiLCJwcm9jZXNzIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZXJyb3IiLCJzZXRFcnJvciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiZGF0YSIsInNldERhdGEiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwidXNlRWZmZWN0IiwiZ2V0QW5kUHJvY2Vzc01ldGFkYXRhIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIm1ldGFkYXRhIiwidGlsZVNvdXJjZSIsInByb2Nlc3NlZE1ldGFkYXRhIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIlJlbW90ZVRpbGVGb3JtYXQiLCJNVlQiLCJnZXRNVlRNZXRhZGF0YSIsInNlbnQiLCJQTVRpbGVzU291cmNlIiwiY3JlYXRlRGF0YVNvdXJjZSIsIkVycm9yIiwiZ2V0RmllbGRzRnJvbVRpbGUiLCJ0MCIsInN0b3AiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvdXNlLWZldGNoLXZlY3Rvci10aWxlLW1ldGFkYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7dXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge1RpbGVKU09OfSBmcm9tICdAbG9hZGVycy5nbC9tdnQnO1xuaW1wb3J0IHtQTVRpbGVzU291cmNlLCBQTVRpbGVzTWV0YWRhdGF9IGZyb20gJ0Bsb2FkZXJzLmdsL3BtdGlsZXMnO1xuXG5pbXBvcnQge1JlbW90ZVRpbGVGb3JtYXR9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0TVZUTWV0YWRhdGEsIFZlY3RvclRpbGVNZXRhZGF0YSwgZ2V0RmllbGRzRnJvbVRpbGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG50eXBlIEZldGNoVmVjdG9yVGlsZU1ldGFkYXRhUHJvcHMgPSB7XG4gIG1ldGFkYXRhVXJsOiBzdHJpbmcgfCBudWxsO1xuICB0aWxlc2V0VXJsOiBzdHJpbmcgfCBudWxsO1xuICByZW1vdGVUaWxlRm9ybWF0OiBSZW1vdGVUaWxlRm9ybWF0O1xuICBwcm9jZXNzPzogKGpzb246IFBNVGlsZXNNZXRhZGF0YSB8IFRpbGVKU09OKSA9PiBWZWN0b3JUaWxlTWV0YWRhdGEgfCBFcnJvciB8IG51bGw7XG59O1xuXG5jb25zdCBERUZBVUxUX1BST0NFU1NfRlVOQ1RJT04gPSAoanNvbjogUE1UaWxlc01ldGFkYXRhIHwgVGlsZUpTT04pOiBWZWN0b3JUaWxlTWV0YWRhdGEgPT4ge1xuICByZXR1cm4ge1xuICAgIG1ldGFKc29uOiBudWxsLFxuICAgIGJvdW5kczogbnVsbCxcbiAgICBjZW50ZXI6IG51bGwsXG4gICAgbWF4Wm9vbTogbnVsbCxcbiAgICBtaW5ab29tOiBudWxsLFxuICAgIGZpZWxkczogW10sXG4gICAgLi4uanNvblxuICB9O1xufTtcblxudHlwZSBGZXRjaFZlY3RvclRpbGVNZXRhZGF0YVJldHVybiA9IHtcbiAgZGF0YTogVmVjdG9yVGlsZU1ldGFkYXRhIHwgbnVsbDtcbiAgbG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I6IEVycm9yIHwgbnVsbDtcbn07XG5cbi8qKiBIb29rIHRvIGZldGNoIGFuZCByZXR1cm4gbXZ0IG9yIHBtdGlsZXMgbWV0YWRhdGEuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGZXRjaFZlY3RvclRpbGVNZXRhZGF0YSh7XG4gIHJlbW90ZVRpbGVGb3JtYXQsXG4gIHRpbGVzZXRVcmwsXG4gIG1ldGFkYXRhVXJsLFxuICBwcm9jZXNzID0gREVGQVVMVF9QUk9DRVNTX0ZVTkNUSU9OXG59OiBGZXRjaFZlY3RvclRpbGVNZXRhZGF0YVByb3BzKTogRmV0Y2hWZWN0b3JUaWxlTWV0YWRhdGFSZXR1cm4ge1xuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPEVycm9yIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPFZlY3RvclRpbGVNZXRhZGF0YSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBnZXRBbmRQcm9jZXNzTWV0YWRhdGEgPSBhc3luYyAoKSA9PiB7XG4gICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIHNldERhdGEobnVsbCk7XG4gICAgICBpZiAobWV0YWRhdGFVcmwpIHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBtZXRhZGF0YTogUE1UaWxlc01ldGFkYXRhIHwgVGlsZUpTT04gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICBpZiAocmVtb3RlVGlsZUZvcm1hdCA9PT0gUmVtb3RlVGlsZUZvcm1hdC5NVlQpIHtcbiAgICAgICAgICAgIG1ldGFkYXRhID0gYXdhaXQgZ2V0TVZUTWV0YWRhdGEobWV0YWRhdGFVcmwpO1xuXG4gICAgICAgICAgICAvLyBNVlRTb3VyY2UgcmV0dXJucyBtZXNzeSBwYXJ0aWFsIG1ldGFkYXRhXG4gICAgICAgICAgICAvLyBNVlRTb3VyY2UuY3JlYXRlRGF0YVNvdXJjZSgnJywge1xuICAgICAgICAgICAgLy8gICBtdnQ6IHtcbiAgICAgICAgICAgIC8vICAgICBtZXRhZGF0YVVybDogZGVjb2RlVVJJQ29tcG9uZW50KHVybClcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdGlsZVNvdXJjZSA9IFBNVGlsZXNTb3VyY2UuY3JlYXRlRGF0YVNvdXJjZShtZXRhZGF0YVVybCwge30pO1xuICAgICAgICAgICAgbWV0YWRhdGEgPSBhd2FpdCB0aWxlU291cmNlLm1ldGFkYXRhO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNpbmNlIHdlIHN3aXRjaGVkIHRvIFNvdXJjZS5jcmVhdGVEYXRhU291cmNlIGRldGFpbGVkIHJlc3BvbnNlIGVycm9ycyBhcmVuJ3QgYXZhaWxhYmxlIGhlcmUuLi5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBtZXRhZGF0YScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZE1ldGFkYXRhID0gcHJvY2VzcyhtZXRhZGF0YSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3NlZE1ldGFkYXRhIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHNldEVycm9yKHByb2Nlc3NlZE1ldGFkYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgICAgIGF3YWl0IGdldEZpZWxkc0Zyb21UaWxlKHtcbiAgICAgICAgICAgICAgcmVtb3RlVGlsZUZvcm1hdCxcbiAgICAgICAgICAgICAgdGlsZXNldFVybCxcbiAgICAgICAgICAgICAgbWV0YWRhdGFVcmwsXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiBwcm9jZXNzZWRNZXRhZGF0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNldERhdGEocHJvY2Vzc2VkTWV0YWRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAobWV0YWRhdGFFcnJvcikge1xuICAgICAgICAgIHNldEVycm9yKG1ldGFkYXRhRXJyb3IgYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZ2V0QW5kUHJvY2Vzc01ldGFkYXRhKCk7XG4gIH0sIFttZXRhZGF0YVVybCwgdGlsZXNldFVybCwgcmVtb3RlVGlsZUZvcm1hdCwgc2V0RXJyb3IsIHNldERhdGEsIHByb2Nlc3NdKTtcblxuICByZXR1cm4ge2RhdGEsIGxvYWRpbmcsIGVycm9yfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFHQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFBdUYsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFB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
;