UNPKG

kepler.gl.geoiq

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

170 lines (140 loc) 17.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.findDefaultLayer = findDefaultLayer; exports.calculateLayerData = calculateLayerData; exports.getLightSettingsFromBounds = getLightSettingsFromBounds; exports.calculateLayerDataAfterAPICall = calculateLayerDataAfterAPICall; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _defaultSettings = require("../../constants/default-settings"); var _axios = _interopRequireDefault(require("axios")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } /** * Find default layers from fields * * @param {Object} dataset * @param {Object} layerClasses * @returns {Array} found layers */ function findDefaultLayer(dataset, layerClasses) { if (!dataset) { return []; } var layers = []; Object.keys(layerClasses).forEach(function (lc) { var layerProps = layerClasses[lc].findDefaultLayerProps(dataset); if (layerProps) { var found = (Array.isArray(layerProps) ? layerProps : [layerProps]).map(function (props) { return new layerClasses[lc](_objectSpread({}, props, { dataId: dataset.id })); }); layers = layers.concat(found); } }); return layers; } /** * calculate layer data based on layer type, col Config, * return updated layer if colorDomain, dataMap has changed * @param {object} layer * @param {object} state * @param {object} oldLayerData * @param {object} opt * @returns {object} {layerData: {}, layer: {} || undefined} */ function calculateLayerData(layer, state, oldLayerData) { var opt = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; var type = layer.type; var datasets = state.datasets; var _ref = datasets[layer.config.dataId] || {}, data = _ref.data, filteredIndex = _ref.filteredIndex, allData = _ref.allData; if (!type || !layer.hasAllColumns()) { return { layer: layer, layerData: {} }; } if (type === 'boundary' || type === 'pincode') { // const url = // 'https://firebasestorage.googleapis.com/v0/b/geoiqdashboard.appspot.com/o/externalDatasets%2FZLsAUPQNsUXhFvrlD0z7%2FBangalore%20Locality%20Boundaries.geojson?alt=media&token=9d5d4b94-875a-4acc-a72e-3ee40f62e7c9'; // // axios.get(url).then(function(response) { // // console.log(response.data); var response = undefined; var layerData = layer.formatLayerData(data, allData, filteredIndex, oldLayerData, response, opt); return { layerData: layerData, layer: layer }; // }); } else { var _layerData = layer.formatLayerData(data, allData, filteredIndex, oldLayerData, opt); return { layerData: _layerData, layer: layer }; } } function getData() { var res; return _regenerator["default"].async(function getData$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.prev = 0; _context.next = 3; return _regenerator["default"].awrap((0, _axios["default"])({ url: 'https://firebasestorage.googleapis.com/v0/b/geoiqdashboard.appspot.com/o/externalDatasets%2FZLsAUPQNsUXhFvrlD0z7%2FBangalore%20Locality%20Boundaries.geojson?alt=media&token=9d5d4b94-875a-4acc-a72e-3ee40f62e7c9', method: 'get', headers: { 'Content-Type': 'application/json' } })); case 3: res = _context.sent; if (res.status == 200) {} // test for status you want, etc // console.log(res.status); // Don't forget to return something return _context.abrupt("return", res.data); case 8: _context.prev = 8; _context.t0 = _context["catch"](0); case 10: case "end": return _context.stop(); } } }, null, null, [[0, 8]]); } function getLightSettingsFromBounds(bounds) { return Array.isArray(bounds) && bounds.length >= 4 ? _objectSpread({}, _defaultSettings.DEFAULT_LIGHT_SETTINGS, { lightsPosition: [].concat((0, _toConsumableArray2["default"])(bounds.slice(0, 2)), [_defaultSettings.DEFAULT_LIGHT_SETTINGS.lightsPosition[2]], (0, _toConsumableArray2["default"])(bounds.slice(2, 4)), [_defaultSettings.DEFAULT_LIGHT_SETTINGS.lightsPosition[5]]) }) : _defaultSettings.DEFAULT_LIGHT_SETTINGS; } function calculateLayerDataAfterAPICall(layer, state, oldLayerData, response) { var opt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; var type = layer.type; var datasets = state.datasets; var _ref2 = datasets[layer.config.dataId] || {}, data = _ref2.data, filteredIndex = _ref2.filteredIndex, allData = _ref2.allData; if (!type || !layer.hasAllColumns()) { return { layer: layer, layerData: {} }; } var layerData = layer.formatLayerData(data, allData, filteredIndex, oldLayerData, response, opt); return { layerData: layerData, layer: layer }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9sYXllci11dGlscy9sYXllci11dGlscy5qcyJdLCJuYW1lcyI6WyJmaW5kRGVmYXVsdExheWVyIiwiZGF0YXNldCIsImxheWVyQ2xhc3NlcyIsImxheWVycyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwibGMiLCJsYXllclByb3BzIiwiZmluZERlZmF1bHRMYXllclByb3BzIiwiZm91bmQiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJwcm9wcyIsImRhdGFJZCIsImlkIiwiY29uY2F0IiwiY2FsY3VsYXRlTGF5ZXJEYXRhIiwibGF5ZXIiLCJzdGF0ZSIsIm9sZExheWVyRGF0YSIsIm9wdCIsInR5cGUiLCJkYXRhc2V0cyIsImNvbmZpZyIsImRhdGEiLCJmaWx0ZXJlZEluZGV4IiwiYWxsRGF0YSIsImhhc0FsbENvbHVtbnMiLCJsYXllckRhdGEiLCJyZXNwb25zZSIsInVuZGVmaW5lZCIsImZvcm1hdExheWVyRGF0YSIsImdldERhdGEiLCJ1cmwiLCJtZXRob2QiLCJoZWFkZXJzIiwicmVzIiwic3RhdHVzIiwiZ2V0TGlnaHRTZXR0aW5nc0Zyb21Cb3VuZHMiLCJib3VuZHMiLCJsZW5ndGgiLCJERUZBVUxUX0xJR0hUX1NFVFRJTkdTIiwibGlnaHRzUG9zaXRpb24iLCJzbGljZSIsImNhbGN1bGF0ZUxheWVyRGF0YUFmdGVyQVBJQ2FsbCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOzs7Ozs7QUFFQTs7Ozs7OztBQU9PLFNBQVNBLGdCQUFULENBQTBCQyxPQUExQixFQUFtQ0MsWUFBbkMsRUFBaUQ7QUFDdEQsTUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDWixXQUFPLEVBQVA7QUFDRDs7QUFFRCxNQUFJRSxNQUFNLEdBQUcsRUFBYjtBQUNBQyxFQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWUgsWUFBWixFQUEwQkksT0FBMUIsQ0FBa0MsVUFBQUMsRUFBRSxFQUFJO0FBQ3RDLFFBQU1D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QixDQUFsQjtBQVNBLFNBQU87QUFBQ1EsSUFBQUEsU0FBUyxFQUFUQSxTQUFEO0FBQVlYLElBQUFBLEtBQUssRUFBTEE7QUFBWixHQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIDIwMTkgVWJlciBUZWNobm9sb2dpZXMsIEluYy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4vLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4vLyBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4vLyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4vLyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbi8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW5cbi8vIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1Jcbi8vIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuLy8gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4vLyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4vLyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuLy8gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTlxuLy8gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge0RFRkFVTFRfTElHSFRfU0VUVElOR1N9IGZyb20gJ2NvbnN0YW50cy9kZWZhdWx0LXNldHRpbmdzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5cbi8qKlxuICogRmluZCBkZWZhdWx0IGxheWVycyBmcm9tIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhc2V0XG4gKiBAcGFyYW0ge09iamVjdH0gbGF5ZXJDbGFzc2VzXG4gKiBAcmV0dXJucyB7QXJyYXl9IGZvdW5kIGxheWVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZERlZmF1bHRMYXllcihkYXRhc2V0LCBsYXllckNsYXNzZXMpIHtcbiAgaWYgKCFkYXRhc2V0KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IGxheWVycyA9IFtdO1xuICBPYmplY3Qua2V5cyhsYXllckNsYXNzZXMpLmZvckVhY2gobGMgPT4ge1xuICAgIGNvbnN0IGxheWVyUHJvcHMgPSBsYXllckNsYXNzZXNbbGNdLmZpbmREZWZhdWx0TGF5ZXJQcm9wcyhkYXRhc2V0KTtcbiAgICBpZiAobGF5ZXJQcm9wcykge1xuICAgICAgY29uc3QgZm91bmQgPSAoQXJyYXkuaXNBcnJheShsYXllclByb3BzKSA/IGxheWVyUHJvcHMgOiBbbGF5ZXJQcm9wc10pLm1hcChcbiAgICAgICAgcHJvcHMgPT4gbmV3IGxheWVyQ2xhc3Nlc1tsY10oey4uLnByb3BzLCBkYXRhSWQ6IGRhdGFzZXQuaWR9KVxuICAgICAgKTtcbiAgICAgIGxheWVycyA9IGxheWVycy5jb25jYXQoZm91bmQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGxheWVycztcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgbGF5ZXIgZGF0YSBiYXNlZCBvbiBsYXllciB0eXBlLCBjb2wgQ29uZmlnLFxuICogcmV0dXJuIHVwZGF0ZWQgbGF5ZXIgaWYgY29sb3JEb21haW4sIGRhdGFNYXAgaGFzIGNoYW5nZWRcbiAqIEBwYXJhbSB7b2JqZWN0fSBsYXllclxuICogQHBhcmFtIHtvYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gb2xkTGF5ZXJEYXRhXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSB7bGF5ZXJEYXRhOiB7fSwgbGF5ZXI6IHt9IHx8IHVuZGVmaW5lZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUxheWVyRGF0YShsYXllciwgc3RhdGUsIG9sZExheWVyRGF0YSwgb3B0ID0ge30pIHtcbiAgY29uc3Qge3R5cGV9ID0gbGF5ZXI7XG4gIGNvbnN0IHtkYXRhc2V0c30gPSBzdGF0ZTtcblxuICBjb25zdCB7ZGF0YSwgZmlsdGVyZWRJbmRleCwgYWxsRGF0YX0gPSBkYXRhc2V0c1tsYXllci5jb25maWcuZGF0YUlkXSB8fCB7fTtcblxuICBpZiAoIXR5cGUgfHwgIWxheWVyLmhhc0FsbENvbHVtbnMoKSkge1xuICAgIHJldHVybiB7bGF5ZXIsIGxheWVyRGF0YToge319O1xuICB9XG5cbiAgaWYgKHR5cGUgPT09ICdib3VuZGFyeScgfHwgdHlwZSA9PT0gJ3BpbmNvZGUnKSB7XG4gICAgLy8gICBjb25zdCB1cmwgPVxuICAgIC8vICAgICAnaHR0cHM6Ly9maXJlYmFzZXN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vdjAvYi9nZW9pcWRhc2hib2FyZC5hcHBzcG90LmNvbS9vL2V4dGVybmFsRGF0YXNldHMlMkZaTHNBVVBRTnNVWGhGdnJsRDB6NyUyRkJhbmdhbG9yZSUyMExvY2FsaXR5JTIwQm91bmRhcmllcy5nZW9qc29uP2FsdD1tZWRpYSZ0b2tlbj05ZDVkNGI5NC04NzVhLTRhY2MtYTcyZS0zZWU0MGY2MmU3YzknO1xuXG4gICAgLy8gICAvLyBheGlvcy5nZXQodXJsKS50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgLy8gICAvLyBjb25zb2xlLmxvZyhyZXNwb25zZS5kYXRhKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxheWVyRGF0YSA9IGxheWVyLmZvcm1hdExheWVyRGF0YShcbiAgICAgIGRhdGEsXG4gICAgICBhbGxEYXRhLFxuICAgICAgZmlsdGVyZWRJbmRleCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIHJlc3BvbnNlLFxuICAgICAgb3B0XG4gICAgKTtcbiAgICByZXR1cm4ge2xheWVyRGF0YSwgbGF5ZXJ9O1xuICAgIC8vIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGxheWVyRGF0YSA9IGxheWVyLmZvcm1hdExheWVyRGF0YShcbiAgICAgIGRhdGEsXG4gICAgICBhbGxEYXRhLFxuICAgICAgZmlsdGVyZWRJbmRleCxcbiAgICAgIG9sZExheWVyRGF0YSxcbiAgICAgIG9wdFxuICAgICk7XG4gICAgcmV0dXJuIHtsYXllckRhdGEsIGxheWVyfTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXREYXRhKCkge1xuICB0cnkge1xuICAgIGxldCByZXMgPSBhd2FpdCBheGlvcyh7XG4gICAgICB1cmw6XG4gICAgICAgICdodHRwczovL2ZpcmViYXNlc3RvcmFnZS5nb29nbGVhcGlzLmNvbS92MC9iL2dlb2lxZGFzaGJvYXJkLmFwcHNwb3QuY29tL28vZXh0ZXJuYWxEYXRhc2V0cyUyRlpMc0FVUFFOc1VYaEZ2cmxEMHo3JTJGQmFuZ2Fsb3JlJTIwTG9jYWxpdHklMjBCb3VuZGFyaWVzLmdlb2pzb24/YWx0PW1lZGlhJnRva2VuPTlkNWQ0Yjk0LTg3NWEtNGFjYy1hNzJlLTNlZTQwZjYyZTdjOScsXG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAvLyB0ZXN0IGZvciBzdGF0dXMgeW91IHdhbnQsIGV0Y1xuICAgICAgLy8gY29uc29sZS5sb2cocmVzLnN0YXR1cyk7XG4gICAgfVxuICAgIC8vIERvbid0IGZvcmdldCB0byByZXR1cm4gc29tZXRoaW5nXG4gICAgcmV0dXJuIHJlcy5kYXRhO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExpZ2h0U2V0dGluZ3NGcm9tQm91bmRzKGJvdW5kcykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShib3VuZHMpICYmIGJvdW5kcy5sZW5ndGggPj0gNFxuICAgID8ge1xuICAgICAgICAuLi5ERUZBVUxUX0xJR0hUX1NFVFRJTkdTLFxuICAgICAgICBsaWdodHNQb3NpdGlvbjogW1xuICAgICAgICAgIC4uLmJvdW5kcy5zbGljZSgwLCAyKSxcbiAgICAgICAgICBERUZBVUxUX0xJR0hUX1NFVFRJTkdTLmxpZ2h0c1Bvc2l0aW9uWzJdLFxuICAgICAgICAgIC4uLmJvdW5kcy5zbGljZSgyLCA0KSxcbiAgICAgICAgICBERUZBVUxUX0xJR0hUX1NFVFRJTkdTLmxpZ2h0c1Bvc2l0aW9uWzVdXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICA6IERFRkFVTFRfTElHSFRfU0VUVElOR1M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVMYXllckRhdGFBZnRlckFQSUNhbGwoXG4gIGxheWVyLFxuICBzdGF0ZSxcbiAgb2xkTGF5ZXJEYXRhLFxuICByZXNwb25zZSxcbiAgb3B0ID0ge31cbikge1xuICBjb25zdCB7dHlwZX0gPSBsYXllcjtcbiAgY29uc3Qge2RhdGFzZXRzfSA9IHN0YXRlO1xuXG4gIGNvbnN0IHtkYXRhLCBmaWx0ZXJlZEluZGV4LCBhbGxEYXRhfSA9IGRhdGFzZXRzW2xheWVyLmNvbmZpZy5kYXRhSWRdIHx8IHt9O1xuXG4gIGlmICghdHlwZSB8fCAhbGF5ZXIuaGFzQWxsQ29sdW1ucygpKSB7XG4gICAgcmV0dXJuIHtsYXllciwgbGF5ZXJEYXRhOiB7fX07XG4gIH1cblxuICBjb25zdCBsYXllckRhdGEgPSBsYXllci5mb3JtYXRMYXllckRhdGEoXG4gICAgZGF0YSxcbiAgICBhbGxEYXRhLFxuICAgIGZpbHRlcmVkSW5kZXgsXG4gICAgb2xkTGF5ZXJEYXRhLFxuICAgIHJlc3BvbnNlLFxuICAgIG9wdFxuICApO1xuXG4gIHJldHVybiB7bGF5ZXJEYXRhLCBsYXllcn07XG59XG4iXX0=