kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
606 lines (573 loc) • 74.5 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ordinalFieldScaleFunctions = exports.ordinalFieldAggrScaleFunctions = exports.notSupportedScaleOpts = exports.notSupportAggrOpts = exports.linearFieldScaleFunctions = exports.linearFieldAggrScaleFunctions = exports.TRIP_POINT_FIELDS = exports.TRIP_ARC_FIELDS = exports.TOKEN_MISUSE_WARNING = exports.THEME = exports.SPEED_CONTROL_RANGE = exports.SCALE_TYPES = exports.SCALE_FUNC = exports.RESOLUTION_OPTIONS = exports.RESOLUTIONS = exports.RATIO_OPTIONS = exports.RATIOS = exports.PANELS = exports.ON_PREMESIS_URL = exports.NO_VALUE_COLOR = exports.MAX_DEFAULT_TOOLTIPS = exports.MAP_CONFIG_DESCRIPTION = exports.LAYER_TYPES = exports.LAYER_BLENDINGS = exports.KEPLER_GL_WEBSITE = exports.KEPLER_GL_VERSION = exports.KEPLER_GL_NAME = exports.ICON_PREFIX = exports.ICON_FIELDS = exports.HIGHLIGH_COLOR_3D = exports.GEOJSON_FIELDS = exports.FILTER_TYPES = exports.FILED_TYPE_DISPLAY = exports.FIELD_OPTS = exports.FIELD_COLORS = exports.EXPORT_MAP_ID = exports.EXPORT_MAP_FORMAT_OPTIONS = exports.EXPORT_MAP_FORMATS = exports.EXPORT_IMAGE_ID = exports.EXPORT_HTML_MAP_MODE_OPTIONS = exports.EXPORT_HTML_MAP_MODES = exports.EXPORT_DATA_TYPE_OPTIONS = exports.EXPORT_DATA_TYPE = exports.EXPORT_DATA_ID = exports.EDITOR_MODES = exports.EDITOR_AVAILABLE_LAYERS = exports.DISCLAIMER = exports.DIMENSIONS = exports.DELETE_DATA_ID = exports.DEFAULT_UUID_COUNT = exports.DEFAULT_TOOLTIP_FIELDS = exports.DEFAULT_TIME_FORMAT = exports.DEFAULT_NOTIFICATION_TYPES = exports.DEFAULT_NOTIFICATION_TOPICS = exports.DEFAULT_NOTIFICATION_MESSAGE = exports.DEFAULT_MAP_STYLES = exports.DEFAULT_MAPBOX_API_URL = exports.DEFAULT_LAYER_GROUPS = exports.DEFAULT_LAYER_COLOR = exports.DEFAULT_EXPORT_IMAGE_NAME = exports.DEFAULT_AGGREGATION = exports.DATA_TABLE_ID = exports.CLOUDFRONT = exports.CHANNEL_SCALE_SUPPORTED_FIELDS = exports.CHANNEL_SCALES = exports.BASE_SPEED = exports.ALL_FIELD_TYPES = exports.AGGREGATION_TYPES = exports.ADD_MAP_STYLE_ID = exports.ADD_EXTERNAL_DATA_ID = exports.ADD_DATA_ID = exports.ACTION_PREFIX = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _keymirror = _interopRequireDefault(require("keymirror"));
var _reactMapGlDraw = require("react-map-gl-draw");
var _d3Scale = require("d3-scale");
var _icons = require("../components/common/icons");
var _utils = require("../utils/utils");
var _SCALE_FUNC, _FILED_TYPE_DISPLAY, _linearFieldScaleFunc, _CHANNEL_SCALES$color, _CHANNEL_SCALES$sizeA, _linearFieldAggrScale, _ordinalFieldScaleFun, _CHANNEL_SCALES$color2, _ordinalFieldAggrScal, _notSupportedScaleOpt, _notSupportAggrOpts, _DEFAULT_AGGREGATION;
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; }
var ACTION_PREFIX = exports.ACTION_PREFIX = '@@kepler.gl/';
var CLOUDFRONT = exports.CLOUDFRONT = 'https://d1a3f4spazzrp4.cloudfront.net/kepler.gl';
var ICON_PREFIX = exports.ICON_PREFIX = "".concat(CLOUDFRONT, "/geodude");
var DEFAULT_MAPBOX_API_URL = exports.DEFAULT_MAPBOX_API_URL = 'https://api.mapbox.com'; // Modal Ids
/**
* Modal id: data table
* @constant
* @type {string}
* @public
*/
var DATA_TABLE_ID = exports.DATA_TABLE_ID = 'dataTable';
/**
* Modal id: delete dataset confirm dialog
* @constant
* @type {string}
* @public
*/
var DELETE_DATA_ID = exports.DELETE_DATA_ID = 'deleteData';
/**
* Modal id: add data modal
* @constant
* @type {string}
* @public
*/
var ADD_DATA_ID = exports.ADD_DATA_ID = 'addData';
/**
* Modal id: export image modal
* @constant
* @type {string}
* @public
*/
var EXPORT_IMAGE_ID = exports.EXPORT_IMAGE_ID = 'exportImage';
/**
* Modal id: export data modal
* @constant
* @type {string}
* @public
*/
var EXPORT_DATA_ID = exports.EXPORT_DATA_ID = 'exportData';
/**
* Modal id: add custom map style modal
* @constant
* @type {string}
* @public
*/
var ADD_MAP_STYLE_ID = exports.ADD_MAP_STYLE_ID = 'addMapStyle';
/**
* Modal id: export map modal
* @constant
* @type {string}
* @public
*/
var EXPORT_MAP_ID = exports.EXPORT_MAP_ID = 'exportMap';
/**
* Modal id: add external data modal
* @constant
* @type {string}
* @public
*/
var ADD_EXTERNAL_DATA_ID = exports.ADD_EXTERNAL_DATA_ID = 'addExternalData';
var KEPLER_GL_NAME = exports.KEPLER_GL_NAME = 'lol.gl'; // __PACKAGE_VERSION__ is automatically injected by Babel/Webpack during the building process
// Since we are injecting this during the build process with babel
// while developing VERSION is not defined, we capture the exception and return
// an empty string which will allow us to retrieve the latest umd version
var KEPLER_GL_VERSION = exports.KEPLER_GL_VERSION = "0.1.110";
var KEPLER_GL_WEBSITE = exports.KEPLER_GL_WEBSITE = 'http://kepler.gl/';
var DIMENSIONS = exports.DIMENSIONS = {
sidePanel: {
width: 400,
margin: {
top: 0,
left: 0,
bottom: 0,
right: 20
},
headerHeight: 96
},
mapControl: {
width: 204,
padding: 12
}
};
/**
* Theme name that can be passed to `KeplerGl` `prop.theme`.
* Available themes are `Theme.light` and `Theme.dark`. Default theme is `Theme.dark`
* @constant
* @type {string}
* @public
* @example
* ```js
* const Map = () => <KeplerGl theme={THEME.light} id="map"/>
* ```
*/
var THEME = exports.THEME = (0, _keymirror["default"])({
light: null,
dark: null
});
var PANELS = exports.PANELS = [{
id: 'layer',
label: 'Layers',
iconComponent: _icons.Layers
}, {
id: 'widget',
label: 'Widgets',
iconComponent: _icons.Widgets
}, {
id: 'filter',
label: 'Filters',
iconComponent: _icons.FilterFunnel
}, {
id: 'interaction',
label: 'Interactions',
iconComponent: _icons.CursorClick
}, {
id: 'map',
label: 'Base map',
iconComponent: _icons.Settings
}]; // MAP STYLES
var DEFAULT_LAYER_GROUPS = exports.DEFAULT_LAYER_GROUPS = [{
slug: 'label',
filter: function filter(_ref) {
var id = _ref.id;
return id.match(/(?=(label|place-|poi-))/);
},
defaultVisibility: true
}, {
slug: 'road',
filter: function filter(_ref2) {
var id = _ref2.id;
return id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/);
},
defaultVisibility: true
}, {
slug: 'border',
filter: function filter(_ref3) {
var id = _ref3.id;
return id.match(/border|boundaries/);
},
defaultVisibility: false
}, {
slug: 'building',
filter: function filter(_ref4) {
var id = _ref4.id;
return id.match(/building/);
},
defaultVisibility: true
}, {
slug: 'water',
filter: function filter(_ref5) {
var id = _ref5.id;
return id.match(/(?=(water|stream|ferry))/);
},
defaultVisibility: true
}, {
slug: 'land',
filter: function filter(_ref6) {
var id = _ref6.id;
return id.match(/(?=(parks|landcover|industrial|sand|hillshade))/);
},
defaultVisibility: true
}, {
slug: '3d building',
filter: function filter() {
return false;
},
defaultVisibility: false
}];
var DEFAULT_MAP_STYLES = exports.DEFAULT_MAP_STYLES = [{
id: 'dark',
label: 'Dark',
url: 'mapbox://styles/uberdata/cjoqbbf6l9k302sl96tyvka09',
icon: "".concat(ICON_PREFIX, "/UBER_DARK_V2.png"),
layerGroups: DEFAULT_LAYER_GROUPS
}, {
id: 'light',
label: 'Light',
url: 'mapbox://styles/uberdata/cjoqb9j339k1f2sl9t5ic5bn4',
icon: "".concat(ICON_PREFIX, "/UBER_LIGHT_V2.png"),
layerGroups: DEFAULT_LAYER_GROUPS
}, {
id: 'muted',
label: 'Muted Light',
url: 'mapbox://styles/uberdata/cjfyl03kp1tul2smf5v2tbdd4',
icon: "".concat(ICON_PREFIX, "/UBER_MUTED_LIGHT.png"),
layerGroups: DEFAULT_LAYER_GROUPS
}, {
id: 'muted_night',
label: 'Muted Night',
url: 'mapbox://styles/uberdata/cjfxhlikmaj1b2soyzevnywgs',
icon: "".concat(ICON_PREFIX, "/UBER_MUTED_NIGHT.png"),
layerGroups: DEFAULT_LAYER_GROUPS
}];
var GEOJSON_FIELDS = exports.GEOJSON_FIELDS = {
geojson: ['_geojson', 'all_points', 'geojson']
};
var ICON_FIELDS = exports.ICON_FIELDS = {
icon: ['icon']
};
var TRIP_POINT_FIELDS = exports.TRIP_POINT_FIELDS = [['lat', 'lng'], ['lat', 'lon'], ['latitude', 'longitude']];
var TRIP_ARC_FIELDS = exports.TRIP_ARC_FIELDS = {
lat0: 'begintrip',
lng0: 'begintrip',
lat1: 'dropoff',
lng1: 'dropoff'
};
var FILTER_TYPES = exports.FILTER_TYPES = (0, _keymirror["default"])({
range: null,
select: null,
timeRange: null,
multiSelect: null,
polygon: null
});
var SCALE_TYPES = exports.SCALE_TYPES = (0, _keymirror["default"])({
ordinal: null,
quantile: null,
quantize: null,
linear: null,
sqrt: null,
log: null,
// ordinal domain to linear range
point: null
});
var SCALE_FUNC = exports.SCALE_FUNC = (_SCALE_FUNC = {}, (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.linear, _d3Scale.scaleLinear), (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.quantize, _d3Scale.scaleQuantize), (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.quantile, _d3Scale.scaleQuantile), (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.ordinal, _d3Scale.scaleOrdinal), (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.sqrt, _d3Scale.scaleSqrt), (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.log, _d3Scale.scaleLog), (0, _defineProperty2["default"])(_SCALE_FUNC, SCALE_TYPES.point, _d3Scale.scalePoint), _SCALE_FUNC);
var ALL_FIELD_TYPES = exports.ALL_FIELD_TYPES = (0, _keymirror["default"])({
"boolean": null,
date: null,
geojson: null,
integer: null,
real: null,
string: null,
timestamp: null,
point: null
});
var ORANGE = '248, 194, 28';
var PINK = '231, 189, 194';
var PURPLE = '160, 106, 206';
var BLUE = '140, 210, 205';
var BLUE2 = '106, 160, 206';
var BLUE3 = '0, 172, 237';
var GREEN = '106, 160, 56';
var RED = '237, 88, 106';
var HIGHLIGH_COLOR_3D = exports.HIGHLIGH_COLOR_3D = [255, 255, 255, 60];
var FIELD_COLORS = exports.FIELD_COLORS = {
"default": RED
};
var FILED_TYPE_DISPLAY = exports.FILED_TYPE_DISPLAY = (_FILED_TYPE_DISPLAY = {}, (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES["boolean"], {
label: 'bool',
color: PINK
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.date, {
label: 'date',
color: PURPLE
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.geojson, {
label: 'geo',
color: BLUE2
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.integer, {
label: 'int',
color: ORANGE
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.real, {
label: 'float',
color: ORANGE
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.string, {
label: 'string',
color: BLUE
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.timestamp, {
label: 'time',
color: GREEN
}), (0, _defineProperty2["default"])(_FILED_TYPE_DISPLAY, ALL_FIELD_TYPES.point, {
label: 'point',
color: BLUE3
}), _FILED_TYPE_DISPLAY);
var CHANNEL_SCALES = exports.CHANNEL_SCALES = (0, _keymirror["default"])({
color: null,
radius: null,
size: null,
colorAggr: null,
sizeAggr: null
});
var AGGREGATION_TYPES = exports.AGGREGATION_TYPES = {
// default
count: 'count',
// linear
average: 'average',
maximum: 'maximum',
minimum: 'minimum',
median: 'median',
// stdev: 'stdev',
sum: 'sum',
// variance: 'variance',
// ordinal
mode: 'mode',
countUnique: 'count unique'
};
var linearFieldScaleFunctions = exports.linearFieldScaleFunctions = (_linearFieldScaleFunc = {}, (0, _defineProperty2["default"])(_linearFieldScaleFunc, CHANNEL_SCALES.color, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), (0, _defineProperty2["default"])(_linearFieldScaleFunc, CHANNEL_SCALES.radius, [SCALE_TYPES.sqrt]), (0, _defineProperty2["default"])(_linearFieldScaleFunc, CHANNEL_SCALES.size, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), _linearFieldScaleFunc);
var linearFieldAggrScaleFunctions = exports.linearFieldAggrScaleFunctions = (_linearFieldAggrScale = {}, (0, _defineProperty2["default"])(_linearFieldAggrScale, CHANNEL_SCALES.colorAggr, (_CHANNEL_SCALES$color = {}, (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.average, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.maximum, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.minimum, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.median, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color, AGGREGATION_TYPES.sum, [SCALE_TYPES.quantize, SCALE_TYPES.quantile]), _CHANNEL_SCALES$color)), (0, _defineProperty2["default"])(_linearFieldAggrScale, CHANNEL_SCALES.sizeAggr, (_CHANNEL_SCALES$sizeA = {}, (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.average, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.maximum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.minimum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.median, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.stdev, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.sum, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$sizeA, AGGREGATION_TYPES.variance, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log]), _CHANNEL_SCALES$sizeA)), _linearFieldAggrScale);
var ordinalFieldScaleFunctions = exports.ordinalFieldScaleFunctions = (_ordinalFieldScaleFun = {}, (0, _defineProperty2["default"])(_ordinalFieldScaleFun, CHANNEL_SCALES.color, [SCALE_TYPES.ordinal]), (0, _defineProperty2["default"])(_ordinalFieldScaleFun, CHANNEL_SCALES.radius, [SCALE_TYPES.point]), (0, _defineProperty2["default"])(_ordinalFieldScaleFun, CHANNEL_SCALES.size, [SCALE_TYPES.point]), _ordinalFieldScaleFun);
var ordinalFieldAggrScaleFunctions = exports.ordinalFieldAggrScaleFunctions = (_ordinalFieldAggrScal = {}, (0, _defineProperty2["default"])(_ordinalFieldAggrScal, CHANNEL_SCALES.colorAggr, (_CHANNEL_SCALES$color2 = {}, (0, _defineProperty2["default"])(_CHANNEL_SCALES$color2, AGGREGATION_TYPES.mode, [SCALE_TYPES.ordinal]), (0, _defineProperty2["default"])(_CHANNEL_SCALES$color2, AGGREGATION_TYPES.countUnique, [SCALE_TYPES.quantile, SCALE_TYPES.quantize]), _CHANNEL_SCALES$color2)), (0, _defineProperty2["default"])(_ordinalFieldAggrScal, CHANNEL_SCALES.sizeAggr, {}), _ordinalFieldAggrScal);
var notSupportedScaleOpts = exports.notSupportedScaleOpts = (_notSupportedScaleOpt = {}, (0, _defineProperty2["default"])(_notSupportedScaleOpt, CHANNEL_SCALES.color, []), (0, _defineProperty2["default"])(_notSupportedScaleOpt, CHANNEL_SCALES.radius, []), (0, _defineProperty2["default"])(_notSupportedScaleOpt, CHANNEL_SCALES.size, []), _notSupportedScaleOpt);
var notSupportAggrOpts = exports.notSupportAggrOpts = (_notSupportAggrOpts = {}, (0, _defineProperty2["default"])(_notSupportAggrOpts, CHANNEL_SCALES.colorAggr, {}), (0, _defineProperty2["default"])(_notSupportAggrOpts, CHANNEL_SCALES.sizeAggr, {}), _notSupportAggrOpts);
/**
* Default aggregation are based on ocunt
*/
var DEFAULT_AGGREGATION = exports.DEFAULT_AGGREGATION = (_DEFAULT_AGGREGATION = {}, (0, _defineProperty2["default"])(_DEFAULT_AGGREGATION, CHANNEL_SCALES.colorAggr, (0, _defineProperty2["default"])({}, AGGREGATION_TYPES.count, [SCALE_TYPES.quantize, SCALE_TYPES.quantile])), (0, _defineProperty2["default"])(_DEFAULT_AGGREGATION, CHANNEL_SCALES.sizeAggr, (0, _defineProperty2["default"])({}, AGGREGATION_TYPES.count, [SCALE_TYPES.linear, SCALE_TYPES.sqrt, SCALE_TYPES.log])), _DEFAULT_AGGREGATION);
/**
* Define what type of scale operation is allowed on each type of fields
*/
var FIELD_OPTS = exports.FIELD_OPTS = {
string: {
type: 'categorical',
scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
format: {
legend: function legend(d) {
return d;
}
}
},
real: {
type: 'numerical',
scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), linearFieldAggrScaleFunctions),
format: {
legend: function legend(d) {
return d;
}
}
},
timestamp: {
type: 'time',
scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), notSupportAggrOpts),
format: {
legend: function legend(d) {
return d;
}
}
},
integer: {
type: 'numerical',
scale: _objectSpread(_objectSpread({}, linearFieldScaleFunctions), linearFieldAggrScaleFunctions),
format: {
legend: function legend(d) {
return d;
}
}
},
"boolean": {
type: 'boolean',
scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
format: {
legend: function legend(d) {
return d;
}
}
},
date: {
scale: _objectSpread(_objectSpread({}, ordinalFieldScaleFunctions), ordinalFieldAggrScaleFunctions),
format: {
legend: function legend(d) {
return d;
}
}
},
geojson: {
type: 'geometry',
scale: _objectSpread(_objectSpread({}, notSupportedScaleOpts), notSupportAggrOpts),
format: {
legend: function legend(d) {
return '...';
}
}
}
};
var CHANNEL_SCALE_SUPPORTED_FIELDS = exports.CHANNEL_SCALE_SUPPORTED_FIELDS = Object.keys(CHANNEL_SCALES).reduce(function (accu, key) {
return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, Object.keys(FIELD_OPTS).filter(function (ft) {
return Object.keys(FIELD_OPTS[ft].scale[key]).length;
})));
}, {}); // TODO: shan delete use of LAYER_TYPES
var LAYER_TYPES = exports.LAYER_TYPES = (0, _keymirror["default"])({
point: null,
arc: null,
cluster: null,
line: null,
grid: null,
geojson: null,
icon: null,
heatmap: null,
hexagon: null,
dynamic: null,
geoHash: null
});
var DEFAULT_LAYER_COLOR = exports.DEFAULT_LAYER_COLOR = {
tripArc: '#9226C6',
begintrip_lat: '#1E96BE',
dropoff_lat: '#FF991F',
request_lat: '#52A353'
}; // let user pass in default tooltip fields
var DEFAULT_TOOLTIP_FIELDS = exports.DEFAULT_TOOLTIP_FIELDS = [];
var NO_VALUE_COLOR = exports.NO_VALUE_COLOR = [0, 0, 0, 0];
var LAYER_BLENDINGS = exports.LAYER_BLENDINGS = {
additive: {
blendFunc: ['SRC_ALPHA', 'DST_ALPHA'],
blendEquation: 'FUNC_ADD'
},
normal: {
// reference to
// https://limnu.com/webgl-blending-youre-probably-wrong/
blendFunc: ['SRC_ALPHA', 'ONE_MINUS_SRC_ALPHA', 'ONE', 'ONE_MINUS_SRC_ALPHA'],
blendEquation: ['FUNC_ADD', 'FUNC_ADD']
},
subtractive: {
blendFunc: ['ONE', 'ONE_MINUS_DST_COLOR', 'SRC_ALPHA', 'DST_ALPHA'],
blendEquation: ['FUNC_SUBTRACT', 'FUNC_ADD']
}
};
var MAX_DEFAULT_TOOLTIPS = exports.MAX_DEFAULT_TOOLTIPS = 5;
var RESOLUTIONS = exports.RESOLUTIONS = (0, _keymirror["default"])({
ONE_X: null,
TWO_X: null
});
var RATIOS = exports.RATIOS = (0, _keymirror["default"])({
SCREEN: null,
FOUR_BY_THREE: null,
SIXTEEN_BY_NINE: null
});
var RATIO_OPTIONS = exports.RATIO_OPTIONS = [{
id: RATIOS.SCREEN,
label: 'Original Screen',
getSize: function getSize(screenW, screenH) {
return {
width: screenW,
height: screenH
};
}
}, {
id: RATIOS.FOUR_BY_THREE,
label: '4:3',
getSize: function getSize(screenW, screenH) {
return {
width: screenW,
height: Math.round(screenW * 0.75)
};
}
}, {
id: RATIOS.SIXTEEN_BY_NINE,
label: '16:9',
getSize: function getSize(screenW, screenH) {
return {
width: screenW,
height: Math.round(screenW * 0.5625)
};
}
}];
var RESOLUTION_OPTIONS = exports.RESOLUTION_OPTIONS = [{
id: RESOLUTIONS.ONE_X,
label: '1x',
available: true,
scale: 1,
zoomOffset: Math.log2(1),
getSize: function getSize(screenW, screenH) {
return {
width: screenW,
height: screenH
};
}
}, {
id: RESOLUTIONS.TWO_X,
label: '2x',
available: true,
scale: 2,
zoomOffset: Math.log2(2),
getSize: function getSize(screenW, screenH) {
return {
width: screenW * 2,
height: screenH * 2
};
}
}];
var DEFAULT_EXPORT_IMAGE_NAME = exports.DEFAULT_EXPORT_IMAGE_NAME = 'kepler-gl.png';
var EXPORT_DATA_TYPE = exports.EXPORT_DATA_TYPE = (0, _keymirror["default"])({
CSV: null // SHAPEFILE: null,
// JSON: null,
// GEOJSON: null,
// TOPOJSON: null
});
var EXPORT_DATA_TYPE_OPTIONS = exports.EXPORT_DATA_TYPE_OPTIONS = [{
id: EXPORT_DATA_TYPE.CSV,
label: EXPORT_DATA_TYPE.CSV.toLowerCase(),
available: true
} // {
// id: EXPORT_DATA_TYPE.SHAPEFILE,
// label: 'shapefile',
// available: false
// },
// {
// id: EXPORT_DATA_TYPE.JSON,
// label: 'json',
// available: false
// },
// {
// id: EXPORT_DATA_TYPE.GEOJSON,
// label: 'geojson',
// available: false
// },
// {
// id: EXPORT_DATA_TYPE.TOPOJSON,
// label: 'topojson',
// available: false
// }
]; // Export map types
var EXPORT_MAP_FORMATS = exports.EXPORT_MAP_FORMATS = (0, _keymirror["default"])({
HTML: null,
JSON: null
});
var EXPORT_HTML_MAP_MODES = exports.EXPORT_HTML_MAP_MODES = (0, _keymirror["default"])({
READ: null,
EDIT: null
}); // Export map options
var EXPORT_MAP_FORMAT_OPTIONS = exports.EXPORT_MAP_FORMAT_OPTIONS = Object.entries(EXPORT_MAP_FORMATS).map(function (entry) {
return {
id: entry[0],
label: entry[1].toLowerCase(),
available: true
};
});
var EXPORT_HTML_MAP_MODE_OPTIONS = exports.EXPORT_HTML_MAP_MODE_OPTIONS = Object.entries(EXPORT_HTML_MAP_MODES).map(function (entry) {
return {
id: entry[0],
label: entry[1].toLowerCase(),
available: true,
url: (0, _utils.getHTMLMapModeTileUrl)(entry[1])
};
});
var DEFAULT_UUID_COUNT = exports.DEFAULT_UUID_COUNT = 6;
var DEFAULT_NOTIFICATION_MESSAGE = exports.DEFAULT_NOTIFICATION_MESSAGE = 'MESSAGE_NOT_PROVIDED';
var DEFAULT_NOTIFICATION_TYPES = exports.DEFAULT_NOTIFICATION_TYPES = (0, _keymirror["default"])({
info: null,
error: null,
warning: null,
success: null
});
var DEFAULT_NOTIFICATION_TOPICS = exports.DEFAULT_NOTIFICATION_TOPICS = (0, _keymirror["default"])({
global: null,
file: null
});
var TOKEN_MISUSE_WARNING = exports.TOKEN_MISUSE_WARNING = '* If you do not provide your own token, the map may fail to display at any time when we replace ours to avoid misuse. ';
var DISCLAIMER = exports.DISCLAIMER = 'You can change the Mapbox token later using the following instructions: ';
var MAP_CONFIG_DESCRIPTION = exports.MAP_CONFIG_DESCRIPTION = 'Map config will be included in the Json file. If you are using kepler.gl in your own app. You can copy this config and pass it to '; // Animation
var BASE_SPEED = exports.BASE_SPEED = 600;
var DEFAULT_TIME_FORMAT = exports.DEFAULT_TIME_FORMAT = 'MM/DD/YY HH:mm:ssa';
var SPEED_CONTROL_RANGE = exports.SPEED_CONTROL_RANGE = [0, 10]; // We could use directly react-map-gl-draw EditorMode but this would
// create a direct dependency with react-map-gl-draw
// Created this map to be independent from react-map-gl-draw
var EDITOR_MODES = exports.EDITOR_MODES = {
READ_ONLY: _reactMapGlDraw.EditorModes.READ_ONLY,
DRAW_POLYGON: _reactMapGlDraw.EditorModes.DRAW_POLYGON,
DRAW_RECTANGLE: _reactMapGlDraw.EditorModes.DRAW_RECTANGLE,
EDIT: _reactMapGlDraw.EditorModes.EDIT_VERTEX
};
var EDITOR_AVAILABLE_LAYERS = exports.EDITOR_AVAILABLE_LAYERS = [LAYER_TYPES.point, LAYER_TYPES.hexagon, LAYER_TYPES.arc, LAYER_TYPES.line, LAYER_TYPES.dynamic, LAYER_TYPES.geoHash, LAYER_TYPES.geojson];
var ON_PREMESIS_URL = exports.ON_PREMESIS_URL = 'https://platform-apis.staging.geoiq.io';
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdGFudHMvZGVmYXVsdC1zZXR0aW5ncy5qcyJdLCJuYW1lcyI6WyJBQ1RJT05fUFJFRklYIiwiQ0xPVURGUk9OVCIsIklDT05fUFJFRklYIiwiREVGQVVMVF9NQVBCT1hfQVBJX1VSTCIsIkRBVEFfVEFCTEVfSUQiLCJERUxFVEVfREFUQV9JRCIsIkFERF9EQVRBX0lEIiwiRVhQT1JUX0lNQUdFX0lEIiwiRVhQT1JUX0RBVEFfSUQiLCJBRERfTUFQX1NUWUxFX0lEIiwiRVhQT1JUX01BUF9JRCIsIkFERF9FWFRFUk5BTF9EQVRBX0lEIiwiS0VQTEVSX0dMX05BTUUiLCJLRVBMRVJfR0xfVkVSU0lPTiIsIktFUExFUl9HTF9XRUJTSVRFIiwiRElNRU5TSU9OUyIsInNpZGVQYW5lbCIsIndpZHRoIiwibWFyZ2luIiwidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0IiwiaGVhZGVySGVpZ2h0IiwibWFwQ29udHJvbCIsInBhZGRpbmciLCJUSEVNRSIsImxpZ2h0IiwiZGFyayIsIlBBTkVMUyIsImlkIiwibGFiZWwiLCJpY29uQ29tcG9uZW50IiwiTGF5ZXJzIiwiV2lkZ2V0cyIsIkZpbHRlckZ1bm5lbCIsIkN1cnNvckNsaWNrIiwiU2V0dGluZ3MiLCJERUZBVUxUX0xBWUVSX0dST1VQUyIsInNsdWciLCJmaWx0ZXIiLCJtYXRjaCIsImRlZmF1bHRWaXNpYmlsaXR5IiwiREVGQVVMVF9NQVBfU1RZTEVTIiwidXJsIiwiaWNvbiIsImxheWVyR3JvdXBzIiwiR0VPSlNPTl9GSUVMRFMiLCJnZW9qc29uIiwiSUNPTl9GSUVMRFMiLCJUUklQX1BPSU5UX0ZJRUxEUyIsIlRSSVBfQVJDX0ZJRUxEUyIsImxhdDAiLCJsbmcwIiwibGF0MSIsImxuZzEiLCJGSUxURVJfVFlQRVMiLCJyYW5nZSIsInNlbGVjdCIsInRpbWVSYW5nZSIsIm11bHRpU2VsZWN0IiwicG9seWdvbiIsIlNDQUxFX1RZUEVTIiwib3JkaW5hbCIsInF1YW50aWxlIiwicXVhbnRpemUiLCJsaW5lYXIiLCJzcXJ0IiwibG9nIiwicG9pbnQiLCJTQ0FMRV9GVU5DIiwic2NhbGVMaW5lYXIiLCJzY2FsZVF1YW50aXplIiwic2NhbGVRdWFudGlsZSIsInNjYWxlT3JkaW5hbCIsInNjYWxlU3FydCIsInNjYWxlTG9nIiwic2NhbGVQb2ludCIsIkFMTF9GSUVMRF9UWVBFUyIsImRhdGUiLCJpbnRlZ2VyIiwicmVhbCIsInN0cmluZyIsInRpbWVzdGFtcCIsIk9SQU5HRSIsIlBJTksiLCJQVVJQTEUiLCJCTFVFIiwiQkxVRTIiLCJCTFVFMyIsIkdSRUVOIiwiUkVEIiwiSElHSExJR0hfQ09MT1JfM0QiLCJGSUVMRF9DT0xPUlMiLCJGSUxFRF9UWVBFX0RJU1BMQVkiLCJjb2xvciIsIkNIQU5ORUxfU0NBTEVTIiwicmFkaXVzIiwic2l6ZSIsImNvbG9yQWdnciIsInNpemVBZ2dyIiwiQUdHUkVHQVRJT05fVFlQRVMiLCJjb3VudCIsImF2ZXJhZ2UiLCJtYXhpbXVtIiwibWluaW11bSIsIm1lZGlhbiIsInN1bSIsIm1vZGUiLCJjb3VudFVuaXF1ZSIsImxpbmVhckZpZWxkU2NhbGVGdW5jdGlvbnMiLCJsaW5lYXJGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9ucyIsInN0ZGV2IiwidmFyaWFuY2UiLCJvcmRpbmFsRmllbGRTY2FsZUZ1bmN0aW9ucyIsIm9yZGluYWxGaWVsZEFnZ3JTY2FsZUZ1bmN0aW9ucyIsIm5vdFN1cHBvcnRlZFNjYWxlT3B0cyIsIm5vdFN1cHBvcnRBZ2dyT3B0cyIsIkRFRkFVTFRfQUdHUkVHQVRJT04iLCJGSUVMRF9PUFRTIiwidHlwZSIsInNjYWxlIiwiZm9ybWF0IiwibGVnZW5kIiwiZCIsIkNIQU5ORUxfU0NBTEVfU1VQUE9SVEVEX0ZJRUxEUyIsIk9iamVjdCIsImtleXMiLCJyZWR1Y2UiLCJhY2N1Iiwia2V5IiwiZnQiLCJsZW5ndGgiLCJMQVlFUl9UWVBFUyIsImFyYyIsImNsdXN0ZXIiLCJsaW5lIiwiZ3JpZCIsImhlYXRtYXAiLCJoZXhhZ29uIiwiZHluYW1pYyIsImdlb0hhc2giLCJERUZBVUxUX0xBWUVSX0NPTE9SIiwidHJpcEFyYyIsImJlZ2ludHJpcF9sYXQiLCJkcm9wb2ZmX2xhdCIsInJlcXVlc3RfbGF0IiwiREVGQVVMVF9UT09MVElQX0ZJRUxEUyIsIk5PX1ZBTFVFX0NPTE9SIiwiTEFZRVJfQkxFTkRJTkdTIiwiYWRkaXRpdmUiLCJibGVuZEZ1bmMiLCJibGVuZEVxdWF0aW9uIiwibm9ybWFsIiwic3VidHJhY3RpdmUiLCJNQVhfREVGQVVMVF9UT09MVElQUyIsIlJFU09MVVRJT05TIiwiT05FX1giLCJUV09fWCIsIlJBVElPUyIsIlNDUkVFTiIsIkZPVVJfQllfVEhSRUUiLCJTSVhURUVOX0JZX05JTkUiLCJSQVRJT19PUFRJT05TIiwiZ2V0U2l6ZSIsInNjcmVlblciLCJzY3JlZW5IIiwiaGVpZ2h0IiwiTWF0aCIsInJvdW5kIiwiUkVTT0xVVElPTl9PUFRJT05TIiwiYXZhaWxhYmxlIiwiem9vbU9mZnNldCIsImxvZzIiLCJERUZBVUxUX0VYUE9SVF9JTUFHRV9OQU1FIiwiRVhQT1JUX0RBVEFfVFlQRSIsIkNTViIsIkVYUE9SVF9EQVRBX1RZUEVfT1BUSU9OUyIsInRvTG93ZXJDYXNlIiwiRVhQT1JUX01BUF9GT1JNQVRTIiwiSFRNTCIsIkpTT04iLCJFWFBPUlRfSFRNTF9NQVBfTU9ERVMiLCJSRUFEIiwiRURJVCIsIkVYUE9SVF9NQVBfRk9STUFUX09QVElPTlMiLCJlbnRyaWVzIiwibWFwIiwiZW50cnkiLCJFWFBPUlRfSFRNTF9NQVBfTU9ERV9PUFRJT05TIiwiREVGQVVMVF9VVUlEX0NPVU5UIiwiREVGQVVMVF9OT1RJRklDQVRJT05fTUVTU0FHRSIsIkRFRkFVTFRfTk9USUZJQ0FUSU9OX1RZUEVTIiwiaW5mbyIsImVycm9yIiwid2FybmluZyIsInN1Y2Nlc3MiLCJERUZBVUxUX05PVElGSUNBVElPTl9UT1BJQ1MiLCJnbG9iYWwiLCJmaWxlIiwiVE9LRU5fTUlTVVNFX1dBUk5JTkciLCJESVNDTEFJTUVSIiwiTUFQX0NPTkZJR19ERVNDUklQVElPTiIsIkJBU0VfU1BFRUQiLCJERUZBVUxUX1RJTUVfRk9STUFUIiwiU1BFRURfQ09OVFJPTF9SQU5HRSIsIkVESVRPUl9NT0RFUyIsIlJFQURfT05MWSIsIkVkaXRvck1vZGVzIiwiRFJBV19QT0xZR09OIiwiRFJBV19SRUNUQU5HTEUiLCJFRElUX1ZFUlRFWCIsIkVESVRPUl9BVkFJTEFCTEVfTEFZRVJTIiwiT05fUFJFTUVTSVNfVVJMIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFFQTs7QUEwRUE7O0FBT0E7Ozs7Ozs7O0FBdkVPLElBQU1BLGFBQWEsMkJBQUcsY0FBdEI7QUFDQSxJQUFNQyxVQUFVLHdCQUFHLGlEQUFuQjtBQUNBLElBQU1DLFdBQVcsbUNBQU1ELFVBQU4sYUFBakI7QUFDQSxJQUFNRSxzQkFBc0Isb0NBQUcsd0JBQS9CLEMsQ0FFUDs7QUFDQTs7Ozs7OztBQU1PLElBQU1DLGFBQWEsMkJBQUcsV0FBdEI7QUFDUDs7Ozs7OztBQU1PLElBQU1DLGNBQWMsNEJBQUcsWUFBdkI7QUFDUDs7Ozs7OztBQU1PLElBQU1DLFdBQVcseUJBQUcsU0FBcEI7QUFDUDs7Ozs7OztBQU1PLElBQU1DLGVBQWUsNkJBQUcsYUFBeEI7QUFDUDs7Ozs7OztBQU1PLElBQU1DLGNBQWMsNEJBQUcsWUFBdkI7QUFDUDs7Ozs7OztBQU1PLElBQU1DLGdCQUFnQiw4QkFBRyxhQUF6QjtBQUNQOzs7Ozs7O0FBTU8sSUFBTUMsYUFBYSwyQkFBRyxXQUF0QjtBQUVQOzs7Ozs7O0FBTU8sSUFBTUMsb0JBQW9CLGtDQUFHLGlCQUE3QjtBQVdBLElBQU1DLGNBQWMsNEJBQUcsUUFBdkIsQyxDQUVQO0FBQ0E7QUFDQTtBQUNBOztBQUNPLElBQU1DLGlCQUFpQiwrQkFBRyxTQUExQjtBQUNBLElBQU1DLGlCQUFpQiwrQkFBRyxtQkFBMUI7QUFFQSxJQUFNQyxVQUFVLHdCQUFHO0FBQ3hCQyxFQUFBQSxTQUFTLEVBQUU7QUFDVEMsSUFBQUEsS0FBSyxFQUFFLEdBREU7QUFFVEMs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QzFCQyxFQUFBQSxTQUFTLEVBQUVDLDRCQUFZRCxTQURHO0FBRTFCRSxFQUFBQSxZQUFZLEVBQUVELDRCQUFZQyxZQUZBO0FBRzFCQyxFQUFBQSxjQUFjLEVBQUVGLDRCQUFZRSxjQUhGO0FBSTFCMUIsRUFBQUEsSUFBSSxFQUFFd0IsNEJBQVlHO0FBSlEsQ0FBckI7QUFPQSxJQUFNQyx1QkFBdUIscUNBQUcsQ0FDckMvRSxXQUFXLENBQUNoRSxLQUR5QixFQUVyQ2dFLFdBQVcsQ0FBQ00sT0FGeUIsRUFHckNOLFdBQVcsQ0FBQ0MsR0FIeUIsRUFJckNELFdBQVcsQ0FBQ0csSUFKeUIsRUFLckNILFdBQVcsQ0FBQ08sT0FMeUIsRUFNckNQLFdBQVcsQ0FBQ1EsT0FOeUIsRUFPckNSLFdBQVcsQ0FBQ3JGLE9BUHlCLENBQWhDO0FBVUEsSUFBTXFLLGVBQWUsNkJBQUcsd0NBQXhCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG