kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
158 lines (156 loc) • 23.1 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.SaveDataToMapToolComponent = SaveDataToMapToolComponent;
exports.saveDataToMap = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _utils = require("@openassistant/utils");
var _osm = require("@openassistant/osm");
var _zod = require("zod");
var _react = require("react");
var _reactRedux = require("react-redux");
var _processors = require("@kepler.gl/processors");
var _actions = require("@kepler.gl/actions");
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; }
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
var saveDataToMap = exports.saveDataToMap = (0, _utils.tool)({
description: 'Save data generated from other tools e.g. buffer, zipcode, county, state, isochrone, etc. to kepler.gl. Please avoid using blank space or special characters in the saveDatasetName.',
parameters: _zod.z.object({
datasetNames: _zod.z.array(_zod.z.string()),
saveDatasetName: _zod.z.string()
}),
execute: function () {
var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(args) {
var datasetNames, saveDatasetName, loadedDatasetNames, result, _iterator, _step, datasetName, geoms, datasetId;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
datasetNames = args.datasetNames, saveDatasetName = args.saveDatasetName;
loadedDatasetNames = [];
result = [];
_iterator = _createForOfIteratorHelper(datasetNames);
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
datasetName = _step.value;
geoms = (0, _osm.getCachedData)(datasetName);
if (geoms) {
// TODO: the geoms could be BinaryGeometry here
result.push(geoms);
loadedDatasetNames.push(datasetName);
// remove the dataset from the cache
(0, _osm.removeCachedData)(datasetName);
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
if (!(result.length === 0)) {
_context.next = 8;
break;
}
throw new Error("Can not save dataset, No datasets found from ".concat(datasetNames.join(', ')));
case 8:
// create a unique id for the combined datasets
datasetId = saveDatasetName ? "".concat(saveDatasetName, "_").concat((0, _osm.generateId)()) : (0, _osm.generateId)();
return _context.abrupt("return", {
llmResult: {
success: true,
savedDatasetName: datasetId,
details: "Successfully save dataset: ".concat(datasetId, " in kepler.gl")
},
additionalData: {
result: result,
loadedDatasetNames: loadedDatasetNames,
datasetId: datasetId
}
});
case 12:
_context.prev = 12;
_context.t0 = _context["catch"](0);
return _context.abrupt("return", {
llmResult: {
success: false,
details: "Can not save data to kepler.gl, ".concat(_context.t0)
}
});
case 15:
case "end":
return _context.stop();
}
}, _callee, null, [[0, 12]]);
}));
function execute(_x) {
return _execute.apply(this, arguments);
}
return execute;
}(),
component: SaveDataToMapToolComponent
});
function SaveDataToMapToolComponent(_ref) {
var result = _ref.result,
datasetId = _ref.datasetId;
var dispatch = (0, _reactRedux.useDispatch)();
(0, _react.useEffect)(function () {
function addDatasetsToMap() {
return _addDatasetsToMap.apply(this, arguments);
}
function _addDatasetsToMap() {
_addDatasetsToMap = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var combinedGeojson, parsedData;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
// combine the datasets (FeatureCollection[]) into one FeatureCollection
combinedGeojson = result.reduce(function (acc, geom) {
return _objectSpread(_objectSpread({}, acc), {}, {
features: [].concat((0, _toConsumableArray2["default"])(acc.features), (0, _toConsumableArray2["default"])(geom.features))
});
}, {
type: 'FeatureCollection',
features: []
}); // add the geojson to kepler.gl
_context2.next = 3;
return (0, _processors.processFileData)({
content: {
data: combinedGeojson,
fileName: "".concat(datasetId)
},
fileCache: []
});
case 3:
parsedData = _context2.sent;
// update the id of parsedData
// parsedData[0].info.id = datasetId;
dispatch((0, _actions.addDataToMap)({
datasets: parsedData,
options: {
autoCreateLayers: true,
centerMap: false
}
}));
case 5:
case "end":
return _context2.stop();
}
}, _callee2);
}));
return _addDatasetsToMap.apply(this, arguments);
}
addDatasetsToMap();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return null;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX29zbSIsIl96b2QiLCJfcmVhY3QiLCJfcmVhY3RSZWR1eCIsIl9wcm9jZXNzb3JzIiwiX2FjdGlvbnMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJzYXZlRGF0YVRvTWFwIiwiZXhwb3J0cyIsInRvb2wiLCJkZXNjcmlwdGlvbiIsInBhcmFtZXRlcnMiLCJ6Iiwib2JqZWN0IiwiZGF0YXNldE5hbWVzIiwiYXJyYXkiLCJzdHJpbmciLCJzYXZlRGF0YXNldE5hbWUiLCJleGVjdXRlIiwiX2V4ZWN1dGUiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImFyZ3MiLCJsb2FkZWREYXRhc2V0TmFtZXMiLCJyZXN1bHQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImRhdGFzZXROYW1lIiwiZ2VvbXMiLCJkYXRhc2V0SWQiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJnZXRDYWNoZWREYXRhIiwicmVtb3ZlQ2FjaGVkRGF0YSIsImVyciIsIkVycm9yIiwiY29uY2F0Iiwiam9pbiIsImdlbmVyYXRlSWQiLCJhYnJ1cHQiLCJsbG1SZXN1bHQiLCJzdWNjZXNzIiwic2F2ZWREYXRhc2V0TmFtZSIsImRldGFpbHMiLCJhZGRpdGlvbmFsRGF0YSIsInQwIiwic3RvcCIsIl94IiwiY29tcG9uZW50IiwiU2F2ZURhdGFUb01hcFRvb2xDb21wb25lbnQiLCJfcmVmIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsInVzZUVmZmVjdCIsImFkZERhdGFzZXRzVG9NYXAiLCJfYWRkRGF0YXNldHNUb01hcCIsIl9jYWxsZWUyIiwiY29tYmluZWRHZW9qc29uIiwicGFyc2VkRGF0YSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInJlZHVjZSIsImFjYyIsImdlb20iLCJmZWF0dXJlcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJ0eXBlIiwicHJvY2Vzc0ZpbGVEYXRhIiwiY29udGVudCIsImRhdGEiLCJmaWxlTmFtZSIsImZpbGVDYWNoZSIsInNlbnQiLCJhZGREYXRhVG9NYXAiLCJkYXRhc2V0cyIsIm9wdGlvbnMiLCJhdXRvQ3JlYXRlTGF5ZXJzIiwiY2VudGVyTWFwIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xzL2tlcGxlci10b29scy9zYXZlLWRhdGEtdG9vbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHt0b29sfSBmcm9tICdAb3BlbmFzc2lzdGFudC91dGlscyc7XG5pbXBvcnQge2dldENhY2hlZERhdGEsIGdlbmVyYXRlSWQsIHJlbW92ZUNhY2hlZERhdGF9IGZyb20gJ0BvcGVuYXNzaXN0YW50L29zbSc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5pbXBvcnQge3VzZUVmZmVjdH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHtwcm9jZXNzRmlsZURhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge2FkZERhdGFUb01hcH0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7RmVhdHVyZUNvbGxlY3Rpb259IGZyb20gJ2dlb2pzb24nO1xuXG5leHBvcnQgY29uc3Qgc2F2ZURhdGFUb01hcCA9IHRvb2woe1xuICBkZXNjcmlwdGlvbjpcbiAgICAnU2F2ZSBkYXRhIGdlbmVyYXRlZCBmcm9tIG90aGVyIHRvb2xzIGUuZy4gYnVmZmVyLCB6aXBjb2RlLCBjb3VudHksIHN0YXRlLCBpc29jaHJvbmUsIGV0Yy4gdG8ga2VwbGVyLmdsLiBQbGVhc2UgYXZvaWQgdXNpbmcgYmxhbmsgc3BhY2Ugb3Igc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBzYXZlRGF0YXNldE5hbWUuJyxcbiAgcGFyYW1ldGVyczogei5vYmplY3Qoe1xuICAgIGRhdGFzZXROYW1lczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBzYXZlRGF0YXNldE5hbWU6IHouc3RyaW5nKClcbiAgfSksXG4gIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7ZGF0YXNldE5hbWVzOiBzdHJpbmdbXTsgc2F2ZURhdGFzZXROYW1lPzogc3RyaW5nIHwgbnVsbH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge2RhdGFzZXROYW1lcywgc2F2ZURhdGFzZXROYW1lfSA9IGFyZ3M7XG4gICAgICBjb25zdCBsb2FkZWREYXRhc2V0TmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCByZXN1bHQ6IEZlYXR1cmVDb2xsZWN0aW9uW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBkYXRhc2V0TmFtZSBvZiBkYXRhc2V0TmFtZXMpIHtcbiAgICAgICAgY29uc3QgZ2VvbXMgPSBnZXRDYWNoZWREYXRhKGRhdGFzZXROYW1lKTtcbiAgICAgICAgaWYgKGdlb21zKSB7XG4gICAgICAgICAgLy8gVE9ETzogdGhlIGdlb21zIGNvdWxkIGJlIEJpbmFyeUdlb21ldHJ5IGhlcmVcbiAgICAgICAgICByZXN1bHQucHVzaChnZW9tcyBhcyBGZWF0dXJlQ29sbGVjdGlvbik7XG4gICAgICAgICAgbG9hZGVkRGF0YXNldE5hbWVzLnB1c2goZGF0YXNldE5hbWUpO1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgZGF0YXNldCBmcm9tIHRoZSBjYWNoZVxuICAgICAgICAgIHJlbW92ZUNhY2hlZERhdGEoZGF0YXNldE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBzYXZlIGRhdGFzZXQsIE5vIGRhdGFzZXRzIGZvdW5kIGZyb20gJHtkYXRhc2V0TmFtZXMuam9pbignLCAnKX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIGEgdW5pcXVlIGlkIGZvciB0aGUgY29tYmluZWQgZGF0YXNldHNcbiAgICAgIGNvbnN0IGRhdGFzZXRJZCA9IHNhdmVEYXRhc2V0TmFtZSA/IGAke3NhdmVEYXRhc2V0TmFtZX1fJHtnZW5lcmF0ZUlkKCl9YCA6IGdlbmVyYXRlSWQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGxtUmVzdWx0OiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBzYXZlZERhdGFzZXROYW1lOiBkYXRhc2V0SWQsXG4gICAgICAgICAgZGV0YWlsczogYFN1Y2Nlc3NmdWxseSBzYXZlIGRhdGFzZXQ6ICR7ZGF0YXNldElkfSBpbiBrZXBsZXIuZ2xgXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgcmVzdWx0LFxuICAgICAgICAgIGxvYWRlZERhdGFzZXROYW1lcyxcbiAgICAgICAgICBkYXRhc2V0SWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGxtUmVzdWx0OiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgZGV0YWlsczogYENhbiBub3Qgc2F2ZSBkYXRhIHRvIGtlcGxlci5nbCwgJHtlcnJvcn1gXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuICBjb21wb25lbnQ6IFNhdmVEYXRhVG9NYXBUb29sQ29tcG9uZW50XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNhdmVEYXRhVG9NYXBUb29sQ29tcG9uZW50KHtcbiAgcmVzdWx0LFxuICBkYXRhc2V0SWRcbn06IHtcbiAgcmVzdWx0OiBGZWF0dXJlQ29sbGVjdGlvbltdO1xuICBkYXRhc2V0SWQ6IHN0cmluZztcbn0pIHtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXN5bmMgZnVuY3Rpb24gYWRkRGF0YXNldHNUb01hcCgpIHtcbiAgICAgIC8vIGNvbWJpbmUgdGhlIGRhdGFzZXRzIChGZWF0dXJlQ29sbGVjdGlvbltdKSBpbnRvIG9uZSBGZWF0dXJlQ29sbGVjdGlvblxuICAgICAgY29uc3QgY29tYmluZWRHZW9qc29uID0gcmVzdWx0LnJlZHVjZShcbiAgICAgICAgKGFjYywgZ2VvbSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICBmZWF0dXJlczogWy4uLmFjYy5mZWF0dXJlcywgLi4uZ2VvbS5mZWF0dXJlc11cbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7dHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJywgZmVhdHVyZXM6IFtdfVxuICAgICAgKTtcblxuICAgICAgLy8gYWRkIHRoZSBnZW9qc29uIHRvIGtlcGxlci5nbFxuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IGF3YWl0IHByb2Nlc3NGaWxlRGF0YSh7XG4gICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICBkYXRhOiBjb21iaW5lZEdlb2pzb24sXG4gICAgICAgICAgZmlsZU5hbWU6IGAke2RhdGFzZXRJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVDYWNoZTogW11cbiAgICAgIH0pO1xuXG4gICAgICAvLyB1cGRhdGUgdGhlIGlkIG9mIHBhcnNlZERhdGFcbiAgICAgIC8vIHBhcnNlZERhdGFbMF0uaW5mby5pZCA9IGRhdGFzZXRJZDtcblxuICAgICAgZGlzcGF0Y2goXG4gICAgICAgIGFkZERhdGFUb01hcCh7ZGF0YXNldHM6IHBhcnNlZERhdGEsIG9wdGlvbnM6IHthdXRvQ3JlYXRlTGF5ZXJzOiB0cnVlLCBjZW50ZXJNYXA6IGZhbHNlfX0pXG4gICAgICApO1xuICAgIH1cbiAgICBhZGREYXRhc2V0c1RvTWFwKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLElBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUFnRCxTQUFBTyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFB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
;