kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
38 lines (34 loc) • 9.49 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
// Copyright (c) 2023 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.
function getUniforms() {
return {};
}
var vs = "uniform vec2 brushing_uMousePosition;\nuniform float brushing_uBrushRadius;\nuniform float brushing_uBrushSource;\nuniform float brushing_uBrushTarget;\nuniform float brushing_uEnableBrushing;\nuniform float brushing_uStrokeScale;\nuniform float brushing_uOutsideBrushRadius;\n\nconst float R_EARTH = 6371000.; // earth radius in meter\n// const float PI = 3.1415926538;\n\n// approximate distance between lng lat in meters\nfloat distanceBetweenLatLng(vec2 source, vec2 target) {\n float PI = 3.1415926538;\n vec2 delta = (source - target) * PI / 180.;\n\n float a =\n sin(delta.y / 2.) * sin(delta.y / 2.) +\n cos(source.y * PI / 180.) * cos(target.y * PI / 180.) *\n sin(delta.x / 2.) * sin(delta.x / 2.);\n\n float c = 2. * atan(sqrt(a), sqrt(1. - a));\n\n return R_EARTH * c;\n}\n\n// range is km\nfloat isPointInRange(vec2 ptLatLng, float enabled) {\n return float(enabled <= 0. || distanceBetweenLatLng(ptLatLng, brushing_uMousePosition) <= brushing_uBrushRadius);\n}\n\nvec2 getExtrusionOffset(vec2 line_clipspace, vec2 viewportSize, float offset_direction, float lineWidth) {\n // normalized direction of the line\n vec2 dir_screenspace = normalize(line_clipspace * viewportSize);\n // rotate by 90 degrees\n dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);\n\n vec2 offset_screenspace = dir_screenspace * offset_direction * lineWidth / 2.0;\n vec2 offset_clipspace = offset_screenspace / viewportSize * 2.0;\n\n return offset_clipspace;\n}\n\nvec2 brushing_getExtrusionOffset(\n vec2 line_clipspace,\n float offset_direction,\n vec2 viewportSize,\n vec4 instancePositions, \n float instanceStrokeWidth\n) {\n float isSourceInBrush = isPointInRange(instancePositions.xy, brushing_uBrushSource);\n float isTargetInBrush = isPointInRange(instancePositions.zw, brushing_uBrushTarget);\n \n float isInBrush = float(brushing_uEnableBrushing <= 0. ||\n (brushing_uBrushSource * isSourceInBrush > 0. || brushing_uBrushTarget * isTargetInBrush > 0.));\n \n float strokeWidth = brushing_uStrokeScale * instanceStrokeWidth;\n\n float finalWidth = mix(0.0, strokeWidth, isInBrush);\n\n // extrude\n return getExtrusionOffset(line_clipspace, viewportSize, offset_direction, finalWidth);\n}\n\nfloat brushing_getRadius(\n vec3 instancePositions,\n float instanceRadius\n) {\n float isPtInBrush = isPointInRange(instancePositions.xy, brushing_uEnableBrushing);\n return mix(brushing_uOutsideBrushRadius, instanceRadius, isPtInBrush);\n}\n";
var _default = exports["default"] = {
name: 'brushing',
vs: vs,
getUniforms: getUniforms
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaGFkZXJsaWIvYnJ1c2hpbmctbW9kdWxlLmpzIl0sIm5hbWVzIjpbImdldFVuaWZvcm1zIiwidnMiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxTQUFTQSxXQUFULEdBQXVCO0FBQ3JCLFNBQU8sRUFBUDtBQUNEOztBQUVELElBQU1DLEVBQUUsNjdFQUFSOztvQ0EwRWU7QUFDYkMsRUFBQUEsSUFBSSxFQUFFLFVBRE87QUFFYkQsRUFBQUEsRUFBRSxFQUFGQSxFQUZhO0FBR2JELEVBQUFBLFdBQVcsRUFBWEE7QUFIYSxDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gZ2V0VW5pZm9ybXMoKSB7XG4gIHJldHVybiB7fTtcbn1cblxuY29uc3QgdnMgPSBgXFxcbnVuaWZvcm0gdmVjMiBicnVzaGluZ191TW91c2VQb3NpdGlvbjtcbnVuaWZvcm0gZmxvYXQgYnJ1c2hpbmdfdUJydXNoUmFkaXVzO1xudW5pZm9ybSBmbG9hdCBicnVzaGluZ191QnJ1c2hTb3VyY2U7XG51bmlmb3JtIGZsb2F0IGJydXNoaW5nX3VCcnVzaFRhcmdldDtcbnVuaWZvcm0gZmxvYXQgYnJ1c2hpbmdfdUVuYWJsZUJydXNoaW5nO1xudW5pZm9ybSBmbG9hdCBicnVzaGluZ191U3Ryb2tlU2NhbGU7XG51bmlmb3JtIGZsb2F0IGJydXNoaW5nX3VPdXRzaWRlQnJ1c2hSYWRpdXM7XG5cbmNvbnN0IGZsb2F0IFJfRUFSVEggPSA2MzcxMDAwLjsgLy8gZWFydGggcmFkaXVzIGluIG1ldGVyXG4vLyBjb25zdCBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzODtcblxuLy8gYXBwcm94aW1hdGUgZGlzdGFuY2UgYmV0d2VlbiBsbmcgbGF0IGluIG1ldGVyc1xuZmxvYXQgZGlzdGFuY2VCZXR3ZWVuTGF0TG5nKHZlYzIgc291cmNlLCB2ZWMyIHRhcmdldCkge1xuICBmbG9hdCBQSSA9IDMuMTQxNTkyNjUzODtcbiAgdmVjMiBkZWx0YSA9IChzb3VyY2UgLSB0YXJnZXQpICogUEkgLyAxODAuO1xuXG4gIGZsb2F0IGEgPVxuICAgIHNpbihkZWx0YS55IC8gMi4pICogc2luKGRlbHRhLnkgLyAyLikgK1xuICAgIGNvcyhzb3VyY2UueSAqIFBJIC8gMTgwLikgKiBjb3ModGFyZ2V0LnkgKiBQSSAvIDE4MC4pICpcbiAgICBzaW4oZGVsdGEueCAvIDIuKSAqIHNpbihkZWx0YS54IC8gMi4pO1xuXG4gIGZsb2F0IGMgPSAyLiAqIGF0YW4oc3FydChhKSwgc3FydCgxLiAtIGEpKTtcblxuICByZXR1cm4gUl9FQVJUSCAqIGM7XG59XG5cbi8vIHJhbmdlIGlzIGttXG5mbG9hdCBpc1BvaW50SW5SYW5nZSh2ZWMyIHB0TGF0TG5nLCBmbG9hdCBlbmFibGVkKSB7XG4gIHJldHVybiBmbG9hdChlbmFibGVkIDw9IDAuIHx8IGRpc3RhbmNlQmV0d2VlbkxhdExuZyhwdExhdExuZywgYnJ1c2hpbmdfdU1vdXNlUG9zaXRpb24pIDw9IGJydXNoaW5nX3VCcnVzaFJhZGl1cyk7XG59XG5cbnZlYzIgZ2V0RXh0cnVzaW9uT2Zmc2V0KHZlYzIgbGluZV9jbGlwc3BhY2UsIHZlYzIgdmlld3BvcnRTaXplLCBmbG9hdCBvZmZzZXRfZGlyZWN0aW9uLCBmbG9hdCBsaW5lV2lkdGgpIHtcbiAgLy8gbm9ybWFsaXplZCBkaXJlY3Rpb24gb2YgdGhlIGxpbmVcbiAgdmVjMiBkaXJfc2NyZWVuc3BhY2UgPSBub3JtYWxpemUobGluZV9jbGlwc3BhY2UgKiB2aWV3cG9ydFNpemUpO1xuICAvLyByb3RhdGUgYnkgOTAgZGVncmVlc1xuICBkaXJfc2NyZWVuc3BhY2UgPSB2ZWMyKC1kaXJfc2NyZWVuc3BhY2UueSwgZGlyX3NjcmVlbnNwYWNlLngpO1xuXG4gIHZlYzIgb2Zmc2V0X3NjcmVlbnNwYWNlID0gZGlyX3NjcmVlbnNwYWNlICogb2Zmc2V0X2RpcmVjdGlvbiAqIGxpbmVXaWR0aCAvIDIuMDtcbiAgdmVjMiBvZmZzZXRfY2xpcHNwYWNlID0gb2Zmc2V0X3NjcmVlbnNwYWNlIC8gdmlld3BvcnRTaXplICogMi4wO1xuXG4gIHJldHVybiBvZmZzZXRfY2xpcHNwYWNlO1xufVxuXG52ZWMyIGJydXNoaW5nX2dldEV4dHJ1c2lvbk9mZnNldChcbiAgdmVjMiBsaW5lX2NsaXBzcGFjZSxcbiAgZmxvYXQgb2Zmc2V0X2RpcmVjdGlvbixcbiAgdmVjMiB2aWV3cG9ydFNpemUsXG4gIHZlYzQgaW5zdGFuY2VQb3NpdGlvbnMsIFxuICBmbG9hdCBpbnN0YW5jZVN0cm9rZVdpZHRoXG4pIHtcbiAgZmxvYXQgaXNTb3VyY2VJbkJydXNoID0gaXNQb2ludEluUmFuZ2UoaW5zdGFuY2VQb3NpdGlvbnMueHksIGJydXNoaW5nX3VCcnVzaFNvdXJjZSk7XG4gIGZsb2F0IGlzVGFyZ2V0SW5CcnVzaCA9IGlzUG9pbnRJblJhbmdlKGluc3RhbmNlUG9zaXRpb25zLnp3LCBicnVzaGluZ191QnJ1c2hUYXJnZXQpO1xuICBcbiAgZmxvYXQgaXNJbkJydXNoID0gZmxvYXQoYnJ1c2hpbmdfdUVuYWJsZUJydXNoaW5nIDw9IDAuIHx8XG4gIChicnVzaGluZ191QnJ1c2hTb3VyY2UgKiBpc1NvdXJjZUluQnJ1c2ggPiAwLiB8fCBicnVzaGluZ191QnJ1c2hUYXJnZXQgKiBpc1RhcmdldEluQnJ1c2ggPiAwLikpO1xuICBcbiAgZmxvYXQgc3Ryb2tlV2lkdGggPSBicnVzaGluZ191U3Ryb2tlU2NhbGUgKiBpbnN0YW5jZVN0cm9rZVdpZHRoO1xuXG4gIGZsb2F0IGZpbmFsV2lkdGggPSBtaXgoMC4wLCBzdHJva2VXaWR0aCwgaXNJbkJydXNoKTtcblxuICAvLyBleHRydWRlXG4gIHJldHVybiBnZXRFeHRydXNpb25PZmZzZXQobGluZV9jbGlwc3BhY2UsIHZpZXdwb3J0U2l6ZSwgb2Zmc2V0X2RpcmVjdGlvbiwgZmluYWxXaWR0aCk7XG59XG5cbmZsb2F0IGJydXNoaW5nX2dldFJhZGl1cyhcbiAgdmVjMyBpbnN0YW5jZVBvc2l0aW9ucyxcbiAgZmxvYXQgaW5zdGFuY2VSYWRpdXNcbikge1xuICBmbG9hdCBpc1B0SW5CcnVzaCA9IGlzUG9pbnRJblJhbmdlKGluc3RhbmNlUG9zaXRpb25zLnh5LCBicnVzaGluZ191RW5hYmxlQnJ1c2hpbmcpO1xuICByZXR1cm4gbWl4KGJydXNoaW5nX3VPdXRzaWRlQnJ1c2hSYWRpdXMsIGluc3RhbmNlUmFkaXVzLCBpc1B0SW5CcnVzaCk7XG59XG5gO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdicnVzaGluZycsXG4gIHZzLFxuICBnZXRVbmlmb3Jtc1xufTtcbiJdfQ==