@webviz/subsurface-viewer 2.1.2 → 2.2.0

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.
@@ -9,16 +9,19 @@ import type { ColorAccessor, WellFeature } from "../types";
9
9
  */
10
10
  export declare function getLineStringGeometry(well_object: WellFeature): LineString | undefined;
11
11
  export declare function getColor(accessor: ColorAccessor): Color | ((object: WellFeature, objectInfo?: AccessorContext<WellFeature>) => Color | undefined);
12
+ /**
13
+ * Checks if the color settings defined for a trajectory hides it
14
+ * @param well_object A well feature object
15
+ * @param color_accessor A value accessor
16
+ * @returns `true` if the well's color setting makes it transparent, otherwise `false
17
+ */
18
+ export declare function isTrajectoryTransparent(well_object: WellFeature, color_accessor: ColorAccessor): boolean;
12
19
  /**
13
20
  * Get trajectory data from LineString Geometry if it's visible (checking
14
21
  * trajectory visibility based on line color)
15
22
  */
16
23
  export declare function getTrajectory(well_object: WellFeature, color_accessor: ColorAccessor): Position[] | undefined;
17
24
  export declare function getMdsInRange(mdArray: number[], mdStart: number, mdEnd: number): number[];
18
- export declare function interpolateDataOnTrajectory(coord: Position, data: number[], trajectory: Position[]): number | null;
19
- export declare function getMd(coord: Position, feature: WellFeature, accessor: ColorAccessor): number | null;
20
- export declare function getTvd(coord: Position, feature: WellFeature, accessor: ColorAccessor): number | null;
21
- export declare function getSegmentIndex(coord: Position, path: Position[]): number;
22
25
  /**
23
26
  * Gets the lower and upper path-indices for the path-segment that contains a specific fractional point along the path. fraction-positions that are very close to either end (by 0.001 units) will be rounded of.
24
27
  * @param fractionPosition A fractional position along the track (0-1);
@@ -61,10 +64,46 @@ export declare function getAziAndInclForSegment(segmentStartPos: Position, segme
61
64
  azimuth: number;
62
65
  inclination: number;
63
66
  };
67
+ /**
68
+ * Finds the segment of a trajectory that is closest to a given world position.
69
+ * @param coord A world position
70
+ * @param trajectory_path A list of positions that describes the trajectory
71
+ * @param scaleFactor Applies a scaling along axis when picking the "closest" point. For example, a layer applying vertical scaling can use this prop to match the computation what is visually shown to the user
72
+ * @returns A tuple consisting of the lower and upper segment indices
73
+ */
74
+ export declare function getSegmentIndicesForCoord(coord: Position, trajectory_path: Position[], scaleFactor?: ScaleFactor): [startIndex: number, endIndex: number];
75
+ /**
76
+ * Computes the fractional position along a segment that is closest to a given world position.
77
+ * @param coord A world position
78
+ * @param segmentStart The world position where the segment starts
79
+ * @param segmentEnd The world position where the segment endS
80
+ * @param scaleFactor Applies a scaling along axis when picking the "closest" point. For example, a layer applying vertical scaling can use this prop to match the computation what is visually shown to the user
81
+ * @returns A number between 0 and 1 that describes the fractional position along the segment, where 0 is the start of the segment and 1 is the end of the segment
82
+ */
83
+ export declare function getFractionAlongSegmentForCoord(coord: Position, segmentStart: Position, segmentEnd: Position, scaleFactor?: ScaleFactor): number;
64
84
  /**
65
85
  * Locates the segment of a trajectory that contains a given MD.
66
86
  * @param trajectory_md The measured depth array for a well trajectory. Expected to be sorted and without duplicates.
67
87
  * @param md The target md
68
- * @returns A tuple containing the lower and upper segment indices, as well as the fractional position along the segment (0-1, with 0 being the beginning of the segment)
88
+ * @returns A tuple containing the lower and upper segment indices */
89
+ export declare function getSegmentIndicesForMd(trajectory_md: number[], md: number): [start: number, end: number];
90
+ /** Describes scaling to be applied along each axis */
91
+ export type ScaleFactor = {
92
+ x?: number;
93
+ y?: number;
94
+ z?: number;
95
+ };
96
+ /**
97
+ * Scales a 2D or 3D point by a given scale factor.
98
+ * @param point a 2D or 3D point
99
+ * @param scaleFactor The scaling factor to apply in each dimension. Non-specified dimensions will default to 1 (no scaling)
100
+ * @returns A new point that is scaled according to the scaleFactor.
101
+ */
102
+ export declare function scaledPosition(point: Position, scaleFactor?: ScaleFactor): Position;
103
+ /**
104
+ * Reverts a 2D or 3D point that has been scaled by a given scale factor back to the original value.
105
+ * @param point a 2D or 3D point
106
+ * @param scaleFactor The scaling factor to revert in each dimension. Non-specified dimensions will default to 1 (no scaling). A Scale of 0 is not allowed, and will default to 1
107
+ * @returns A new point that is un-scaled according to the scaleFactor.
69
108
  */
70
- export declare function getSegmentIndicesForMd(trajectory_md: number[], md: number): [start: number, end: number, lengthAlong: number];
109
+ export declare function unScaledPosition(point: Position, scaleFactor?: ScaleFactor): Position;
@@ -1,8 +1,7 @@
1
1
  import _ from "lodash";
2
2
  import { Vector2, Vector3 } from "math.gl";
3
3
  import { distance, dot, subtract } from "mathjs";
4
- import { distToSegmentSquared, isClose, isPointAwayFromLineEnd, } from "../../../utils/measurement";
5
- import { getWellHeadPosition } from "./features";
4
+ import { distToSegmentSquared, isClose } from "../../../utils/measurement";
6
5
  /**
7
6
  * Finds the nested geometry object that describes a well's trajectory
8
7
  * @param well_object A GeoJSON Well Feature
@@ -30,9 +29,12 @@ export function getColor(accessor) {
30
29
  };
31
30
  }
32
31
  /**
33
- * Get trajectory transparency based on alpha of trajectory color
32
+ * Checks if the color settings defined for a trajectory hides it
33
+ * @param well_object A well feature object
34
+ * @param color_accessor A value accessor
35
+ * @returns `true` if the well's color setting makes it transparent, otherwise `false
34
36
  */
35
- function isTrajectoryTransparent(well_object, color_accessor) {
37
+ export function isTrajectoryTransparent(well_object, color_accessor) {
36
38
  let alpha;
37
39
  const accessor = getColor(color_accessor);
38
40
  if (typeof accessor === "function") {
@@ -70,99 +72,6 @@ mdStart, mdEnd) {
70
72
  mdSection.push(mdEnd);
71
73
  return mdSection;
72
74
  }
73
- // Interpolates point closest to the coords on trajectory
74
- export function interpolateDataOnTrajectory(coord, data, trajectory) {
75
- // if number of data points in less than 1 or
76
- // length of data and trajectory are different we cannot interpolate.
77
- if (data.length <= 1 || data.length != trajectory.length)
78
- return null;
79
- // Identify closest well path leg to coord.
80
- const segment_index = getSegmentIndex(coord, trajectory);
81
- const index0 = segment_index;
82
- const index1 = index0 + 1;
83
- // Get the nearest data.
84
- const data0 = data[index0];
85
- const data1 = data[index1];
86
- // Get the nearest survey points.
87
- const survey0 = trajectory[index0];
88
- const survey1 = trajectory[index1];
89
- // To avoid interpolating longer than the actual wellbore path we ignore the coordinate if it's moved beyond the last line
90
- if (index1 === trajectory.length - 1 &&
91
- isPointAwayFromLineEnd(coord, [survey0, survey1])) {
92
- coord = survey1;
93
- }
94
- if (index0 === 0 && isPointAwayFromLineEnd(coord, [survey1, survey0])) {
95
- coord = survey0;
96
- }
97
- const dv = distance(survey0, survey1);
98
- if (dv === 0) {
99
- return null;
100
- }
101
- // Calculate the scalar projection onto segment.
102
- const v0 = subtract(coord, survey0);
103
- const v1 = subtract(survey1, survey0);
104
- // scalar_projection in interval [0,1]
105
- const scalar_projection = dot(v0, v1) / (dv * dv);
106
- // Interpolate data.
107
- return data0 * (1.0 - scalar_projection) + data1 * scalar_projection;
108
- }
109
- export function getMd(coord, feature, accessor) {
110
- if (!feature.properties?.["md"]?.[0] || !feature.geometry)
111
- return null;
112
- const measured_depths = feature.properties.md[0];
113
- const trajectory3D = getTrajectory(feature, accessor);
114
- if (trajectory3D == undefined)
115
- return null;
116
- let trajectory;
117
- // In 2D view coord is of type Point2D and in 3D view it is Point3D,
118
- // so use appropriate trajectory for interpolation
119
- if (coord.length == 2) {
120
- const trajectory2D = trajectory3D.map((v) => {
121
- return v.slice(0, 2);
122
- });
123
- trajectory = trajectory2D;
124
- }
125
- else {
126
- trajectory = trajectory3D;
127
- }
128
- return interpolateDataOnTrajectory(coord, measured_depths, trajectory);
129
- }
130
- export function getTvd(coord, feature, accessor) {
131
- const trajectory3D = getTrajectory(feature, accessor);
132
- // if trajectory is not found or if it has a data single point then get tvd from well head
133
- if (trajectory3D == undefined || trajectory3D?.length <= 1) {
134
- const wellhead_xyz = getWellHeadPosition(feature);
135
- return wellhead_xyz?.[2] ?? null;
136
- }
137
- let trajectory;
138
- // For 2D view coord is Point2D and for 3D view it is Point3D
139
- if (coord.length == 2) {
140
- const trajectory2D = trajectory3D?.map((v) => {
141
- return v.slice(0, 2);
142
- });
143
- trajectory = trajectory2D;
144
- }
145
- else {
146
- trajectory = trajectory3D;
147
- }
148
- const tvds = trajectory3D.map((v) => {
149
- return v[2];
150
- });
151
- // TVD goes downwards, so it's reversed
152
- return interpolateDataOnTrajectory(coord, tvds, trajectory);
153
- } // Identify closest path leg to coord.
154
- export function getSegmentIndex(coord, path) {
155
- let min_d = Number.MAX_VALUE;
156
- let segment_index = 0;
157
- for (let i = 0; i < path?.length - 1; i++) {
158
- const d = distToSegmentSquared(path[i], path[i + 1], coord);
159
- if (d > min_d)
160
- continue;
161
- segment_index = i;
162
- min_d = d;
163
- }
164
- return segment_index;
165
- }
166
75
  /**
167
76
  * Gets the lower and upper path-indices for the path-segment that contains a specific fractional point along the path. fraction-positions that are very close to either end (by 0.001 units) will be rounded of.
168
77
  * @param fractionPosition A fractional position along the track (0-1);
@@ -345,12 +254,60 @@ export function getAziAndInclForSegment(segmentStartPos, segmentEndPos) {
345
254
  const inclination = Math.acos(vector[2]) * (180 / Math.PI);
346
255
  return { azimuth, inclination };
347
256
  }
257
+ /**
258
+ * Finds the segment of a trajectory that is closest to a given world position.
259
+ * @param coord A world position
260
+ * @param trajectory_path A list of positions that describes the trajectory
261
+ * @param scaleFactor Applies a scaling along axis when picking the "closest" point. For example, a layer applying vertical scaling can use this prop to match the computation what is visually shown to the user
262
+ * @returns A tuple consisting of the lower and upper segment indices
263
+ */
264
+ export function getSegmentIndicesForCoord(coord, trajectory_path, scaleFactor) {
265
+ if (trajectory_path.length < 2) {
266
+ throw new Error("Expected trajectory to have at least 2 points");
267
+ }
268
+ const dimension = coord.length === 2 ? "2D" : "3D";
269
+ const scaledCoord = fixupPoint(coord, scaleFactor, dimension);
270
+ let minSegDistance = Number.POSITIVE_INFINITY;
271
+ let minSegStart = -1;
272
+ let minSegEnd = -1;
273
+ for (let i = 0; i < trajectory_path.length - 1; i++) {
274
+ const segmentStart = fixupPoint(trajectory_path[i], scaleFactor, dimension);
275
+ const segmentEnd = fixupPoint(trajectory_path[i + 1], scaleFactor, dimension);
276
+ const distance = distToSegmentSquared(segmentStart, segmentEnd, scaledCoord);
277
+ if (distance < minSegDistance) {
278
+ minSegDistance = distance;
279
+ minSegStart = i;
280
+ minSegEnd = i + 1;
281
+ }
282
+ }
283
+ return [minSegStart, minSegEnd];
284
+ }
285
+ /**
286
+ * Computes the fractional position along a segment that is closest to a given world position.
287
+ * @param coord A world position
288
+ * @param segmentStart The world position where the segment starts
289
+ * @param segmentEnd The world position where the segment endS
290
+ * @param scaleFactor Applies a scaling along axis when picking the "closest" point. For example, a layer applying vertical scaling can use this prop to match the computation what is visually shown to the user
291
+ * @returns A number between 0 and 1 that describes the fractional position along the segment, where 0 is the start of the segment and 1 is the end of the segment
292
+ */
293
+ export function getFractionAlongSegmentForCoord(coord, segmentStart, segmentEnd, scaleFactor) {
294
+ const dimension = coord.length === 2 ? "2D" : "3D";
295
+ const scaledCoord = fixupPoint(coord, scaleFactor, dimension);
296
+ const scaledStart = fixupPoint(segmentStart, scaleFactor, dimension);
297
+ const scaledEnd = fixupPoint(segmentEnd, scaleFactor, dimension);
298
+ const lineLength = distance(scaledStart, scaledEnd);
299
+ if (lineLength === 0)
300
+ return 0;
301
+ const vCoord = subtract(scaledCoord, scaledStart);
302
+ const vLine = subtract(scaledEnd, scaledStart);
303
+ const scalar_projection = dot(vCoord, vLine) / (lineLength * lineLength);
304
+ return _.clamp(scalar_projection, 0, 1);
305
+ }
348
306
  /**
349
307
  * Locates the segment of a trajectory that contains a given MD.
350
308
  * @param trajectory_md The measured depth array for a well trajectory. Expected to be sorted and without duplicates.
351
309
  * @param md The target md
352
- * @returns A tuple containing the lower and upper segment indices, as well as the fractional position along the segment (0-1, with 0 being the beginning of the segment)
353
- */
310
+ * @returns A tuple containing the lower and upper segment indices */
354
311
  export function getSegmentIndicesForMd(trajectory_md, md) {
355
312
  if (trajectory_md.length < 2) {
356
313
  throw new Error("Expected trajectory to have at least 2 points");
@@ -361,13 +318,68 @@ export function getSegmentIndicesForMd(trajectory_md, md) {
361
318
  throw new Error(`MD ${md} is outside of trajectory range ${[mdMin, mdMax].toString()}`);
362
319
  }
363
320
  if (md === mdMin) {
364
- return [0, 1, 0];
321
+ return [0, 1];
365
322
  }
366
323
  // We assume the trajectory is sorted, and without duplicates, so lower and upper is guaranteed to be different
367
324
  const upperIndex = _.sortedIndex(trajectory_md, md);
368
325
  const lowerIndex = upperIndex - 1;
369
- const fraction = (md - trajectory_md[lowerIndex]) /
370
- (trajectory_md[upperIndex] - trajectory_md[lowerIndex]);
371
- return [lowerIndex, upperIndex, fraction];
326
+ return [lowerIndex, upperIndex];
327
+ }
328
+ /**
329
+ * Scales a 2D or 3D point by a given scale factor.
330
+ * @param point a 2D or 3D point
331
+ * @param scaleFactor The scaling factor to apply in each dimension. Non-specified dimensions will default to 1 (no scaling)
332
+ * @returns A new point that is scaled according to the scaleFactor.
333
+ */
334
+ export function scaledPosition(point, scaleFactor = {}) {
335
+ if (point.length === 2) {
336
+ return [
337
+ point[0] * (scaleFactor.x ?? 1),
338
+ point[1] * (scaleFactor.y ?? 1),
339
+ ];
340
+ }
341
+ else {
342
+ return [
343
+ point[0] * (scaleFactor.x ?? 1),
344
+ point[1] * (scaleFactor.y ?? 1),
345
+ point[2] * (scaleFactor.z ?? 1),
346
+ ];
347
+ }
348
+ }
349
+ /**
350
+ * Reverts a 2D or 3D point that has been scaled by a given scale factor back to the original value.
351
+ * @param point a 2D or 3D point
352
+ * @param scaleFactor The scaling factor to revert in each dimension. Non-specified dimensions will default to 1 (no scaling). A Scale of 0 is not allowed, and will default to 1
353
+ * @returns A new point that is un-scaled according to the scaleFactor.
354
+ */
355
+ export function unScaledPosition(point, scaleFactor = {}) {
356
+ if (point.length === 2) {
357
+ return [
358
+ scaleFactor.x === 0 ? point[0] : point[0] / (scaleFactor.x ?? 1),
359
+ scaleFactor.y === 0 ? point[1] : point[1] / (scaleFactor.y ?? 1),
360
+ ];
361
+ }
362
+ else {
363
+ return [
364
+ scaleFactor.x === 0 ? point[0] : point[0] / (scaleFactor.x ?? 1),
365
+ scaleFactor.y === 0 ? point[1] : point[1] / (scaleFactor.y ?? 1),
366
+ scaleFactor.z === 0 ? point[2] : point[2] / (scaleFactor.z ?? 1),
367
+ ];
368
+ }
369
+ }
370
+ function fixDimension(point, dimension, defaultZ = 0) {
371
+ if (dimension === "2D" && point.length === 3)
372
+ return point.slice(0, 2);
373
+ if (dimension === "3D" && point.length === 2) {
374
+ console.warn(`:: Converting 2D point to 3D, using z=${defaultZ}`);
375
+ return [...point, defaultZ];
376
+ }
377
+ return point;
378
+ }
379
+ function fixupPoint(point, scaleFactor, dimension) {
380
+ const scaledPoint = scaledPosition(point, scaleFactor);
381
+ if (!dimension)
382
+ return scaledPoint;
383
+ return fixDimension(scaledPoint, dimension);
372
384
  }
373
385
  //# sourceMappingURL=trajectory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../../../src/layers/wells/utils/trajectory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../../../src/layers/wells/utils/trajectory.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,9 @@ import type { Accessor, Color, Layer, LayersList, PickingInfo, UpdateParameters
2
2
  import { CompositeLayer } from "@deck.gl/core";
3
3
  import type { BinaryFeatureCollection } from "@loaders.gl/schema";
4
4
  import type { Feature } from "geojson";
5
+ import type { ContinuousLegendDataType, DiscreteLegendDataType } from "../../components/ColorLegend";
5
6
  import type { ColormapFunctionType } from "../utils/colormapTools";
6
7
  import type { ExtendedLayerProps, ReportBoundingBoxAction } from "../utils/layerTools";
7
- import type { ContinuousLegendDataType, DiscreteLegendDataType } from "../../components/ColorLegend";
8
8
  import type { FlatWellMarkersLayerProps } from "./layers/flatWellMarkersLayer";
9
9
  import type { WellLabelLayerProps } from "./layers/wellLabelLayer";
10
10
  import { WellLabelLayer } from "./layers/wellLabelLayer";
@@ -3,20 +3,21 @@ import { CompositeLayer } from "@deck.gl/core";
3
3
  import { DataFilterExtension, PathStyleExtension } from "@deck.gl/extensions";
4
4
  import { GeoJsonLayer, PathLayer } from "@deck.gl/layers";
5
5
  import { GL } from "@luma.gl/constants";
6
- import { createPropertyData, getFromAccessor, getLayersById, isDrawingEnabled, } from "../utils/layerTools";
6
+ import { interpolateNumber } from "d3-interpolate";
7
7
  import { scaleArray } from "../../utils/arrays";
8
8
  import { isClose } from "../../utils/measurement";
9
9
  import { SectionViewport } from "../../viewports";
10
+ import { createPropertyData, getFromAccessor, getLayersById, isDrawingEnabled, } from "../utils/layerTools";
10
11
  import { DashedSectionsPathLayer } from "./layers/dashedSectionsPathLayer";
11
- import { LogCurveLayer } from "./layers/logCurveLayer";
12
12
  import { FlatWellMarkersLayer } from "./layers/flatWellMarkersLayer";
13
+ import { LogCurveLayer } from "./layers/logCurveLayer";
13
14
  import { WellLabelLayer } from "./layers/wellLabelLayer";
14
15
  import { abscissaTransform } from "./utils/abscissaTransform";
15
16
  import { DEFAULT_LINE_WIDTH, getSize, LINE, POINT } from "./utils/features";
16
17
  import { getLegendData, getLogProperty } from "./utils/log";
17
18
  import { createPerforationReadout, createScreenReadout } from "./utils/readout";
18
19
  import { checkWells, coarsenWells, GetBoundingBox, invertPath, splineRefine, } from "./utils/spline";
19
- import { getColor, getMd, getTrajectory, getTvd, injectMdPoints, } from "./utils/trajectory";
20
+ import { getColor, getFractionAlongSegmentForCoord, getSegmentIndicesForCoord, getTrajectory, injectMdPoints, isTrajectoryTransparent, unScaledPosition, } from "./utils/trajectory";
20
21
  import { getWellMds, getWellObjectByName, getWellObjectsByName, } from "./utils/wells";
21
22
  const DEFAULT_DASH = [5, 5];
22
23
  const DEFAULT_SCREEN_DASH = [5, 5];
@@ -569,65 +570,106 @@ export default class WellsLayer extends CompositeLayer {
569
570
  return { ...info, ...noLog };
570
571
  }
571
572
  const features = this.getWellDataState()?.features ?? [];
572
- let coordinate = info.coordinate || [0, 0, 0];
573
+ const sourceId = info.sourceLayer.id;
574
+ // Create readouts for any data found
575
+ const accessorCtx = {
576
+ data: this.state.data,
577
+ index: info.index,
578
+ target: [],
579
+ };
573
580
  const zScale = this.props.modelMatrix ? this.props.modelMatrix[10] : 1;
574
- if (coordinate[2] !== undefined) {
575
- coordinate[2] /= Math.max(0.001, zScale);
581
+ const scaleFactor = { z: zScale };
582
+ // When scaling is applied, the picking coordinate will no longer match world-space coordinates
583
+ // Unscale so we're dealing with world-space coords
584
+ let coordinate = unScaledPosition(info.coordinate ?? [0, 0, 0], scaleFactor);
585
+ // --- Sub-layer pick data
586
+ let wellFeature = null;
587
+ let screen = null;
588
+ let marker = null;
589
+ let wellLog = null;
590
+ // When hovering the well head, we don't want to also read trajectory info
591
+ let readWellHeadOnly = false;
592
+ if (sourceId === this.getSubLayerId(SubLayerId.SCREEN_TRAJECTORY)) {
593
+ const screenInfo = info;
594
+ wellFeature = screenInfo.object;
595
+ const screenIndex = screenInfo.dashedSectionIndex ?? -1;
596
+ if (screenIndex !== -1) {
597
+ screen =
598
+ wellFeature.properties?.screens?.at(screenIndex) ?? null;
599
+ }
600
+ }
601
+ if (sourceId === this.getSubLayerId(SubLayerId.MARKERS)) {
602
+ const markerInfo = info;
603
+ wellFeature = markerInfo.object.sourceObject;
604
+ marker = markerInfo.object;
605
+ // Re-compute index and color to make autoHighlight apply to the *trajectory*, instead of the individual marker
606
+ const screenLayer =
607
+ // One of these two are guaranteed to exist
608
+ this.getSubLayerById(SubLayerId.COLORS) ||
609
+ this.getSubLayerById(SubLayerId.SCREEN_TRAJECTORY);
610
+ const newPickColor = screenLayer.encodePickingColor(marker.sourceIndex);
611
+ info.index = marker.sourceIndex;
612
+ info.color = new Uint8Array(newPickColor);
613
+ accessorCtx.index = marker.sourceIndex;
614
+ if (marker.type === "perforation") {
615
+ // When hovering a perforation, we'll lock to it's position, so related data (MD and TVD) stays with it
616
+ coordinate = marker.position;
617
+ }
618
+ }
619
+ if (info.sourceLayer?.id === this.getSubLayerId(SubLayerId.COLORS)) {
620
+ const wellpickInfo = info;
621
+ wellFeature = wellpickInfo.object;
622
+ readWellHeadOnly = wellpickInfo.featureType === "points";
623
+ }
624
+ if (info.sourceLayer?.id === this.getSubLayerId(SubLayerId.LOG_CURVE)) {
625
+ const logLayerInfo = info;
626
+ wellLog = logLayerInfo.object ?? null;
627
+ if (wellLog && !wellFeature) {
628
+ wellFeature =
629
+ features.find((f) => f.properties.name === wellLog.header.well) ?? null;
630
+ }
631
+ }
632
+ // ! Color settings **might** have made well invisible. If so, we wont return any picking info
633
+ if (!wellFeature ||
634
+ isTrajectoryTransparent(wellFeature, this.props.lineStyle?.color)) {
635
+ return { ...info, ...noLog };
576
636
  }
637
+ // Based on what data objects we found above, we'll make these info properties
577
638
  let wellName = undefined;
639
+ let wellColor = undefined;
578
640
  let md_property = null;
579
641
  let tvd_property = null;
580
642
  let log_property = null;
581
643
  let screen_property = null;
582
644
  let perforation_property = null;
583
- if (info.sourceLayer?.id ===
584
- this.getSubLayerId(SubLayerId.SCREEN_TRAJECTORY)) {
585
- const screenIndex = info
586
- .dashedSectionIndex;
587
- const data = info.object;
588
- if (screenIndex !== undefined && screenIndex !== -1) {
589
- const hoveredScreen = data.properties?.screens?.at(screenIndex);
590
- screen_property = createScreenReadout(hoveredScreen, data);
591
- }
645
+ if (screen && wellFeature) {
646
+ screen_property = createScreenReadout(screen, wellFeature);
592
647
  }
593
- if (info.sourceLayer?.id === this.getSubLayerId(SubLayerId.MARKERS)) {
594
- const markerData = info.object;
595
- const wellData = info.object?.sourceObject;
596
- const sourceIndex = markerData.sourceIndex;
597
- // Re-compute index and color to make autohighlight apply to the *trajectory*, instead of the individual marker
598
- info.index = sourceIndex;
599
- info.color = new Uint8Array(this.getSubLayerById(SubLayerId.SCREEN_TRAJECTORY).encodePickingColor(markerData.sourceIndex));
600
- if (markerData.type === "perforation") {
601
- const properties = markerData.properties;
602
- wellName = wellData.properties?.name;
603
- perforation_property = createPerforationReadout(properties, wellData);
604
- // We also include the MD readout here, based on the marker position
605
- coordinate = markerData.position;
606
- if (coordinate[2] !== undefined) {
607
- coordinate[2] /= Math.max(0.001, zScale);
608
- }
609
- md_property = getMdProperty(coordinate, wellData, this.props.lineStyle?.color, "lines");
610
- tvd_property = getTvdProperty(coordinate, wellData, this.props.lineStyle?.color, "lines");
611
- }
648
+ if (wellFeature && marker && marker.type === "perforation") {
649
+ const properties = marker.properties;
650
+ perforation_property = createPerforationReadout(properties, wellFeature);
612
651
  }
613
- // ! This needs to be updated if we ever change the sub-layer id!
614
- if (info.sourceLayer?.id === `${this.props.id}-${SubLayerId.LOG_CURVE}`) {
615
- // The user is hovering a well log entry
616
- const logPick = info;
617
- wellName = logPick.object?.header?.well;
618
- md_property = getLogProperty(coordinate, features, logPick.object, this.props.logrunName, "MD");
619
- tvd_property = getLogProperty(coordinate, features, logPick.object, this.props.logrunName, "TVD");
620
- log_property = getLogProperty(coordinate, features, info.object, this.props.logrunName, this.props.logName);
652
+ if (wellFeature) {
653
+ const lineStyleAccessor = this.props.lineStyle?.color;
654
+ wellName = wellFeature.properties.name;
655
+ wellColor = lineStyleAccessor
656
+ ? getFromAccessor(lineStyleAccessor, wellFeature, accessorCtx)
657
+ : wellFeature.properties.color;
621
658
  }
622
- else if (info.sourceLayer?.id ===
623
- this.getSubLayerProps({ id: SubLayerId.COLORS }).id ||
624
- info.sourceLayer?.id ===
625
- this.getSubLayerProps({ id: SubLayerId.SCREEN_TRAJECTORY }).id) {
626
- // User is hovering a wellbore path
627
- const wellpickInfo = info;
628
- wellName = wellpickInfo.object?.properties?.name;
629
- md_property = getMdProperty(coordinate, wellpickInfo.object, this.props.lineStyle?.color, info.featureType);
630
- tvd_property = getTvdProperty(coordinate, info.object, this.props.lineStyle?.color, info.featureType);
659
+ if (wellLog) {
660
+ log_property = getLogProperty(coordinate, features, info.object, this.props.logrunName, this.props.logName, scaleFactor);
661
+ }
662
+ if (wellFeature && !readWellHeadOnly) {
663
+ const wellTrajectory = getTrajectory(wellFeature, this.props.lineStyle.color);
664
+ if (wellTrajectory) {
665
+ const wellMd = wellFeature.properties.md[0];
666
+ const [segmentStartIdx, segmentEndIdx] = getSegmentIndicesForCoord(coordinate, wellTrajectory, scaleFactor);
667
+ const lengthAlongSegment = getFractionAlongSegmentForCoord(coordinate, wellTrajectory[segmentStartIdx], wellTrajectory[segmentEndIdx], scaleFactor);
668
+ const interpolatedMd = interpolateNumber(wellMd[segmentStartIdx], wellMd[segmentEndIdx])(lengthAlongSegment);
669
+ const interpolatedTvd = interpolateNumber(wellTrajectory[segmentStartIdx][2], wellTrajectory[segmentEndIdx][2])(lengthAlongSegment);
670
+ md_property = createPropertyData("MD " + wellName, interpolatedMd, wellColor);
671
+ tvd_property = createPropertyData("TVD " + wellName, interpolatedTvd, wellColor);
672
+ }
631
673
  }
632
674
  // Patch for inverting tvd readout to fix issue #830,
633
675
  // should make proper fix when handling z increase direction - issue #842
@@ -650,7 +692,7 @@ export default class WellsLayer extends CompositeLayer {
650
692
  ...info,
651
693
  properties: layer_properties,
652
694
  logName: log_property?.name,
653
- wellName: wellName,
695
+ wellName: wellFeature?.properties.name,
654
696
  };
655
697
  }
656
698
  }
@@ -686,28 +728,6 @@ function dataIsReady(layerData) {
686
728
  // Deck.gl always shows prop.data as `[]` while external data is being loaded
687
729
  return !!layerData && !isEmpty(layerData);
688
730
  }
689
- function getMdProperty(coord, feature, accessor, featureType) {
690
- if (featureType === "points") {
691
- return null;
692
- }
693
- const md = getMd(coord, feature, accessor);
694
- if (md != null) {
695
- const prop_name = "MD " + feature.properties?.["name"];
696
- return createPropertyData(prop_name, md, feature.properties?.["color"]);
697
- }
698
- return null;
699
- }
700
- function getTvdProperty(coord, feature, accessor, featureType) {
701
- if (featureType === "points") {
702
- return null;
703
- }
704
- const tvd = getTvd(coord, feature, accessor);
705
- if (tvd != null) {
706
- const prop_name = "TVD " + feature.properties?.["name"];
707
- return createPropertyData(prop_name, tvd, feature.properties?.["color"]);
708
- }
709
- return null;
710
- }
711
731
  // Injects MD points that will be required for cutting trajectories at the correct points
712
732
  function injectMdPointsForFilter(data, mdFilterRange) {
713
733
  return {