@deck.gl/mapbox 8.8.11 → 8.9.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,10 +12,19 @@ exports.updateLayer = updateLayer;
12
12
  exports.drawLayer = drawLayer;
13
13
  exports.getViewState = getViewState;
14
14
 
15
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
16
 
17
17
  var _core = require("@deck.gl/core");
18
18
 
19
+ var _webMercator = require("@math.gl/web-mercator");
20
+
21
+ 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; }
22
+
23
+ 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; }
24
+
25
+ var TILE_SIZE = 512;
26
+ var DEGREES_TO_RADIANS = Math.PI / 180;
27
+
19
28
  function getDeckInstance(_ref) {
20
29
  var map = _ref.map,
21
30
  gl = _ref.gl,
@@ -73,7 +82,6 @@ function getDeckInstance(_ref) {
73
82
  }
74
83
 
75
84
  deckInstance.userData.mapboxLayers = new Set();
76
- deckInstance.userData.mapboxVersion = getMapboxVersion(map);
77
85
  map.__deck = deckInstance;
78
86
  map.on('render', function () {
79
87
  if (deckInstance.isInitialized) afterRender(deckInstance, map);
@@ -122,11 +130,13 @@ function drawLayer(deck, map, layer) {
122
130
  }
123
131
 
124
132
  function getViewState(map) {
133
+ var _map$getTerrain;
134
+
125
135
  var _map$getCenter = map.getCenter(),
126
136
  lng = _map$getCenter.lng,
127
137
  lat = _map$getCenter.lat;
128
138
 
129
- return {
139
+ var viewState = {
130
140
  longitude: (lng + 540) % 360 - 180,
131
141
  latitude: lat,
132
142
  zoom: map.getZoom(),
@@ -135,49 +145,63 @@ function getViewState(map) {
135
145
  padding: map.getPadding(),
136
146
  repeat: map.getRenderWorldCopies()
137
147
  };
138
- }
139
148
 
140
- function getMapboxVersion(map) {
141
- var major = 0;
142
- var minor = 0;
143
- var version = map.version;
149
+ if ((_map$getTerrain = map.getTerrain) !== null && _map$getTerrain !== void 0 && _map$getTerrain.call(map)) {
150
+ centerCameraOnTerrain(map, viewState);
151
+ }
152
+
153
+ return viewState;
154
+ }
144
155
 
145
- if (version) {
146
- var _version$split$slice$ = version.split('.').slice(0, 2).map(Number);
156
+ function centerCameraOnTerrain(map, viewState) {
157
+ if (map.getFreeCameraOptions) {
158
+ var _map$getFreeCameraOpt = map.getFreeCameraOptions(),
159
+ position = _map$getFreeCameraOpt.position;
147
160
 
148
- var _version$split$slice$2 = (0, _slicedToArray2.default)(_version$split$slice$, 2);
161
+ if (!position || position.z === undefined) {
162
+ return;
163
+ }
149
164
 
150
- major = _version$split$slice$2[0];
151
- minor = _version$split$slice$2[1];
165
+ var height = map.transform.height;
166
+ var longitude = viewState.longitude,
167
+ latitude = viewState.latitude,
168
+ pitch = viewState.pitch;
169
+ var cameraX = position.x * TILE_SIZE;
170
+ var cameraY = (1 - position.y) * TILE_SIZE;
171
+ var cameraZ = position.z * TILE_SIZE;
172
+ var center = (0, _webMercator.lngLatToWorld)([longitude, latitude]);
173
+ var dx = cameraX - center[0];
174
+ var dy = cameraY - center[1];
175
+ var cameraToCenterDistanceGround = Math.sqrt(dx * dx + dy * dy);
176
+ var pitchRadians = pitch * DEGREES_TO_RADIANS;
177
+ var altitudePixels = 1.5 * height;
178
+ var scale = altitudePixels * Math.sin(pitchRadians) / cameraToCenterDistanceGround;
179
+ viewState.zoom = Math.log2(scale);
180
+ var cameraZFromSurface = altitudePixels * Math.cos(pitchRadians) / scale;
181
+ var surfaceElevation = cameraZ - cameraZFromSurface;
182
+ viewState.position = [0, 0, surfaceElevation / (0, _webMercator.unitsPerMeter)(latitude)];
183
+ } else if (typeof map.transform.elevation === 'number') {
184
+ viewState.position = [0, 0, map.transform.elevation];
152
185
  }
153
-
154
- return {
155
- major: major,
156
- minor: minor
157
- };
158
186
  }
159
187
 
160
188
  function getViewport(deck, map) {
161
189
  var useMapboxProjection = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
162
- var _ref4 = deck.userData,
163
- mapboxVersion = _ref4.mapboxVersion;
164
- return new _core.WebMercatorViewport(Object.assign({
190
+ return new _core.WebMercatorViewport(_objectSpread(_objectSpread({
165
191
  id: 'mapbox',
166
192
  x: 0,
167
193
  y: 0,
168
194
  width: deck.width,
169
195
  height: deck.height
170
- }, getViewState(map), useMapboxProjection ? {
171
- nearZMultiplier: mapboxVersion.major === 1 && mapboxVersion.minor >= 3 || mapboxVersion.major >= 2 ? 0.02 : 1 / (deck.height || 1)
172
- } : {
173
- nearZMultiplier: 0.1
196
+ }, getViewState(map)), {}, {
197
+ nearZMultiplier: useMapboxProjection ? 0.02 : 0.1
174
198
  }));
175
199
  }
176
200
 
177
201
  function afterRender(deck, map) {
178
- var _ref5 = deck.userData,
179
- mapboxLayers = _ref5.mapboxLayers,
180
- isExternal = _ref5.isExternal;
202
+ var _ref4 = deck.userData,
203
+ mapboxLayers = _ref4.mapboxLayers,
204
+ isExternal = _ref4.isExternal;
181
205
 
182
206
  if (isExternal) {
183
207
  var mapboxLayerIds = Array.from(mapboxLayers, function (layer) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deck-utils.ts"],"names":["getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","MapView","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","Deck","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","clearStack","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","getCenter","lng","lat","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","major","minor","version","split","slice","Number","useMapboxProjection","WebMercatorViewport","x","y","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","params","viewport","needsRedraw","clearRedrawFlags","forEach","LayerType","type","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n mapboxVersion: {minor: number; major: number};\n};\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: () => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n // Hack - do not pass a redraw reason here to prevent the React component from clearing the context\n // Rerender will be triggered by MapboxLayer's render()\n customRender?.('');\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n let clearStack: boolean = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n clearStack = true;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearStack,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n return {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n}\n\nfunction getMapboxVersion(map: Map): {minor: number; major: number} {\n // parse mapbox version string\n let major = 0;\n let minor = 0;\n // @ts-ignore (2339) undefined property\n const version: string = map.version;\n if (version) {\n [major, minor] = version.split('.').slice(0, 2).map(Number);\n }\n return {major, minor};\n}\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n const {mapboxVersion} = deck.userData as UserData;\n\n return new WebMercatorViewport(\n Object.assign(\n {\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height\n },\n getViewState(map),\n useMapboxProjection\n ? {\n // match mapbox's projection matrix\n // A change of near plane was made in 1.3.0\n // https://github.com/mapbox/mapbox-gl-js/pull/8502\n nearZMultiplier:\n (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2\n ? 0.02\n : 1 / (deck.height || 1)\n }\n : {\n // use deck.gl's own default\n nearZMultiplier: 0.1\n }\n )\n );\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
1
+ {"version":3,"sources":["../../src/deck-utils.ts"],"names":["TILE_SIZE","DEGREES_TO_RADIANS","Math","PI","getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","MapView","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","Deck","finalize","mapboxLayers","Set","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","clearStack","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","getCenter","lng","lat","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","getTerrain","centerCameraOnTerrain","getFreeCameraOptions","position","z","undefined","transform","cameraX","x","cameraY","y","cameraZ","center","dx","dy","cameraToCenterDistanceGround","sqrt","pitchRadians","altitudePixels","scale","sin","log2","cameraZFromSurface","cos","surfaceElevation","elevation","useMapboxProjection","WebMercatorViewport","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","slice","params","viewport","needsRedraw","clearRedrawFlags","forEach","LayerType","type","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\nimport {lngLatToWorld, unitsPerMeter} from '@math.gl/web-mercator';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n // mapboxVersion: {minor: number; major: number};\n};\n\n// Mercator constants\nconst TILE_SIZE = 512;\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: () => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n // Hack - do not pass a redraw reason here to prevent the React component from clearing the context\n // Rerender will be triggered by MapboxLayer's render()\n customRender?.('');\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n // (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n let clearStack: boolean = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n clearStack = true;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearStack,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n\n const viewState: MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n } = {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n\n if (map.getTerrain?.()) {\n // When the base map has terrain, we need to target the camera at the terrain surface\n centerCameraOnTerrain(map, viewState);\n }\n\n return viewState;\n}\n\nfunction centerCameraOnTerrain(map: Map, viewState: MapViewState) {\n if (map.getFreeCameraOptions) {\n // mapbox-gl v2\n const {position} = map.getFreeCameraOptions();\n if (!position || position.z === undefined) {\n return;\n }\n\n // @ts-ignore transform is not typed\n const height = map.transform.height;\n const {longitude, latitude, pitch} = viewState;\n\n // Convert mapbox mercator coordinate to deck common space\n const cameraX = position.x * TILE_SIZE;\n const cameraY = (1 - position.y) * TILE_SIZE;\n const cameraZ = position.z * TILE_SIZE;\n\n // Mapbox manipulates zoom in terrain mode, see discussion here: https://github.com/mapbox/mapbox-gl-js/issues/12040\n const center = lngLatToWorld([longitude, latitude]);\n const dx = cameraX - center[0];\n const dy = cameraY - center[1];\n const cameraToCenterDistanceGround = Math.sqrt(dx * dx + dy * dy);\n\n const pitchRadians = pitch! * DEGREES_TO_RADIANS;\n const altitudePixels = 1.5 * height;\n const scale = (altitudePixels * Math.sin(pitchRadians)) / cameraToCenterDistanceGround;\n viewState.zoom = Math.log2(scale);\n\n const cameraZFromSurface = (altitudePixels * Math.cos(pitchRadians)) / scale;\n const surfaceElevation = cameraZ - cameraZFromSurface;\n viewState.position = [0, 0, surfaceElevation / unitsPerMeter(latitude)];\n }\n // @ts-ignore transform is not typed\n else if (typeof map.transform.elevation === 'number') {\n // maplibre-gl\n // @ts-ignore transform is not typed\n viewState.position = [0, 0, map.transform.elevation];\n }\n}\n\n// function getMapboxVersion(map: Map): {minor: number; major: number} {\n// // parse mapbox version string\n// let major = 0;\n// let minor = 0;\n// // @ts-ignore (2339) undefined property\n// const version: string = map.version;\n// if (version) {\n// [major, minor] = version.split('.').slice(0, 2).map(Number);\n// }\n// return {major, minor};\n// }\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n return new WebMercatorViewport({\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height,\n ...getViewState(map),\n nearZMultiplier: useMapboxProjection\n ? // match mapbox-gl@>=1.3.0's projection matrix\n 0.02\n : // use deck.gl's own default\n 0.1\n });\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
@@ -1,4 +1,7 @@
1
1
  import { Deck, WebMercatorViewport, MapView, _flatten as flatten } from '@deck.gl/core';
2
+ import { lngLatToWorld, unitsPerMeter } from '@math.gl/web-mercator';
3
+ const TILE_SIZE = 512;
4
+ const DEGREES_TO_RADIANS = Math.PI / 180;
2
5
  export function getDeckInstance({
3
6
  map,
4
7
  gl,
@@ -54,7 +57,6 @@ export function getDeckInstance({
54
57
  }
55
58
 
56
59
  deckInstance.userData.mapboxLayers = new Set();
57
- deckInstance.userData.mapboxVersion = getMapboxVersion(map);
58
60
  map.__deck = deckInstance;
59
61
  map.on('render', () => {
60
62
  if (deckInstance.isInitialized) afterRender(deckInstance, map);
@@ -98,11 +100,13 @@ export function drawLayer(deck, map, layer) {
98
100
  });
99
101
  }
100
102
  export function getViewState(map) {
103
+ var _map$getTerrain;
104
+
101
105
  const {
102
106
  lng,
103
107
  lat
104
108
  } = map.getCenter();
105
- return {
109
+ const viewState = {
106
110
  longitude: (lng + 540) % 360 - 180,
107
111
  latitude: lat,
108
112
  zoom: map.getZoom(),
@@ -111,38 +115,59 @@ export function getViewState(map) {
111
115
  padding: map.getPadding(),
112
116
  repeat: map.getRenderWorldCopies()
113
117
  };
118
+
119
+ if ((_map$getTerrain = map.getTerrain) !== null && _map$getTerrain !== void 0 && _map$getTerrain.call(map)) {
120
+ centerCameraOnTerrain(map, viewState);
121
+ }
122
+
123
+ return viewState;
114
124
  }
115
125
 
116
- function getMapboxVersion(map) {
117
- let major = 0;
118
- let minor = 0;
119
- const version = map.version;
126
+ function centerCameraOnTerrain(map, viewState) {
127
+ if (map.getFreeCameraOptions) {
128
+ const {
129
+ position
130
+ } = map.getFreeCameraOptions();
120
131
 
121
- if (version) {
122
- [major, minor] = version.split('.').slice(0, 2).map(Number);
123
- }
132
+ if (!position || position.z === undefined) {
133
+ return;
134
+ }
124
135
 
125
- return {
126
- major,
127
- minor
128
- };
136
+ const height = map.transform.height;
137
+ const {
138
+ longitude,
139
+ latitude,
140
+ pitch
141
+ } = viewState;
142
+ const cameraX = position.x * TILE_SIZE;
143
+ const cameraY = (1 - position.y) * TILE_SIZE;
144
+ const cameraZ = position.z * TILE_SIZE;
145
+ const center = lngLatToWorld([longitude, latitude]);
146
+ const dx = cameraX - center[0];
147
+ const dy = cameraY - center[1];
148
+ const cameraToCenterDistanceGround = Math.sqrt(dx * dx + dy * dy);
149
+ const pitchRadians = pitch * DEGREES_TO_RADIANS;
150
+ const altitudePixels = 1.5 * height;
151
+ const scale = altitudePixels * Math.sin(pitchRadians) / cameraToCenterDistanceGround;
152
+ viewState.zoom = Math.log2(scale);
153
+ const cameraZFromSurface = altitudePixels * Math.cos(pitchRadians) / scale;
154
+ const surfaceElevation = cameraZ - cameraZFromSurface;
155
+ viewState.position = [0, 0, surfaceElevation / unitsPerMeter(latitude)];
156
+ } else if (typeof map.transform.elevation === 'number') {
157
+ viewState.position = [0, 0, map.transform.elevation];
158
+ }
129
159
  }
130
160
 
131
161
  function getViewport(deck, map, useMapboxProjection = true) {
132
- const {
133
- mapboxVersion
134
- } = deck.userData;
135
- return new WebMercatorViewport(Object.assign({
162
+ return new WebMercatorViewport({
136
163
  id: 'mapbox',
137
164
  x: 0,
138
165
  y: 0,
139
166
  width: deck.width,
140
- height: deck.height
141
- }, getViewState(map), useMapboxProjection ? {
142
- nearZMultiplier: mapboxVersion.major === 1 && mapboxVersion.minor >= 3 || mapboxVersion.major >= 2 ? 0.02 : 1 / (deck.height || 1)
143
- } : {
144
- nearZMultiplier: 0.1
145
- }));
167
+ height: deck.height,
168
+ ...getViewState(map),
169
+ nearZMultiplier: useMapboxProjection ? 0.02 : 0.1
170
+ });
146
171
  }
147
172
 
148
173
  function afterRender(deck, map) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/deck-utils.ts"],"names":["Deck","WebMercatorViewport","MapView","_flatten","flatten","getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","finalize","mapboxLayers","Set","mapboxVersion","getMapboxVersion","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","clearStack","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","lng","lat","getCenter","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","major","minor","version","split","slice","Number","useMapboxProjection","x","y","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","params","viewport","needsRedraw","clearRedrawFlags","forEach","LayerType","type","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n mapboxVersion: {minor: number; major: number};\n};\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: () => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n // Hack - do not pass a redraw reason here to prevent the React component from clearing the context\n // Rerender will be triggered by MapboxLayer's render()\n customRender?.('');\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n let clearStack: boolean = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n clearStack = true;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearStack,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n return {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n}\n\nfunction getMapboxVersion(map: Map): {minor: number; major: number} {\n // parse mapbox version string\n let major = 0;\n let minor = 0;\n // @ts-ignore (2339) undefined property\n const version: string = map.version;\n if (version) {\n [major, minor] = version.split('.').slice(0, 2).map(Number);\n }\n return {major, minor};\n}\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n const {mapboxVersion} = deck.userData as UserData;\n\n return new WebMercatorViewport(\n Object.assign(\n {\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height\n },\n getViewState(map),\n useMapboxProjection\n ? {\n // match mapbox's projection matrix\n // A change of near plane was made in 1.3.0\n // https://github.com/mapbox/mapbox-gl-js/pull/8502\n nearZMultiplier:\n (mapboxVersion.major === 1 && mapboxVersion.minor >= 3) || mapboxVersion.major >= 2\n ? 0.02\n : 1 / (deck.height || 1)\n }\n : {\n // use deck.gl's own default\n nearZMultiplier: 0.1\n }\n )\n );\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
1
+ {"version":3,"sources":["../../src/deck-utils.ts"],"names":["Deck","WebMercatorViewport","MapView","_flatten","flatten","lngLatToWorld","unitsPerMeter","TILE_SIZE","DEGREES_TO_RADIANS","Math","PI","getDeckInstance","map","gl","deck","__deck","customRender","props","_customRender","deckProps","useDevicePixels","triggerRepaint","parameters","depthMask","depthTest","blend","blendFunc","polygonOffsetFill","depthFunc","blendEquation","views","id","deckInstance","Object","assign","width","height","touchAction","viewState","getViewState","on","onMapMove","setProps","userData","isExternal","finalize","mapboxLayers","Set","isInitialized","afterRender","addLayer","layer","add","updateLayers","removeLayer","delete","updateLayer","drawLayer","currentViewport","clearStack","getViewport","_drawLayers","viewports","layerFilter","deckLayer","clearCanvas","lng","lat","getCenter","longitude","latitude","zoom","getZoom","bearing","getBearing","pitch","getPitch","padding","getPadding","repeat","getRenderWorldCopies","getTerrain","centerCameraOnTerrain","getFreeCameraOptions","position","z","undefined","transform","cameraX","x","cameraY","y","cameraZ","center","dx","dy","cameraToCenterDistanceGround","sqrt","pitchRadians","altitudePixels","scale","sin","log2","cameraZFromSurface","cos","surfaceElevation","elevation","useMapboxProjection","nearZMultiplier","mapboxLayerIds","Array","from","deckLayers","layers","Boolean","hasNonMapboxLayers","some","includes","getViewports","mapboxViewportIdx","findIndex","vp","hasNonMapboxViews","length","slice","params","viewport","needsRedraw","clearRedrawFlags","forEach","LayerType","type","push"],"mappings":"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","sourcesContent":["import {Deck, WebMercatorViewport, MapView, _flatten as flatten} from '@deck.gl/core';\nimport type {DeckProps, MapViewState, Layer} from '@deck.gl/core';\nimport type MapboxLayer from './mapbox-layer';\nimport type {Map} from 'mapbox-gl';\n\nimport {lngLatToWorld, unitsPerMeter} from '@math.gl/web-mercator';\n\ntype UserData = {\n isExternal: boolean;\n currentViewport?: WebMercatorViewport | null;\n mapboxLayers: Set<MapboxLayer<any>>;\n // mapboxVersion: {minor: number; major: number};\n};\n\n// Mercator constants\nconst TILE_SIZE = 512;\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nexport function getDeckInstance({\n map,\n gl,\n deck\n}: {\n map: Map & {__deck?: Deck | null};\n gl: WebGLRenderingContext;\n deck?: Deck;\n}): Deck {\n // Only create one deck instance per context\n if (map.__deck) {\n return map.__deck;\n }\n\n const customRender = deck?.props._customRender;\n\n const deckProps: DeckProps = {\n useDevicePixels: true,\n _customRender: () => {\n map.triggerRepaint();\n // customRender may be subscribed by DeckGL React component to update child props\n // make sure it is still called\n // Hack - do not pass a redraw reason here to prevent the React component from clearing the context\n // Rerender will be triggered by MapboxLayer's render()\n customRender?.('');\n },\n // TODO: import these defaults from a single source of truth\n parameters: {\n depthMask: true,\n depthTest: true,\n blend: true,\n blendFunc: [gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA],\n polygonOffsetFill: true,\n depthFunc: gl.LEQUAL,\n blendEquation: gl.FUNC_ADD\n },\n views: (deck && deck.props.views) || [new MapView({id: 'mapbox'})]\n };\n\n let deckInstance: Deck;\n\n if (!deck || deck.props.gl === gl) {\n // deck is using the WebGLContext created by mapbox\n // block deck from setting the canvas size\n Object.assign(deckProps, {\n gl,\n width: null,\n height: null,\n touchAction: 'unset',\n viewState: getViewState(map)\n });\n // If using the WebGLContext created by deck (React use case), we use deck's viewState to drive the map.\n // Otherwise (pure JS use case), we use the map's viewState to drive deck.\n map.on('move', () => onMapMove(deckInstance, map));\n }\n\n if (deck) {\n deckInstance = deck;\n deck.setProps(deckProps);\n (deck.userData as UserData).isExternal = true;\n } else {\n deckInstance = new Deck(deckProps);\n map.on('remove', () => {\n deckInstance.finalize();\n map.__deck = null;\n });\n }\n\n (deckInstance.userData as UserData).mapboxLayers = new Set();\n // (deckInstance.userData as UserData).mapboxVersion = getMapboxVersion(map);\n map.__deck = deckInstance;\n map.on('render', () => {\n if (deckInstance.isInitialized) afterRender(deckInstance, map);\n });\n\n return deckInstance;\n}\n\nexport function addLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.add(layer);\n updateLayers(deck);\n}\n\nexport function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {\n (deck.userData as UserData).mapboxLayers.delete(layer);\n updateLayers(deck);\n}\n\nexport function updateLayer(deck: Deck, layer: MapboxLayer<any>): void {\n updateLayers(deck);\n}\n\nexport function drawLayer(deck: Deck, map: Map, layer: MapboxLayer<any>): void {\n let {currentViewport} = deck.userData as UserData;\n let clearStack: boolean = false;\n if (!currentViewport) {\n // This is the first layer drawn in this render cycle.\n // Generate viewport from the current map state.\n currentViewport = getViewport(deck, map, true);\n (deck.userData as UserData).currentViewport = currentViewport;\n clearStack = true;\n }\n\n if (!deck.isInitialized) {\n return;\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports: [currentViewport],\n layerFilter: ({layer: deckLayer}) => layer.id === deckLayer.id,\n clearStack,\n clearCanvas: false\n });\n}\n\nexport function getViewState(map: Map): MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n} {\n const {lng, lat} = map.getCenter();\n\n const viewState: MapViewState & {\n repeat: boolean;\n padding: {\n left: number;\n right: number;\n top: number;\n bottom: number;\n };\n } = {\n // Longitude returned by getCenter can be outside of [-180, 180] when zooming near the anti meridian\n // https://github.com/visgl/deck.gl/issues/6894\n longitude: ((lng + 540) % 360) - 180,\n latitude: lat,\n zoom: map.getZoom(),\n bearing: map.getBearing(),\n pitch: map.getPitch(),\n padding: map.getPadding(),\n repeat: map.getRenderWorldCopies()\n };\n\n if (map.getTerrain?.()) {\n // When the base map has terrain, we need to target the camera at the terrain surface\n centerCameraOnTerrain(map, viewState);\n }\n\n return viewState;\n}\n\nfunction centerCameraOnTerrain(map: Map, viewState: MapViewState) {\n if (map.getFreeCameraOptions) {\n // mapbox-gl v2\n const {position} = map.getFreeCameraOptions();\n if (!position || position.z === undefined) {\n return;\n }\n\n // @ts-ignore transform is not typed\n const height = map.transform.height;\n const {longitude, latitude, pitch} = viewState;\n\n // Convert mapbox mercator coordinate to deck common space\n const cameraX = position.x * TILE_SIZE;\n const cameraY = (1 - position.y) * TILE_SIZE;\n const cameraZ = position.z * TILE_SIZE;\n\n // Mapbox manipulates zoom in terrain mode, see discussion here: https://github.com/mapbox/mapbox-gl-js/issues/12040\n const center = lngLatToWorld([longitude, latitude]);\n const dx = cameraX - center[0];\n const dy = cameraY - center[1];\n const cameraToCenterDistanceGround = Math.sqrt(dx * dx + dy * dy);\n\n const pitchRadians = pitch! * DEGREES_TO_RADIANS;\n const altitudePixels = 1.5 * height;\n const scale = (altitudePixels * Math.sin(pitchRadians)) / cameraToCenterDistanceGround;\n viewState.zoom = Math.log2(scale);\n\n const cameraZFromSurface = (altitudePixels * Math.cos(pitchRadians)) / scale;\n const surfaceElevation = cameraZ - cameraZFromSurface;\n viewState.position = [0, 0, surfaceElevation / unitsPerMeter(latitude)];\n }\n // @ts-ignore transform is not typed\n else if (typeof map.transform.elevation === 'number') {\n // maplibre-gl\n // @ts-ignore transform is not typed\n viewState.position = [0, 0, map.transform.elevation];\n }\n}\n\n// function getMapboxVersion(map: Map): {minor: number; major: number} {\n// // parse mapbox version string\n// let major = 0;\n// let minor = 0;\n// // @ts-ignore (2339) undefined property\n// const version: string = map.version;\n// if (version) {\n// [major, minor] = version.split('.').slice(0, 2).map(Number);\n// }\n// return {major, minor};\n// }\n\nfunction getViewport(deck: Deck, map: Map, useMapboxProjection = true): WebMercatorViewport {\n return new WebMercatorViewport({\n id: 'mapbox',\n x: 0,\n y: 0,\n width: deck.width,\n height: deck.height,\n ...getViewState(map),\n nearZMultiplier: useMapboxProjection\n ? // match mapbox-gl@>=1.3.0's projection matrix\n 0.02\n : // use deck.gl's own default\n 0.1\n });\n}\n\nfunction afterRender(deck: Deck, map: Map): void {\n const {mapboxLayers, isExternal} = deck.userData as UserData;\n\n if (isExternal) {\n // Draw non-Mapbox layers\n const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);\n const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];\n const hasNonMapboxLayers = deckLayers.some(\n layer => layer && !mapboxLayerIds.includes(layer.id)\n );\n let viewports = deck.getViewports();\n const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');\n const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;\n\n if (hasNonMapboxLayers || hasNonMapboxViews) {\n if (mapboxViewportIdx >= 0) {\n viewports = viewports.slice();\n viewports[mapboxViewportIdx] = getViewport(deck, map, false);\n }\n\n deck._drawLayers('mapbox-repaint', {\n viewports,\n layerFilter: params =>\n (!deck.props.layerFilter || deck.props.layerFilter(params)) &&\n (params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),\n clearCanvas: false\n });\n }\n }\n\n // End of render cycle, clear generated viewport\n (deck.userData as UserData).currentViewport = null;\n}\n\nfunction onMapMove(deck: Deck, map: Map): void {\n deck.setProps({\n viewState: getViewState(map)\n });\n // Camera changed, will trigger a map repaint right after this\n // Clear any change flag triggered by setting viewState so that deck does not request\n // a second repaint\n deck.needsRedraw({clearRedrawFlags: true});\n}\n\nfunction updateLayers(deck: Deck): void {\n if ((deck.userData as UserData).isExternal) {\n return;\n }\n\n const layers: Layer[] = [];\n (deck.userData as UserData).mapboxLayers.forEach(deckLayer => {\n const LayerType = deckLayer.props.type;\n const layer = new LayerType(deckLayer.props);\n layers.push(layer);\n });\n deck.setProps({layers});\n}\n"],"file":"deck-utils.js"}
package/dist.min.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("deck")):"function"==typeof define&&define.amd?define(["deck"],t):"object"==typeof exports?exports.deck=t(require("deck")):e.deck=t(e.deck)}(window,(function(e){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t){e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},function(t,n){t.exports=e},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}e.exports=function(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),e}},function(e,t,n){var r=n(7),i=n(8),o=n(9);e.exports=function(e,t){return r(e)||i(e,t)||o()}},function(e,t,n){var r=n(10);e.exports=function(e,t){if(null==e)return{};var n,i,o=r(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i<a.length;i++)n=a[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}},function(e,t,n){var r=n(11),i=globalThis.deck||{};if(!i.Layer)throw new Error("@deck.gl/core is not found");e.exports=Object.assign(i,r)},function(e,t){e.exports=function(e){if(Array.isArray(e))return e}},function(e,t){e.exports=function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var n=[],r=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==s.return||s.return()}finally{if(i)throw o}}return n}}},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}},function(e,t){e.exports=function(e,t){if(null==e)return{};var n,r,i={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(i[n]=e[n]);return i}},function(e,t,n){"use strict";n.r(t);var r=n(2),i=n.n(r),o=n(3),a=n.n(o),s=n(0),u=n.n(s),c=n(4),l=n.n(c),d=n(1);function p(e){var t=e.map,n=e.gl,r=e.deck;if(t.__deck)return t.__deck;var i,o=null==r?void 0:r.props._customRender,a={useDevicePixels:!0,_customRender:function(){t.triggerRepaint(),null==o||o("")},parameters:{depthMask:!0,depthTest:!0,blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthFunc:515,blendEquation:32774},views:r&&r.props.views||[new d.MapView({id:"mapbox"})]};return r&&r.props.gl!==n||(Object.assign(a,{gl:n,width:null,height:null,touchAction:"unset",viewState:f(t)}),t.on("move",(function(){return function(e,t){e.setProps({viewState:f(t)}),e.needsRedraw({clearRedrawFlags:!0})}(i,t)}))),r?(i=r,r.setProps(a),r.userData.isExternal=!0):(i=new d.Deck(a),t.on("remove",(function(){i.finalize(),t.__deck=null}))),i.userData.mapboxLayers=new Set,i.userData.mapboxVersion=function(e){var t=0,n=0,r=e.version;if(r){var i=r.split(".").slice(0,2).map(Number),o=l()(i,2);t=o[0],n=o[1]}return{major:t,minor:n}}(t),t.__deck=i,t.on("render",(function(){i.isInitialized&&function(e,t){var n=e.userData,r=n.mapboxLayers;if(n.isExternal){var i=Array.from(r,(function(e){return e.id})),o=Object(d._flatten)(e.props.layers,Boolean).some((function(e){return e&&!i.includes(e.id)})),a=e.getViewports(),s=a.findIndex((function(e){return"mapbox"===e.id})),u=a.length>1||s<0;(o||u)&&(s>=0&&((a=a.slice())[s]=v(e,t,!1)),e._drawLayers("mapbox-repaint",{viewports:a,layerFilter:function(t){return(!e.props.layerFilter||e.props.layerFilter(t))&&("mapbox"!==t.viewport.id||!i.includes(t.layer.id))},clearCanvas:!1}))}e.userData.currentViewport=null}(i,t)})),i}function f(e){var t=e.getCenter();return{longitude:(t.lng+540)%360-180,latitude:t.lat,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()}}function v(e,t){var n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=e.userData,i=r.mapboxVersion;return new d.WebMercatorViewport(Object.assign({id:"mapbox",x:0,y:0,width:e.width,height:e.height},f(t),n?{nearZMultiplier:1===i.major&&i.minor>=3||i.major>=2?.02:1/(e.height||1)}:{nearZMultiplier:.1}))}function h(e){if(!e.userData.isExternal){var t=[];e.userData.mapboxLayers.forEach((function(e){var n=new(0,e.props.type)(e.props);t.push(n)})),e.setProps({layers:t})}}var y=function(){function e(t){if(i()(this,e),u()(this,"id",void 0),u()(this,"type",void 0),u()(this,"renderingMode",void 0),u()(this,"map",void 0),u()(this,"deck",void 0),u()(this,"props",void 0),!t.id)throw new Error("Layer must have an unique id");this.id=t.id,this.type="custom",this.renderingMode=t.renderingMode||"3d",this.map=null,this.deck=null,this.props=t}return a()(e,[{key:"onAdd",value:function(e,t){var n,r;this.map=e,this.deck=p({map:e,gl:t,deck:this.props.deck}),n=this.deck,r=this,n.userData.mapboxLayers.add(r),h(n)}},{key:"onRemove",value:function(){var e,t;this.deck&&(e=this.deck,t=this,e.userData.mapboxLayers.delete(t),h(e))}},{key:"setProps",value:function(e){Object.assign(this.props,e,{id:this.id}),this.deck&&h(this.deck)}},{key:"render",value:function(){var e,t,n,r,i;e=this.deck,t=this.map,n=this,r=e.userData.currentViewport,i=!1,r||(r=v(e,t,!0),e.userData.currentViewport=r,i=!0),e.isInitialized&&e._drawLayers("mapbox-repaint",{viewports:[r],layerFilter:function(e){var t=e.layer;return n.id===t.id},clearStack:i,clearCanvas:!1})}}]),e}(),_=n(5),b=n.n(_);function m(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return k(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return k(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}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,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function g(e,t,n,r){if(e&&t&&e.style&&e.style._loaded){var i=Object(d._flatten)(r,Boolean);if(n!==r){var o,a=Object(d._flatten)(n,Boolean),s=new Set(a.map((function(e){return e.id}))),u=m(i);try{for(u.s();!(o=u.n()).done;){var c=o.value;s.delete(c.id)}}catch(e){u.e(e)}finally{u.f()}var l,p=m(s);try{for(p.s();!(l=p.n()).done;){var f=l.value;e.getLayer(f)&&e.removeLayer(f)}}catch(e){p.e(e)}finally{p.f()}}var v,h=m(i);try{for(h.s();!(v=h.n()).done;){var _=v.value,b=e.getLayer(_.id);b?b.implementation.setProps(_.props):e.addLayer(new y({id:_.id,deck:t}),_.props.beforeId)}}catch(e){h.e(e)}finally{h.f()}var k,g=e.style._order,w={},O=m(i);try{for(O.s();!(k=O.n()).done;){var j=k.value,x=j.props.beforeId;x&&g.includes(x)||(x="__UNDEFINED__"),w[x]=w[x]||[],w[x].push(j.id)}}catch(e){O.e(e)}finally{O.f()}for(var E in w)for(var S=w[E],P="__UNDEFINED__"===E?g.length:g.indexOf(E),D="__UNDEFINED__"===E?void 0:E,M=S.length-1;M>=0;M--){var C=S[M],A=g.indexOf(C);A!==P-1&&(e.moveLayer(C,D),A>P&&P++),P--,D=C}}}var w=["interleaved"];function O(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?O(Object(n),!0).forEach((function(t){u()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):O(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var x=function(){function e(t){var n=this;i()(this,e),u()(this,"_props",void 0),u()(this,"_deck",void 0),u()(this,"_map",void 0),u()(this,"_container",void 0),u()(this,"_interleaved",void 0),u()(this,"_handleStyleChange",(function(){g(n._map,n._deck,n._props.layers,n._props.layers)})),u()(this,"_updateContainerSize",(function(){if(n._map&&n._container){var e=n._map.getContainer(),t=e.clientWidth,r=e.clientHeight;Object.assign(n._container.style,{width:"".concat(t,"px"),height:"".concat(r,"px")})}})),u()(this,"_updateViewState",(function(){var e=n._deck;e&&(e.setProps({viewState:f(n._map)}),e.redraw())})),u()(this,"_handleMouseEvent",(function(e){var t=n._deck;if(t){var r={type:e.type,offsetCenter:e.point,srcEvent:e};switch(e.type){case"click":r.tapCount=1,t._onPointerDown(r),t._onEvent(r);break;case"dblclick":r.type="click",r.tapCount=2,t._onEvent(r);break;case"mousemove":r.type="pointermove",t._onPointerMove(r);break;case"mouseout":r.type="pointerleave",t._onPointerMove(r);break;default:return}}}));var r=t.interleaved,o=void 0!==r&&r,a=b()(t,w);this._interleaved=o,this._props=a}return a()(e,[{key:"setProps",value:function(e){this._interleaved&&e.layers&&g(this._map,this._deck,this._props.layers,e.layers),Object.assign(this._props,e),this._deck&&this._deck.setProps(this._props)}},{key:"onAdd",value:function(e){return this._map=e,this._interleaved?this._onAddInterleaved(e):this._onAddOverlaid(e)}},{key:"_onAddOverlaid",value:function(e){var t=document.createElement("div");return Object.assign(t.style,{position:"absolute",left:0,top:0,pointerEvents:"none"}),this._container=t,this._deck=new d.Deck(j(j({},this._props),{},{parent:t,viewState:f(e)})),e.on("resize",this._updateContainerSize),e.on("render",this._updateViewState),e.on("mousemove",this._handleMouseEvent),e.on("mouseout",this._handleMouseEvent),e.on("click",this._handleMouseEvent),e.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),t}},{key:"_onAddInterleaved",value:function(e){return this._deck=new d.Deck(j(j({},this._props),{},{gl:e.painter.context.gl})),e.on("styledata",this._handleStyleChange),g(e,this._deck,[],this._props.layers),document.createElement("div")}},{key:"onRemove",value:function(){var e,t=this._map;t&&(this._interleaved?this._onRemoveInterleaved(t):this._onRemoveOverlaid(t)),null===(e=this._deck)||void 0===e||e.finalize(),this._deck=void 0,this._map=void 0,this._container=void 0}},{key:"_onRemoveOverlaid",value:function(e){e.off("resize",this._updateContainerSize),e.off("render",this._updateViewState),e.off("mousemove",this._handleMouseEvent),e.off("mouseout",this._handleMouseEvent),e.off("click",this._handleMouseEvent),e.off("dblclick",this._handleMouseEvent)}},{key:"_onRemoveInterleaved",value:function(e){e.off("styledata",this._handleStyleChange),g(e,this._deck,this._props.layers,[])}},{key:"getDefaultPosition",value:function(){return"top-left"}},{key:"pickObject",value:function(e){return Object(d.assert)(this._deck),this._deck.pickObject(e)}},{key:"pickMultipleObjects",value:function(e){return Object(d.assert)(this._deck),this._deck.pickMultipleObjects(e)}},{key:"pickObjects",value:function(e){return Object(d.assert)(this._deck),this._deck.pickObjects(e)}},{key:"finalize",value:function(){this._map&&this._map.removeControl(this)}}]),e}();n.d(t,"MapboxLayer",(function(){return y})),n.d(t,"MapboxOverlay",(function(){return x}))}])}));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("deck")):"function"==typeof define&&define.amd?define(["deck"],t):"object"==typeof exports?exports.deck=t(require("deck")):e.deck=t(e.deck)}(window,(function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=12)}([function(e,t){e.exports=function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}},function(e,t,r){var n=r(16),o=r(17),i=r(7),a=r(18);e.exports=function(e,t){return n(e)||o(e,t)||i(e,t)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},function(t,r){t.exports=e},function(e,t,r){var n=r(13),o=r(14),i=r(7),a=r(15);e.exports=function(e){return n(e)||o(e)||i(e)||a()},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e}},function(e,t){e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,r){var n=r(6);e.exports=function(e,t){if(e){if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(e,t):void 0}},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){function r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}e.exports=function(e,t,n){return t&&r(e.prototype,t),n&&r(e,n),e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t,r){var n=r(19);e.exports=function(e,t){if(null==e)return{};var r,o,i=n(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}},function(e,t,r){var n=r(20),o=globalThis.deck||{};if(!o.Layer)throw new Error("@deck.gl/core is not found");e.exports=Object.assign(o,n)},function(e,t,r){var n=r(6);e.exports=function(e){if(Array.isArray(e))return n(e)},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e){if(Array.isArray(e))return e},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,i=[],a=!0,s=!1;try{for(r=r.call(e);!(a=(n=r.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){s=!0,o=e}finally{try{a||null==r.return||r.return()}finally{if(s)throw o}}return i}},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")},e.exports.default=e.exports,e.exports.__esModule=!0},function(e,t){e.exports=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}},function(e,t,r){"use strict";r.r(t);var n=r(4),o=r.n(n),i=r(5),a=r.n(i),s=r(0),u=r.n(s),l=r(2),c=(r(3),r(1)),p=r.n(c);r(8),r(9);var f="undefined"!=typeof Float32Array?Float32Array:Array;Math.random;Math.PI;Math.hypot||(Math.hypot=function(){for(var e=0,t=arguments.length;t--;)e+=arguments[t]*arguments[t];return Math.sqrt(e)});var d,v;d=new f(4),f!=Float32Array&&(d[0]=0,d[1]=0,d[2]=0,d[3]=0),v=d;Math.log2;!function(){var e=function(){var e=new f(2);return f!=Float32Array&&(e[0]=0,e[1]=0),e}()}();!function(){var e=function(){var e=new f(3);return f!=Float32Array&&(e[0]=0,e[1]=0,e[2]=0),e}()}();function h(e,t){if(!e)throw new Error(t||"@math.gl/web-mercator: assertion failed.")}var y=Math.PI,b=y/4,_=y/180;function m(e){var t=p()(e,2),r=t[0],n=t[1];h(Number.isFinite(r)),h(Number.isFinite(n)&&n>=-90&&n<=90,"invalid latitude");var o=n*_;return[512*(r*_+y)/(2*y),512*(y+Math.log(Math.tan(b+.5*o)))/(2*y)]}function g(e){return 512/4003e4/Math.cos(e*_)}Math.PI;r(10);function x(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function k(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?x(Object(r),!0).forEach((function(t){u()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):x(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var O=Math.PI/180;function w(e){var t=e.map,r=e.gl,n=e.deck;if(t.__deck)return t.__deck;var o,i=null==n?void 0:n.props._customRender,a={useDevicePixels:!0,_customRender:function(){t.triggerRepaint(),null==i||i("")},parameters:{depthMask:!0,depthTest:!0,blend:!0,blendFunc:[770,771,1,771],polygonOffsetFill:!0,depthFunc:515,blendEquation:32774},views:n&&n.props.views||[new l.MapView({id:"mapbox"})]};return n&&n.props.gl!==r||(Object.assign(a,{gl:r,width:null,height:null,touchAction:"unset",viewState:j(t)}),t.on("move",(function(){return function(e,t){e.setProps({viewState:j(t)}),e.needsRedraw({clearRedrawFlags:!0})}(o,t)}))),n?(o=n,n.setProps(a),n.userData.isExternal=!0):(o=new l.Deck(a),t.on("remove",(function(){o.finalize(),t.__deck=null}))),o.userData.mapboxLayers=new Set,t.__deck=o,t.on("render",(function(){o.isInitialized&&function(e,t){var r=e.userData,n=r.mapboxLayers;if(r.isExternal){var o=Array.from(n,(function(e){return e.id})),i=Object(l._flatten)(e.props.layers,Boolean).some((function(e){return e&&!o.includes(e.id)})),a=e.getViewports(),s=a.findIndex((function(e){return"mapbox"===e.id})),u=a.length>1||s<0;(i||u)&&(s>=0&&((a=a.slice())[s]=M(e,t,!1)),e._drawLayers("mapbox-repaint",{viewports:a,layerFilter:function(t){return(!e.props.layerFilter||e.props.layerFilter(t))&&("mapbox"!==t.viewport.id||!o.includes(t.layer.id))},clearCanvas:!1}))}e.userData.currentViewport=null}(o,t)})),o}function j(e){var t,r=e.getCenter(),n={longitude:(r.lng+540)%360-180,latitude:r.lat,zoom:e.getZoom(),bearing:e.getBearing(),pitch:e.getPitch(),padding:e.getPadding(),repeat:e.getRenderWorldCopies()};return null!==(t=e.getTerrain)&&void 0!==t&&t.call(e)&&function(e,t){if(e.getFreeCameraOptions){var r=e.getFreeCameraOptions().position;if(!r||void 0===r.z)return;var n=e.transform.height,o=t.longitude,i=t.latitude,a=t.pitch,s=512*r.x,u=512*(1-r.y),l=512*r.z,c=m([o,i]),p=s-c[0],f=u-c[1],d=Math.sqrt(p*p+f*f),v=a*O,h=1.5*n,y=h*Math.sin(v)/d;t.zoom=Math.log2(y);var b=h*Math.cos(v)/y,_=l-b;t.position=[0,0,_/g(i)]}else"number"==typeof e.transform.elevation&&(t.position=[0,0,e.transform.elevation])}(e,n),n}function M(e,t){var r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return new l.WebMercatorViewport(k(k({id:"mapbox",x:0,y:0,width:e.width,height:e.height},j(t)),{},{nearZMultiplier:r?.02:.1}))}function P(e){if(!e.userData.isExternal){var t=[];e.userData.mapboxLayers.forEach((function(e){var r=new(0,e.props.type)(e.props);t.push(r)})),e.setProps({layers:t})}}var S=function(){function e(t){if(o()(this,e),u()(this,"id",void 0),u()(this,"type",void 0),u()(this,"renderingMode",void 0),u()(this,"map",void 0),u()(this,"deck",void 0),u()(this,"props",void 0),!t.id)throw new Error("Layer must have an unique id");this.id=t.id,this.type="custom",this.renderingMode=t.renderingMode||"3d",this.map=null,this.deck=null,this.props=t}return a()(e,[{key:"onAdd",value:function(e,t){var r,n;this.map=e,this.deck=w({map:e,gl:t,deck:this.props.deck}),r=this.deck,n=this,r.userData.mapboxLayers.add(n),P(r)}},{key:"onRemove",value:function(){var e,t;this.deck&&(e=this.deck,t=this,e.userData.mapboxLayers.delete(t),P(e))}},{key:"setProps",value:function(e){Object.assign(this.props,e,{id:this.id}),this.deck&&P(this.deck)}},{key:"render",value:function(){var e,t,r,n,o;e=this.deck,t=this.map,r=this,n=e.userData.currentViewport,o=!1,n||(n=M(e,t,!0),e.userData.currentViewport=n,o=!0),e.isInitialized&&e._drawLayers("mapbox-repaint",{viewports:[n],layerFilter:function(e){var t=e.layer;return r.id===t.id},clearStack:o,clearCanvas:!1})}}]),e}(),E=r(11),D=r.n(E);function A(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return I(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return I(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}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 i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}function I(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function C(e,t,r,n){if(e&&t&&e.style&&e.style._loaded){var o=Object(l._flatten)(n,Boolean);if(r!==n){var i,a=Object(l._flatten)(r,Boolean),s=new Set(a.map((function(e){return e.id}))),u=A(o);try{for(u.s();!(i=u.n()).done;){var c=i.value;s.delete(c.id)}}catch(e){u.e(e)}finally{u.f()}var p,f=A(s);try{for(f.s();!(p=f.n()).done;){var d=p.value;e.getLayer(d)&&e.removeLayer(d)}}catch(e){f.e(e)}finally{f.f()}}var v,h=A(o);try{for(h.s();!(v=h.n()).done;){var y=v.value,b=e.getLayer(y.id);b?b.implementation.setProps(y.props):e.addLayer(new S({id:y.id,deck:t}),y.props.beforeId)}}catch(e){h.e(e)}finally{h.f()}var _,m=e.style._order,g={},x=A(o);try{for(x.s();!(_=x.n()).done;){var k=_.value,O=k.props.beforeId;O&&m.includes(O)||(O="__UNDEFINED__"),g[O]=g[O]||[],g[O].push(k.id)}}catch(e){x.e(e)}finally{x.f()}for(var w in g)for(var j=g[w],M="__UNDEFINED__"===w?m.length:m.indexOf(w),P="__UNDEFINED__"===w?void 0:w,E=j.length-1;E>=0;E--){var D=j[E],I=m.indexOf(D);I!==M-1&&(e.moveLayer(D,P),I>M&&M++),M--,P=D}}}var F=["interleaved"];function z(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function L(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?z(Object(r),!0).forEach((function(t){u()(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):z(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}var R=function(){function e(t){var r=this;o()(this,e),u()(this,"_props",void 0),u()(this,"_deck",void 0),u()(this,"_map",void 0),u()(this,"_container",void 0),u()(this,"_interleaved",void 0),u()(this,"_handleStyleChange",(function(){C(r._map,r._deck,r._props.layers,r._props.layers)})),u()(this,"_updateContainerSize",(function(){if(r._map&&r._container){var e=r._map.getContainer(),t=e.clientWidth,n=e.clientHeight;Object.assign(r._container.style,{width:"".concat(t,"px"),height:"".concat(n,"px")})}})),u()(this,"_updateViewState",(function(){var e=r._deck;e&&(e.setProps({viewState:j(r._map)}),e.redraw())})),u()(this,"_handleMouseEvent",(function(e){var t=r._deck;if(t){var n={type:e.type,offsetCenter:e.point,srcEvent:e};switch(e.type){case"click":n.tapCount=1,t._onPointerDown(n),t._onEvent(n);break;case"dblclick":n.type="click",n.tapCount=2,t._onEvent(n);break;case"mousemove":n.type="pointermove",t._onPointerMove(n);break;case"mouseout":n.type="pointerleave",t._onPointerMove(n);break;default:return}}}));var n=t.interleaved,i=void 0!==n&&n,a=D()(t,F);this._interleaved=i,this._props=a}return a()(e,[{key:"setProps",value:function(e){this._interleaved&&e.layers&&C(this._map,this._deck,this._props.layers,e.layers),Object.assign(this._props,e),this._deck&&this._deck.setProps(this._props)}},{key:"onAdd",value:function(e){return this._map=e,this._interleaved?this._onAddInterleaved(e):this._onAddOverlaid(e)}},{key:"_onAddOverlaid",value:function(e){var t=document.createElement("div");return Object.assign(t.style,{position:"absolute",left:0,top:0,pointerEvents:"none"}),this._container=t,this._deck=new l.Deck(L(L({},this._props),{},{parent:t,viewState:j(e)})),e.on("resize",this._updateContainerSize),e.on("render",this._updateViewState),e.on("mousemove",this._handleMouseEvent),e.on("mouseout",this._handleMouseEvent),e.on("click",this._handleMouseEvent),e.on("dblclick",this._handleMouseEvent),this._updateContainerSize(),t}},{key:"_onAddInterleaved",value:function(e){return this._deck=new l.Deck(L(L({},this._props),{},{gl:e.painter.context.gl})),e.on("styledata",this._handleStyleChange),C(e,this._deck,[],this._props.layers),document.createElement("div")}},{key:"onRemove",value:function(){var e,t=this._map;t&&(this._interleaved?this._onRemoveInterleaved(t):this._onRemoveOverlaid(t)),null===(e=this._deck)||void 0===e||e.finalize(),this._deck=void 0,this._map=void 0,this._container=void 0}},{key:"_onRemoveOverlaid",value:function(e){e.off("resize",this._updateContainerSize),e.off("render",this._updateViewState),e.off("mousemove",this._handleMouseEvent),e.off("mouseout",this._handleMouseEvent),e.off("click",this._handleMouseEvent),e.off("dblclick",this._handleMouseEvent)}},{key:"_onRemoveInterleaved",value:function(e){e.off("styledata",this._handleStyleChange),C(e,this._deck,this._props.layers,[])}},{key:"getDefaultPosition",value:function(){return"top-left"}},{key:"pickObject",value:function(e){return Object(l.assert)(this._deck),this._deck.pickObject(e)}},{key:"pickMultipleObjects",value:function(e){return Object(l.assert)(this._deck),this._deck.pickMultipleObjects(e)}},{key:"pickObjects",value:function(e){return Object(l.assert)(this._deck),this._deck.pickObjects(e)}},{key:"finalize",value:function(){this._map&&this._map.removeControl(this)}}]),e}();r.d(t,"MapboxLayer",(function(){return S})),r.d(t,"MapboxOverlay",(function(){return R}))}])}));
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@deck.gl/mapbox",
3
3
  "description": "Use deck.gl layers as custom mapbox-gl-js layers",
4
4
  "license": "MIT",
5
- "version": "8.8.11",
5
+ "version": "8.9.0-alpha.3",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -35,5 +35,5 @@
35
35
  "peerDependencies": {
36
36
  "@deck.gl/core": "^8.0.0"
37
37
  },
38
- "gitHead": "f70e8c354aee34949134f9e802f59cf60db4de19"
38
+ "gitHead": "1a42362a310b39b5b26d46354d388e2319a90af3"
39
39
  }