@webviz/subsurface-viewer
Version:
3D visualization component for subsurface reservoir data
35 lines • 1.4 kB
JavaScript
import { cloneDeep, zip } from "lodash";
import { distance } from "mathjs";
function computeUnfoldedPath(worldCoordinates) {
const z = worldCoordinates.map((v) => v[2]);
const delta = worldCoordinates.map((v, i, coordinates) => {
const prev = coordinates[i - 1] || v;
return distance([prev[0], prev[1]], [v[0], v[1]]);
});
const a = [];
delta.forEach((d) => {
const prev = a.at(-1) || 0;
a.push(d + prev);
});
const vAbscissa = zip(a, z, [...a].fill(0));
return vAbscissa;
}
/** Projects well trajectories unfolded onto an XY plane. */
export function abscissaTransform(featureCollection) {
const featureCollectionCopy = cloneDeep(featureCollection);
for (const feature of featureCollectionCopy.features) {
const geometryCollection = feature.geometry;
for (const geometry of geometryCollection.geometries) {
if ("LineString" === geometry.type) {
const transformedCoordinates = computeUnfoldedPath(geometry.coordinates);
geometry.coordinates = transformedCoordinates;
}
else if ("Point" === geometry.type) {
const coordinates = geometry.coordinates;
geometry.coordinates = [0, coordinates[2], 0];
}
}
}
return featureCollectionCopy;
}
//# sourceMappingURL=abscissaTransform.js.map