@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.
- package/dist/components/Map.d.ts +36 -0
- package/dist/components/Map.js +24 -2
- package/dist/components/Map.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/layers/index.d.ts +2 -1
- package/dist/layers/index.js +1 -1
- package/dist/layers/index.js.map +1 -1
- package/dist/layers/wells/layers/dashedSectionsPathLayer.js +8 -6
- package/dist/layers/wells/layers/dashedSectionsPathLayer.js.map +1 -1
- package/dist/layers/wells/utils/log.d.ts +3 -2
- package/dist/layers/wells/utils/log.js +7 -7
- package/dist/layers/wells/utils/log.js.map +1 -1
- package/dist/layers/wells/utils/trajectory.d.ts +45 -6
- package/dist/layers/wells/utils/trajectory.js +115 -103
- package/dist/layers/wells/utils/trajectory.js.map +1 -1
- package/dist/layers/wells/wellsLayer.d.ts +1 -1
- package/dist/layers/wells/wellsLayer.js +94 -74
- package/dist/layers/wells/wellsLayer.js.map +1 -1
- package/dist/utils/measurement.js +27 -8
- package/dist/utils/measurement.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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 {
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
575
|
-
|
|
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 (
|
|
584
|
-
|
|
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 (
|
|
594
|
-
const
|
|
595
|
-
|
|
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
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
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:
|
|
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 {
|