kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
97 lines (83 loc) • 12.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getTextOffsetByRadius = getTextOffsetByRadius;
exports.formatTextLabelData = exports.textLabelAccessor = exports.defaultPadding = void 0;
var _viewportMercatorProject = require("viewport-mercator-project");
var _dataUtils = require("../utils/data-utils");
var _lodash = _interopRequireDefault(require("lodash.uniq"));
// Copyright (c) 2021 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
var defaultPadding = 20;
exports.defaultPadding = defaultPadding;
function getTextOffsetByRadius(radiusScale, getRadius, mapState) {
return function (textLabel) {
var distanceScale = (0, _viewportMercatorProject.getDistanceScales)(mapState);
var xMult = textLabel.anchor === 'middle' ? 0 : textLabel.anchor === 'start' ? 1 : -1;
var yMult = textLabel.alignment === 'center' ? 0 : textLabel.alignment === 'bottom' ? 1 : -1;
var sizeOffset = textLabel.alignment === 'center' ? 0 : textLabel.alignment === 'bottom' ? textLabel.size : textLabel.size;
var pixelRadius = radiusScale * distanceScale.pixelsPerMeter[0];
var padding = defaultPadding;
return typeof getRadius === 'function' ? function (d) {
return [xMult * (getRadius(d) * pixelRadius + padding), yMult * (getRadius(d) * pixelRadius + padding + sizeOffset)];
} : [xMult * (getRadius * pixelRadius + padding), yMult * (getRadius * pixelRadius + padding + sizeOffset)];
};
}
var textLabelAccessor = function textLabelAccessor(textLabel) {
return function (dc) {
return function (d) {
var val = textLabel.field.valueAccessor(d);
return (0, _dataUtils.notNullorUndefined)(val) ? String(val) : '';
};
};
};
exports.textLabelAccessor = textLabelAccessor;
var formatTextLabelData = function formatTextLabelData(_ref) {
var textLabel = _ref.textLabel,
triggerChanged = _ref.triggerChanged,
oldLayerData = _ref.oldLayerData,
data = _ref.data,
dataContainer = _ref.dataContainer;
return textLabel.map(function (tl, i) {
if (!tl.field) {
// if no field selected,
return {
getText: null,
characterSet: []
};
}
var getText = textLabelAccessor(tl)(dataContainer);
var characterSet;
if (!triggerChanged["getLabelCharacterSet-".concat(i)] && oldLayerData && oldLayerData.textLabels && oldLayerData.textLabels[i]) {
characterSet = oldLayerData.textLabels[i].characterSet;
} else {
var allLabels = tl.field ? data.map(getText) : [];
characterSet = (0, _lodash["default"])(allLabels.join(''));
}
return {
characterSet: characterSet,
getText: getText
};
});
};
exports.formatTextLabelData = formatTextLabelData;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYXllcnMvbGF5ZXItdGV4dC1sYWJlbC5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0UGFkZGluZyIsImdldFRleHRPZmZzZXRCeVJhZGl1cyIsInJhZGl1c1NjYWxlIiwiZ2V0UmFkaXVzIiwibWFwU3RhdGUiLCJ0ZXh0TGFiZWwiLCJkaXN0YW5jZVNjYWxlIiwieE11bHQiLCJhbmNob3IiLCJ5TXVsdCIsImFsaWdubWVudCIsInNpemVPZmZzZXQiLCJzaXplIiwicGl4ZWxSYWRpdXMiLCJwaXhlbHNQZXJNZXRlciIsInBhZGRpbmciLCJkIiwidGV4dExhYmVsQWNjZXNzb3IiLCJkYyIsInZhbCIsImZpZWxkIiwidmFsdWVBY2Nlc3NvciIsIlN0cmluZyIsImZvcm1hdFRleHRMYWJlbERhdGEiLCJ0cmlnZ2VyQ2hhbmdlZCIsIm9sZExheWVyRGF0YSIsImRhdGEiLCJkYXRhQ29udGFpbmVyIiwibWFwIiwidGwiLCJpIiwiZ2V0VGV4dCIsImNoYXJhY3RlclNldCIsInRleHRMYWJlbHMiLCJhbGxMYWJlbHMiLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQXRCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1PLElBQU1BLGNBQWMsR0FBRyxFQUF2Qjs7O0FBRUEsU0FBU0MscUJBQVQsQ0FBK0JDLFdBQS9CLEVBQTRDQyxTQUE1QyxFQUF1REMsUUFBdkQsRUFBaUU7QUFDdEUsU0FBTyxVQUFBQyxTQUFTLEVBQUk7QUFDbEIsUUFBTUMsYUFBYSxHQUFHLGdEQUFrQkYsUUFBbEIsQ0FBdEI7QUFDQSxRQUFNRyxLQUFLLEdBQUdGLFNBQVMsQ0FBQ0csTUFBVixLQUFxQixRQUFyQixHQUFnQyxDQUFoQyxHQUFvQ0gsU0FBUyxDQUFDRyxNQUFWLEtBQXFCLE9BQXJCLEdBQStCLENBQS9C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QUNEOztBQUVELFdBQU87QUFDTEgsTUFBQUEsWUFBWSxFQUFaQSxZQURLO0FBRUxELE1BQUFBLE9BQU8sRUFBUEE7QUFGSyxLQUFQO0FBSUQsR0E1Qk0sQ0FBUDtBQTZCRCxDQXBDTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7Z2V0RGlzdGFuY2VTY2FsZXN9IGZyb20gJ3ZpZXdwb3J0LW1lcmNhdG9yLXByb2plY3QnO1xuaW1wb3J0IHtub3ROdWxsb3JVbmRlZmluZWR9IGZyb20gJ3V0aWxzL2RhdGEtdXRpbHMnO1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFBhZGRpbmcgPSAyMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRPZmZzZXRCeVJhZGl1cyhyYWRpdXNTY2FsZSwgZ2V0UmFkaXVzLCBtYXBTdGF0ZSkge1xuICByZXR1cm4gdGV4dExhYmVsID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZVNjYWxlID0gZ2V0RGlzdGFuY2VTY2FsZXMobWFwU3RhdGUpO1xuICAgIGNvbnN0IHhNdWx0ID0gdGV4dExhYmVsLmFuY2hvciA9PT0gJ21pZGRsZScgPyAwIDogdGV4dExhYmVsLmFuY2hvciA9PT0gJ3N0YXJ0JyA/IDEgOiAtMTtcbiAgICBjb25zdCB5TXVsdCA9IHRleHRMYWJlbC5hbGlnbm1lbnQgPT09ICdjZW50ZXInID8gMCA6IHRleHRMYWJlbC5hbGlnbm1lbnQgPT09ICdib3R0b20nID8gMSA6IC0xO1xuXG4gICAgY29uc3Qgc2l6ZU9mZnNldCA9XG4gICAgICB0ZXh0TGFiZWwuYWxpZ25tZW50ID09PSAnY2VudGVyJ1xuICAgICAgICA/IDBcbiAgICAgICAgOiB0ZXh0TGFiZWwuYWxpZ25tZW50ID09PSAnYm90dG9tJ1xuICAgICAgICA/IHRleHRMYWJlbC5zaXplXG4gICAgICAgIDogdGV4dExhYmVsLnNpemU7XG5cbiAgICBjb25zdCBwaXhlbFJhZGl1cyA9IHJhZGl1c1NjYWxlICogZGlzdGFuY2VTY2FsZS5waXhlbHNQZXJNZXRlclswXTtcbiAgICBjb25zdCBwYWRkaW5nID0gZGVmYXVsdFBhZGRpbmc7XG5cbiAgICByZXR1cm4gdHlwZW9mIGdldFJhZGl1cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBkID0+IFtcbiAgICAgICAgICB4TXVsdCAqIChnZXRSYWRpdXMoZCkgKiBwaXhlbFJhZGl1cyArIHBhZGRpbmcpLFxuICAgICAgICAgIHlNdWx0ICogKGdldFJhZGl1cyhkKSAqIHBpeGVsUmFkaXVzICsgcGFkZGluZyArIHNpemVPZmZzZXQpXG4gICAgICAgIF1cbiAgICAgIDogW1xuICAgICAgICAgIHhNdWx0ICogKGdldFJhZGl1cyAqIHBpeGVsUmFkaXVzICsgcGFkZGluZyksXG4gICAgICAgICAgeU11bHQgKiAoZ2V0UmFkaXVzICogcGl4ZWxSYWRpdXMgKyBwYWRkaW5nICsgc2l6ZU9mZnNldClcbiAgICAgICAgXTtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHRleHRMYWJlbEFjY2Vzc29yID0gdGV4dExhYmVsID0+IGRjID0+IGQgPT4ge1xuICBjb25zdCB2YWwgPSB0ZXh0TGFiZWwuZmllbGQudmFsdWVBY2Nlc3NvcihkKTtcbiAgcmV0dXJuIG5vdE51bGxvclVuZGVmaW5lZCh2YWwpID8gU3RyaW5nKHZhbCkgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRUZXh0TGFiZWxEYXRhID0gKHtcbiAgdGV4dExhYmVsLFxuICB0cmlnZ2VyQ2hhbmdlZCxcbiAgb2xkTGF5ZXJEYXRhLFxuICBkYXRhLFxuICBkYXRhQ29udGFpbmVyXG59KSA9PiB7XG4gIHJldHVybiB0ZXh0TGFiZWwubWFwKCh0bCwgaSkgPT4ge1xuICAgIGlmICghdGwuZmllbGQpIHtcbiAgICAgIC8vIGlmIG5vIGZpZWxkIHNlbGVjdGVkLFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0VGV4dDogbnVsbCxcbiAgICAgICAgY2hhcmFjdGVyU2V0OiBbXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRUZXh0ID0gdGV4dExhYmVsQWNjZXNzb3IodGwpKGRhdGFDb250YWluZXIpO1xuICAgIGxldCBjaGFyYWN0ZXJTZXQ7XG5cbiAgICBpZiAoXG4gICAgICAhdHJpZ2dlckNoYW5nZWRbYGdldExhYmVsQ2hhcmFjdGVyU2V0LSR7aX1gXSAmJlxuICAgICAgb2xkTGF5ZXJEYXRhICYmXG4gICAgICBvbGRMYXllckRhdGEudGV4dExhYmVscyAmJlxuICAgICAgb2xkTGF5ZXJEYXRhLnRleHRMYWJlbHNbaV1cbiAgICApIHtcbiAgICAgIGNoYXJhY3RlclNldCA9IG9sZExheWVyRGF0YS50ZXh0TGFiZWxzW2ldLmNoYXJhY3RlclNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYWxsTGFiZWxzID0gdGwuZmllbGQgPyBkYXRhLm1hcChnZXRUZXh0KSA6IFtdO1xuICAgICAgY2hhcmFjdGVyU2V0ID0gdW5pcShhbGxMYWJlbHMuam9pbignJykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjaGFyYWN0ZXJTZXQsXG4gICAgICBnZXRUZXh0XG4gICAgfTtcbiAgfSk7XG59O1xuIl19