@webviz/subsurface-viewer 0.0.1-alpha.1
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/DashSubsurfaceViewer.d.ts +56 -0
- package/dist/DashSubsurfaceViewer.js +160 -0
- package/dist/DashSubsurfaceViewer.js.map +1 -0
- package/dist/SubsurfaceViewer.d.ts +65 -0
- package/dist/SubsurfaceViewer.js +208 -0
- package/dist/SubsurfaceViewer.js.map +1 -0
- package/dist/assets/glTF/north_arrow/scene.bin +0 -0
- package/dist/assets/glTF/north_arrow/scene.gltf +315 -0
- package/dist/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
- package/dist/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
- package/dist/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
- package/dist/components/ColorLegend.d.ts +26 -0
- package/dist/components/ColorLegend.js +19 -0
- package/dist/components/ColorLegend.js.map +1 -0
- package/dist/components/ColorLegends.d.ts +12 -0
- package/dist/components/ColorLegends.js +10 -0
- package/dist/components/ColorLegends.js.map +1 -0
- package/dist/components/DistanceScale.d.ts +12 -0
- package/dist/components/DistanceScale.js +45 -0
- package/dist/components/DistanceScale.js.map +1 -0
- package/dist/components/InfoCard.d.ts +11 -0
- package/dist/components/InfoCard.js +149 -0
- package/dist/components/InfoCard.js.map +1 -0
- package/dist/components/Map.d.ts +158 -0
- package/dist/components/Map.js +867 -0
- package/dist/components/Map.js.map +1 -0
- package/dist/components/StatusIndicator.d.ts +8 -0
- package/dist/components/StatusIndicator.js +20 -0
- package/dist/components/StatusIndicator.js.map +1 -0
- package/dist/components/ViewAnnotation.d.ts +7 -0
- package/dist/components/ViewAnnotation.js +13 -0
- package/dist/components/ViewAnnotation.js.map +1 -0
- package/dist/components/ViewFooter.d.ts +6 -0
- package/dist/components/ViewFooter.js +21 -0
- package/dist/components/ViewFooter.js.map +1 -0
- package/dist/components/settings/DrawModeSelector.d.ts +18 -0
- package/dist/components/settings/DrawModeSelector.js +20 -0
- package/dist/components/settings/DrawModeSelector.js.map +1 -0
- package/dist/components/settings/LayerProperty.d.ts +6 -0
- package/dist/components/settings/LayerProperty.js +39 -0
- package/dist/components/settings/LayerProperty.js.map +1 -0
- package/dist/components/settings/LayerSettingsButton.d.ts +7 -0
- package/dist/components/settings/LayerSettingsButton.js +51 -0
- package/dist/components/settings/LayerSettingsButton.js.map +1 -0
- package/dist/components/settings/LayersButton.d.ts +8 -0
- package/dist/components/settings/LayersButton.js +45 -0
- package/dist/components/settings/LayersButton.js.map +1 -0
- package/dist/components/settings/NumericInput.d.ts +20 -0
- package/dist/components/settings/NumericInput.js +25 -0
- package/dist/components/settings/NumericInput.js.map +1 -0
- package/dist/components/settings/Settings.d.ts +7 -0
- package/dist/components/settings/Settings.js +39 -0
- package/dist/components/settings/Settings.js.map +1 -0
- package/dist/components/settings/SliderInput.d.ts +29 -0
- package/dist/components/settings/SliderInput.js +21 -0
- package/dist/components/settings/SliderInput.js.map +1 -0
- package/dist/components/settings/ToggleButton.d.ts +17 -0
- package/dist/components/settings/ToggleButton.js +19 -0
- package/dist/components/settings/ToggleButton.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/inputSchema/ColorTables.json +51 -0
- package/dist/inputSchema/FaultPolygons.json +80 -0
- package/dist/inputSchema/Grid.json +39 -0
- package/dist/inputSchema/PieChart.json +72 -0
- package/dist/inputSchema/WellLog.json +126 -0
- package/dist/inputSchema/WellLogTemplate.json +136 -0
- package/dist/inputSchema/WellLogs.json +5 -0
- package/dist/inputSchema/Wells.json +106 -0
- package/dist/inputSchema/schemaValidationUtil.d.ts +5 -0
- package/dist/inputSchema/schemaValidationUtil.js +48 -0
- package/dist/inputSchema/schemaValidationUtil.js.map +1 -0
- package/dist/inputSchema/validator.d.ts +1 -0
- package/dist/inputSchema/validator.js +64 -0
- package/dist/inputSchema/validator.js.map +1 -0
- package/dist/inputSchema/wellCompletions.json +108 -0
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.d.ts +37 -0
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js +86 -0
- package/dist/layers/BoxSelectionLayer/boxSelectionLayer.js.map +1 -0
- package/dist/layers/axes/axes-fragment.glsl.d.ts +2 -0
- package/dist/layers/axes/axes-fragment.glsl.js +15 -0
- package/dist/layers/axes/axes-fragment.glsl.js.map +1 -0
- package/dist/layers/axes/axesLayer.d.ts +38 -0
- package/dist/layers/axes/axesLayer.js +485 -0
- package/dist/layers/axes/axesLayer.js.map +1 -0
- package/dist/layers/axes/boxLayer.d.ts +20 -0
- package/dist/layers/axes/boxLayer.js +52 -0
- package/dist/layers/axes/boxLayer.js.map +1 -0
- package/dist/layers/axes/grid-vertex.glsl.d.ts +2 -0
- package/dist/layers/axes/grid-vertex.glsl.js +14 -0
- package/dist/layers/axes/grid-vertex.glsl.js.map +1 -0
- package/dist/layers/axes2d/axes2DLayer.d.ts +58 -0
- package/dist/layers/axes2d/axes2DLayer.js +613 -0
- package/dist/layers/axes2d/axes2DLayer.js.map +1 -0
- package/dist/layers/axes2d/font-atlas.png +0 -0
- package/dist/layers/axes2d/label-fragment.glsl.d.ts +2 -0
- package/dist/layers/axes2d/label-fragment.glsl.js +38 -0
- package/dist/layers/axes2d/label-fragment.glsl.js.map +1 -0
- package/dist/layers/axes2d/label-vertex.glsl.d.ts +2 -0
- package/dist/layers/axes2d/label-vertex.glsl.js +21 -0
- package/dist/layers/axes2d/label-vertex.glsl.js.map +1 -0
- package/dist/layers/axes2d/line-fragment.glsl.d.ts +2 -0
- package/dist/layers/axes2d/line-fragment.glsl.js +15 -0
- package/dist/layers/axes2d/line-fragment.glsl.js.map +1 -0
- package/dist/layers/axes2d/line-vertex.glsl.d.ts +2 -0
- package/dist/layers/axes2d/line-vertex.glsl.js +14 -0
- package/dist/layers/axes2d/line-vertex.glsl.js.map +1 -0
- package/dist/layers/colormap/colormap.fs.glsl.d.ts +2 -0
- package/dist/layers/colormap/colormap.fs.glsl.js +42 -0
- package/dist/layers/colormap/colormap.fs.glsl.js.map +1 -0
- package/dist/layers/colormap/colormapLayer.d.ts +24 -0
- package/dist/layers/colormap/colormapLayer.js +150 -0
- package/dist/layers/colormap/colormapLayer.js.map +1 -0
- package/dist/layers/drawing/drawingLayer.d.ts +17 -0
- package/dist/layers/drawing/drawingLayer.js +202 -0
- package/dist/layers/drawing/drawingLayer.js.map +1 -0
- package/dist/layers/fault_polygons/faultPolygonsLayer.d.ts +9 -0
- package/dist/layers/fault_polygons/faultPolygonsLayer.js +43 -0
- package/dist/layers/fault_polygons/faultPolygonsLayer.js.map +1 -0
- package/dist/layers/grid3d/fragment.fs.glsl.d.ts +2 -0
- package/dist/layers/grid3d/fragment.fs.glsl.js +109 -0
- package/dist/layers/grid3d/fragment.fs.glsl.js.map +1 -0
- package/dist/layers/grid3d/fragment_lines.glsl.d.ts +2 -0
- package/dist/layers/grid3d/fragment_lines.glsl.js +21 -0
- package/dist/layers/grid3d/fragment_lines.glsl.js.map +1 -0
- package/dist/layers/grid3d/grid3dLayer.d.ts +73 -0
- package/dist/layers/grid3d/grid3dLayer.js +134 -0
- package/dist/layers/grid3d/grid3dLayer.js.map +1 -0
- package/dist/layers/grid3d/privateLayer.d.ts +73 -0
- package/dist/layers/grid3d/privateLayer.js +174 -0
- package/dist/layers/grid3d/privateLayer.js.map +1 -0
- package/dist/layers/grid3d/vertex.glsl.d.ts +2 -0
- package/dist/layers/grid3d/vertex.glsl.js +43 -0
- package/dist/layers/grid3d/vertex.glsl.js.map +1 -0
- package/dist/layers/grid3d/vertex_lines.glsl.d.ts +2 -0
- package/dist/layers/grid3d/vertex_lines.glsl.js +16 -0
- package/dist/layers/grid3d/vertex_lines.glsl.js.map +1 -0
- package/dist/layers/grid3d/webworker.d.ts +4 -0
- package/dist/layers/grid3d/webworker.js +140 -0
- package/dist/layers/grid3d/webworker.js.map +1 -0
- package/dist/layers/hillshading2d/hillshading2d.fs.glsl.d.ts +2 -0
- package/dist/layers/hillshading2d/hillshading2d.fs.glsl.js +62 -0
- package/dist/layers/hillshading2d/hillshading2d.fs.glsl.js.map +1 -0
- package/dist/layers/hillshading2d/hillshading2dLayer.d.ts +22 -0
- package/dist/layers/hillshading2d/hillshading2dLayer.js +101 -0
- package/dist/layers/hillshading2d/hillshading2dLayer.js.map +1 -0
- package/dist/layers/index.d.ts +34 -0
- package/dist/layers/index.js +19 -0
- package/dist/layers/index.js.map +1 -0
- package/dist/layers/intersection/unfoldedGeoJsonLayer.d.ts +10 -0
- package/dist/layers/intersection/unfoldedGeoJsonLayer.js +64 -0
- package/dist/layers/intersection/unfoldedGeoJsonLayer.js.map +1 -0
- package/dist/layers/map/fragment.fs.glsl.d.ts +2 -0
- package/dist/layers/map/fragment.fs.glsl.js +127 -0
- package/dist/layers/map/fragment.fs.glsl.js.map +1 -0
- package/dist/layers/map/fragment_lines.glsl.d.ts +2 -0
- package/dist/layers/map/fragment_lines.glsl.js +21 -0
- package/dist/layers/map/fragment_lines.glsl.js.map +1 -0
- package/dist/layers/map/mapLayer.d.ts +120 -0
- package/dist/layers/map/mapLayer.js +275 -0
- package/dist/layers/map/mapLayer.js.map +1 -0
- package/dist/layers/map/privateMapLayer.d.ts +76 -0
- package/dist/layers/map/privateMapLayer.js +190 -0
- package/dist/layers/map/privateMapLayer.js.map +1 -0
- package/dist/layers/map/vertex.glsl.d.ts +2 -0
- package/dist/layers/map/vertex.glsl.js +45 -0
- package/dist/layers/map/vertex.glsl.js.map +1 -0
- package/dist/layers/map/vertex_lines.glsl.d.ts +2 -0
- package/dist/layers/map/vertex_lines.glsl.js +16 -0
- package/dist/layers/map/vertex_lines.glsl.js.map +1 -0
- package/dist/layers/map/webworker.d.ts +4 -0
- package/dist/layers/map/webworker.js +362 -0
- package/dist/layers/map/webworker.js.map +1 -0
- package/dist/layers/northarrow/northArrow3DLayer.d.ts +20 -0
- package/dist/layers/northarrow/northArrow3DLayer.js +144 -0
- package/dist/layers/northarrow/northArrow3DLayer.js.map +1 -0
- package/dist/layers/northarrow/northarrow-fragment.glsl.d.ts +2 -0
- package/dist/layers/northarrow/northarrow-fragment.glsl.js +15 -0
- package/dist/layers/northarrow/northarrow-fragment.glsl.js.map +1 -0
- package/dist/layers/northarrow/northarrow-vertex.glsl.d.ts +2 -0
- package/dist/layers/northarrow/northarrow-vertex.glsl.js +14 -0
- package/dist/layers/northarrow/northarrow-vertex.glsl.js.map +1 -0
- package/dist/layers/piechart/fragment.glsl.d.ts +2 -0
- package/dist/layers/piechart/fragment.glsl.js +43 -0
- package/dist/layers/piechart/fragment.glsl.js.map +1 -0
- package/dist/layers/piechart/pieChartLayer.d.ts +40 -0
- package/dist/layers/piechart/pieChartLayer.js +174 -0
- package/dist/layers/piechart/pieChartLayer.js.map +1 -0
- package/dist/layers/piechart/vertex.glsl.d.ts +2 -0
- package/dist/layers/piechart/vertex.glsl.js +43 -0
- package/dist/layers/piechart/vertex.glsl.js.map +1 -0
- package/dist/layers/points/pointsLayer.d.ts +34 -0
- package/dist/layers/points/pointsLayer.js +78 -0
- package/dist/layers/points/pointsLayer.js.map +1 -0
- package/dist/layers/polylines/polylinesLayer.d.ts +50 -0
- package/dist/layers/polylines/polylinesLayer.js +157 -0
- package/dist/layers/polylines/polylinesLayer.js.map +1 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.d.ts +6 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js +22 -0
- package/dist/layers/selectable_geojson/selectableGeoJsonLayer.js.map +1 -0
- package/dist/layers/shader_modules/decoder.d.ts +15 -0
- package/dist/layers/shader_modules/decoder.fs.glsl.d.ts +2 -0
- package/dist/layers/shader_modules/decoder.fs.glsl.js +40 -0
- package/dist/layers/shader_modules/decoder.fs.glsl.js.map +1 -0
- package/dist/layers/shader_modules/decoder.js +29 -0
- package/dist/layers/shader_modules/decoder.js.map +1 -0
- package/dist/layers/shader_modules/index.d.ts +1 -0
- package/dist/layers/shader_modules/index.js +2 -0
- package/dist/layers/shader_modules/index.js.map +1 -0
- package/dist/layers/terrain/map3DLayer.d.ts +42 -0
- package/dist/layers/terrain/map3DLayer.js +324 -0
- package/dist/layers/terrain/map3DLayer.js.map +1 -0
- package/dist/layers/terrain/terrainMapLayer.d.ts +45 -0
- package/dist/layers/terrain/terrainMapLayer.js +183 -0
- package/dist/layers/terrain/terrainMapLayer.js.map +1 -0
- package/dist/layers/terrain/terrainmap.fs.glsl.d.ts +2 -0
- package/dist/layers/terrain/terrainmap.fs.glsl.js +134 -0
- package/dist/layers/terrain/terrainmap.fs.glsl.js.map +1 -0
- package/dist/layers/triangle/fragment.fs.glsl.d.ts +2 -0
- package/dist/layers/triangle/fragment.fs.glsl.js +126 -0
- package/dist/layers/triangle/fragment.fs.glsl.js.map +1 -0
- package/dist/layers/triangle/fragment_lines.glsl.d.ts +2 -0
- package/dist/layers/triangle/fragment_lines.glsl.js +21 -0
- package/dist/layers/triangle/fragment_lines.glsl.js.map +1 -0
- package/dist/layers/triangle/privateTriangleLayer.d.ts +70 -0
- package/dist/layers/triangle/privateTriangleLayer.js +108 -0
- package/dist/layers/triangle/privateTriangleLayer.js.map +1 -0
- package/dist/layers/triangle/test_data/surfacePoints.d.ts +2 -0
- package/dist/layers/triangle/test_data/surfacePoints.js +4345 -0
- package/dist/layers/triangle/test_data/surfacePoints.js.map +1 -0
- package/dist/layers/triangle/test_data/surfaceTriangles.d.ts +2 -0
- package/dist/layers/triangle/test_data/surfaceTriangles.js +7393 -0
- package/dist/layers/triangle/test_data/surfaceTriangles.js.map +1 -0
- package/dist/layers/triangle/triangleLayer.d.ts +60 -0
- package/dist/layers/triangle/triangleLayer.js +170 -0
- package/dist/layers/triangle/triangleLayer.js.map +1 -0
- package/dist/layers/triangle/vertex.glsl.d.ts +2 -0
- package/dist/layers/triangle/vertex.glsl.js +35 -0
- package/dist/layers/triangle/vertex.glsl.js.map +1 -0
- package/dist/layers/triangle/vertex_lines.glsl.d.ts +2 -0
- package/dist/layers/triangle/vertex_lines.glsl.js +16 -0
- package/dist/layers/triangle/vertex_lines.glsl.js.map +1 -0
- package/dist/layers/triangle/webworker.d.ts +4 -0
- package/dist/layers/triangle/webworker.js +132 -0
- package/dist/layers/triangle/webworker.js.map +1 -0
- package/dist/layers/utils/layerTools.d.ts +52 -0
- package/dist/layers/utils/layerTools.js +91 -0
- package/dist/layers/utils/layerTools.js.map +1 -0
- package/dist/layers/utils/propertyMapTools.d.ts +8 -0
- package/dist/layers/utils/propertyMapTools.js +21 -0
- package/dist/layers/utils/propertyMapTools.js.map +1 -0
- package/dist/layers/wells/utils/spline.d.ts +28 -0
- package/dist/layers/wells/utils/spline.js +236 -0
- package/dist/layers/wells/utils/spline.js.map +1 -0
- package/dist/layers/wells/wellsLayer.d.ts +89 -0
- package/dist/layers/wells/wellsLayer.js +939 -0
- package/dist/layers/wells/wellsLayer.js.map +1 -0
- package/dist/package.json +35 -0
- package/dist/redux/actions.d.ts +1 -0
- package/dist/redux/actions.js +3 -0
- package/dist/redux/actions.js.map +1 -0
- package/dist/redux/reducer.d.ts +11 -0
- package/dist/redux/reducer.js +28 -0
- package/dist/redux/reducer.js.map +1 -0
- package/dist/redux/store.d.ts +4 -0
- package/dist/redux/store.js +10 -0
- package/dist/redux/store.js.map +1 -0
- package/dist/redux/types.d.ts +43 -0
- package/dist/redux/types.js +79 -0
- package/dist/redux/types.js.map +1 -0
- package/dist/storybook/SubsurfaceViewer.stories.d.ts +455 -0
- package/dist/storybook/SubsurfaceViewer.stories.js +537 -0
- package/dist/storybook/SubsurfaceViewer.stories.js.map +1 -0
- package/dist/storybook/components/InfoCard.stories.d.ts +48 -0
- package/dist/storybook/components/InfoCard.stories.js +36 -0
- package/dist/storybook/components/InfoCard.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.d.ts +31 -0
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js +30 -0
- package/dist/storybook/components/colorLegends/ContinuousLegend.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.d.ts +31 -0
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js +30 -0
- package/dist/storybook/components/colorLegends/DiscreteLegend.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.d.ts +20 -0
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js +66 -0
- package/dist/storybook/components/colorLegends/IndividualScaleForMap.stories.js.map +1 -0
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.d.ts +65 -0
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js +94 -0
- package/dist/storybook/components/colorLegends/SingleScaleForMap.stories.js.map +1 -0
- package/dist/storybook/components/settings/LayerSettingsButton.stories.d.ts +34 -0
- package/dist/storybook/components/settings/LayerSettingsButton.stories.js +31 -0
- package/dist/storybook/components/settings/LayerSettingsButton.stories.js.map +1 -0
- package/dist/storybook/components/settings/NumericInput.stories.d.ts +14 -0
- package/dist/storybook/components/settings/NumericInput.stories.js +15 -0
- package/dist/storybook/components/settings/NumericInput.stories.js.map +1 -0
- package/dist/storybook/components/settings/ToggleButton.stories.d.ts +13 -0
- package/dist/storybook/components/settings/ToggleButton.stories.js +14 -0
- package/dist/storybook/components/settings/ToggleButton.stories.js.map +1 -0
- package/dist/storybook/schemaValidation/sampleData.d.ts +122 -0
- package/dist/storybook/schemaValidation/sampleData.js +172 -0
- package/dist/storybook/schemaValidation/sampleData.js.map +1 -0
- package/dist/storybook/schemaValidation/schemaValidation.stories.d.ts +31 -0
- package/dist/storybook/schemaValidation/schemaValidation.stories.js +42 -0
- package/dist/storybook/schemaValidation/schemaValidation.stories.js.map +1 -0
- package/dist/utils/configuration.d.ts +631 -0
- package/dist/utils/configuration.js +36 -0
- package/dist/utils/configuration.js.map +1 -0
- package/dist/utils/fit-bounds.d.ts +15 -0
- package/dist/utils/fit-bounds.js +66 -0
- package/dist/utils/fit-bounds.js.map +1 -0
- package/dist/utils/measurement.d.ts +6 -0
- package/dist/utils/measurement.js +47 -0
- package/dist/utils/measurement.js.map +1 -0
- package/dist/utils/northArrow.d.ts +113 -0
- package/dist/utils/northArrow.js +5 -0
- package/dist/utils/northArrow.js.map +1 -0
- package/dist/utils/specExtractor.d.ts +3 -0
- package/dist/utils/specExtractor.js +24 -0
- package/dist/utils/specExtractor.js.map +1 -0
- package/dist/viewports/index.d.ts +1 -0
- package/dist/viewports/index.js +2 -0
- package/dist/viewports/index.js.map +1 -0
- package/dist/viewports/intersectionViewport.d.ts +35 -0
- package/dist/viewports/intersectionViewport.js +65 -0
- package/dist/viewports/intersectionViewport.js.map +1 -0
- package/dist/views/index.d.ts +1 -0
- package/dist/views/index.js +2 -0
- package/dist/views/index.js.map +1 -0
- package/dist/views/intersectionView.d.ts +18 -0
- package/dist/views/intersectionView.js +17 -0
- package/dist/views/intersectionView.js.map +1 -0
- package/package.json +35 -0
- package/src/DashSubsurfaceViewer.tsx +270 -0
- package/src/SubsurfaceViewer.stories.tsx +449 -0
- package/src/SubsurfaceViewer.test.tsx +98 -0
- package/src/SubsurfaceViewer.tsx +356 -0
- package/src/__snapshots__/SubsurfaceViewer.test.tsx.snap +178 -0
- package/src/assets/glTF/north_arrow/scene.bin +0 -0
- package/src/assets/glTF/north_arrow/scene.gltf +315 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_baseColor.png +0 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_metallicRoughness.png +0 -0
- package/src/assets/glTF/north_arrow/textures/Arrow5_normal.png +0 -0
- package/src/components/ColorLegend.test.tsx +32 -0
- package/src/components/ColorLegend.tsx +80 -0
- package/src/components/ColorLegends.test.tsx +97 -0
- package/src/components/ColorLegends.tsx +46 -0
- package/src/components/DistanceScale.stories.tsx +28 -0
- package/src/components/DistanceScale.test.tsx +36 -0
- package/src/components/DistanceScale.tsx +84 -0
- package/src/components/InfoCard.test.tsx +110 -0
- package/src/components/InfoCard.tsx +263 -0
- package/src/components/Map.test.tsx +142 -0
- package/src/components/Map.tsx +1435 -0
- package/src/components/StatusIndicator.test.tsx +14 -0
- package/src/components/StatusIndicator.tsx +38 -0
- package/src/components/ViewAnnotation.tsx +16 -0
- package/src/components/ViewFooter.test.tsx +12 -0
- package/src/components/ViewFooter.tsx +30 -0
- package/src/components/__snapshots__/ColorLegends.test.tsx.snap +15 -0
- package/src/components/__snapshots__/DistanceScale.test.tsx.snap +33 -0
- package/src/components/__snapshots__/InfoCard.test.tsx.snap +561 -0
- package/src/components/__snapshots__/Map.test.tsx.snap +119 -0
- package/src/components/__snapshots__/StatusIndicator.test.tsx.snap +3 -0
- package/src/components/__snapshots__/ViewFooter.test.tsx.snap +7 -0
- package/src/components/settings/DrawModeSelector.test.tsx +45 -0
- package/src/components/settings/DrawModeSelector.tsx +58 -0
- package/src/components/settings/DrawModeSelector_performance.test.tsx +35 -0
- package/src/components/settings/LayerProperty.test.tsx +35 -0
- package/src/components/settings/LayerProperty.tsx +153 -0
- package/src/components/settings/LayerProperty_performance.test.tsx +39 -0
- package/src/components/settings/LayerSettingsButton.test.tsx +133 -0
- package/src/components/settings/LayerSettingsButton.tsx +95 -0
- package/src/components/settings/LayersButton.test.tsx +102 -0
- package/src/components/settings/LayersButton.tsx +97 -0
- package/src/components/settings/NumericInput.test.tsx +25 -0
- package/src/components/settings/NumericInput.tsx +67 -0
- package/src/components/settings/Settings.tsx +71 -0
- package/src/components/settings/SliderInput.test.tsx +28 -0
- package/src/components/settings/SliderInput.tsx +71 -0
- package/src/components/settings/ToggleButton.test.tsx +25 -0
- package/src/components/settings/ToggleButton.tsx +53 -0
- package/src/components/settings/__snapshots__/DrawModeSelector.test.tsx.snap +124 -0
- package/src/components/settings/__snapshots__/LayerProperty.test.tsx.snap +124 -0
- package/src/components/settings/__snapshots__/LayerSettingsButton.test.tsx.snap +36 -0
- package/src/components/settings/__snapshots__/LayersButton.test.tsx.snap +83 -0
- package/src/components/settings/__snapshots__/NumericInput.test.tsx.snap +123 -0
- package/src/components/settings/__snapshots__/SliderInput.test.tsx.snap +244 -0
- package/src/components/settings/__snapshots__/ToggleButton.test.tsx.snap +182 -0
- package/src/custom.d.ts +9 -0
- package/src/index.ts +5 -0
- package/src/inputSchema/ColorTables.json +51 -0
- package/src/inputSchema/FaultPolygons.json +80 -0
- package/src/inputSchema/Grid.json +39 -0
- package/src/inputSchema/PieChart.json +72 -0
- package/src/inputSchema/WellLog.json +126 -0
- package/src/inputSchema/WellLogTemplate.json +136 -0
- package/src/inputSchema/WellLogs.json +5 -0
- package/src/inputSchema/Wells.json +106 -0
- package/src/inputSchema/schemaValidationUtil.tsx +55 -0
- package/src/inputSchema/validator.tsx +72 -0
- package/src/inputSchema/wellCompletions.json +108 -0
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.stories.tsx +172 -0
- package/src/layers/BoxSelectionLayer/boxSelectionLayer.tsx +136 -0
- package/src/layers/axes/axes-fragment.glsl.ts +15 -0
- package/src/layers/axes/axesLayer.stories.tsx +87 -0
- package/src/layers/axes/axesLayer.ts +692 -0
- package/src/layers/axes/boxLayer.ts +71 -0
- package/src/layers/axes/grid-vertex.glsl.ts +14 -0
- package/src/layers/axes2d/axes2DLayer.stories.tsx +150 -0
- package/src/layers/axes2d/axes2DLayer.ts +841 -0
- package/src/layers/axes2d/font-atlas.png +0 -0
- package/src/layers/axes2d/label-fragment.glsl.js +37 -0
- package/src/layers/axes2d/label-vertex.glsl.js +20 -0
- package/src/layers/axes2d/line-fragment.glsl.js +14 -0
- package/src/layers/axes2d/line-vertex.glsl.js +13 -0
- package/src/layers/colormap/colormap.fs.glsl.ts +42 -0
- package/src/layers/colormap/colormapLayer.ts +247 -0
- package/src/layers/drawing/drawingLayer.tsx +256 -0
- package/src/layers/fault_polygons/faultPolygonsLayer.ts +54 -0
- package/src/layers/grid3d/fragment.fs.glsl.ts +109 -0
- package/src/layers/grid3d/fragment_lines.glsl.ts +21 -0
- package/src/layers/grid3d/grid3dLayer.stories.tsx +172 -0
- package/src/layers/grid3d/grid3dLayer.ts +248 -0
- package/src/layers/grid3d/privateLayer.ts +292 -0
- package/src/layers/grid3d/vertex.glsl.ts +43 -0
- package/src/layers/grid3d/vertex_lines.glsl.ts +15 -0
- package/src/layers/grid3d/webworker.ts +173 -0
- package/src/layers/hillshading2d/hillshading2d.fs.glsl.ts +62 -0
- package/src/layers/hillshading2d/hillshading2dLayer.ts +172 -0
- package/src/layers/index.ts +35 -0
- package/src/layers/intersection/intersectionView.stories.tsx +294 -0
- package/src/layers/intersection/unfoldedGeoJsonLayer.ts +92 -0
- package/src/layers/map/fragment.fs.glsl.ts +127 -0
- package/src/layers/map/fragment_lines.glsl.ts +21 -0
- package/src/layers/map/mapLayer.stories.tsx +1369 -0
- package/src/layers/map/mapLayer.ts +470 -0
- package/src/layers/map/privateMapLayer.ts +317 -0
- package/src/layers/map/vertex.glsl.ts +45 -0
- package/src/layers/map/vertex_lines.glsl.ts +15 -0
- package/src/layers/map/webworker.ts +479 -0
- package/src/layers/northarrow/northArrow.stories.tsx +108 -0
- package/src/layers/northarrow/northArrow3DLayer.ts +204 -0
- package/src/layers/northarrow/northarrow-fragment.glsl.js +14 -0
- package/src/layers/northarrow/northarrow-vertex.glsl.js +13 -0
- package/src/layers/piechart/fragment.glsl.js +42 -0
- package/src/layers/piechart/pieChartLayer.ts +246 -0
- package/src/layers/piechart/vertex.glsl.js +42 -0
- package/src/layers/points/pointsLayer.stories.tsx +141 -0
- package/src/layers/points/pointsLayer.ts +143 -0
- package/src/layers/polylines/polylinesLayer.stories.tsx +144 -0
- package/src/layers/polylines/polylinesLayer.ts +263 -0
- package/src/layers/selectable_geojson/selectableGeoJsonLayer.ts +25 -0
- package/src/layers/shader_modules/decoder.fs.glsl.ts +41 -0
- package/src/layers/shader_modules/decoder.ts +46 -0
- package/src/layers/shader_modules/index.ts +1 -0
- package/src/layers/terrain/map3DLayer.stories.tsx +340 -0
- package/src/layers/terrain/map3DLayer.ts +556 -0
- package/src/layers/terrain/terrainMapLayer.ts +334 -0
- package/src/layers/terrain/terrainmap.fs.glsl.ts +134 -0
- package/src/layers/triangle/fragment.fs.glsl.ts +126 -0
- package/src/layers/triangle/fragment_lines.glsl.ts +21 -0
- package/src/layers/triangle/privateTriangleLayer.ts +203 -0
- package/src/layers/triangle/test_data/surfacePoints.ts +4344 -0
- package/src/layers/triangle/test_data/surfaceTriangles.ts +7392 -0
- package/src/layers/triangle/triangleLayer.stories.tsx +191 -0
- package/src/layers/triangle/triangleLayer.ts +273 -0
- package/src/layers/triangle/vertex.glsl.ts +35 -0
- package/src/layers/triangle/vertex_lines.glsl.ts +15 -0
- package/src/layers/triangle/webworker.ts +165 -0
- package/src/layers/utils/glsl.d.ts +4 -0
- package/src/layers/utils/layerTools.ts +182 -0
- package/src/layers/utils/propertyMapTools.ts +43 -0
- package/src/layers/wells/utils/spline.ts +318 -0
- package/src/layers/wells/wellsLayer.stories.tsx +625 -0
- package/src/layers/wells/wellsLayer.ts +1377 -0
- package/src/redux/actions.ts +8 -0
- package/src/redux/reducer.ts +43 -0
- package/src/redux/store.ts +15 -0
- package/src/redux/types.ts +114 -0
- package/src/storybook/SubsurfaceViewer.stories.jsx +644 -0
- package/src/storybook/components/InfoCard.stories.jsx +39 -0
- package/src/storybook/components/colorLegends/ContinuousLegend.stories.jsx +32 -0
- package/src/storybook/components/colorLegends/DiscreteLegend.stories.jsx +33 -0
- package/src/storybook/components/colorLegends/IndividualScaleForMap.stories.jsx +99 -0
- package/src/storybook/components/colorLegends/SingleScaleForMap.stories.jsx +120 -0
- package/src/storybook/components/settings/LayerSettingsButton.stories.jsx +34 -0
- package/src/storybook/components/settings/NumericInput.stories.jsx +17 -0
- package/src/storybook/components/settings/ToggleButton.stories.jsx +16 -0
- package/src/storybook/schemaValidation/sampleData.js +177 -0
- package/src/storybook/schemaValidation/schemaValidation.stories.jsx +91 -0
- package/src/test/TestWrapper.tsx +13 -0
- package/src/utils/configuration.ts +61 -0
- package/src/utils/fit-bounds.js +85 -0
- package/src/utils/measurement.ts +61 -0
- package/src/utils/northArrow.ts +4 -0
- package/src/utils/specExtractor.ts +36 -0
- package/src/viewports/index.js +1 -0
- package/src/viewports/intersectionViewport.ts +137 -0
- package/src/views/index.js +1 -0
- package/src/views/intersectionView.ts +38 -0
- package/tsconfig.json +7 -0
|
@@ -0,0 +1,939 @@
|
|
|
1
|
+
import { CompositeLayer, OrbitViewport, } from "@deck.gl/core/typed";
|
|
2
|
+
import { isDrawingEnabled } from "../utils/layerTools";
|
|
3
|
+
import { PathLayer, TextLayer } from "@deck.gl/layers/typed";
|
|
4
|
+
import { PathStyleExtension } from "@deck.gl/extensions/typed";
|
|
5
|
+
import { subtract, distance, dot } from "mathjs";
|
|
6
|
+
import { rgbValues, getColors, } from "@emerson-eps/color-tables/";
|
|
7
|
+
import { createPropertyData, } from "../utils/layerTools";
|
|
8
|
+
import { splineRefine, invertPath, GetBoundingBox } from "./utils/spline";
|
|
9
|
+
import { interpolateNumberArray } from "d3";
|
|
10
|
+
import { getLayersById } from "../../layers/utils/layerTools";
|
|
11
|
+
import UnfoldedGeoJsonLayer from "../intersection/unfoldedGeoJsonLayer";
|
|
12
|
+
import GL from "@luma.gl/constants";
|
|
13
|
+
function onDataLoad(data, context) {
|
|
14
|
+
const bbox = GetBoundingBox(data);
|
|
15
|
+
if (typeof context.layer.props.setReportedBoundingBox !== "undefined") {
|
|
16
|
+
context.layer.props.setReportedBoundingBox(bbox);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const defaultProps = {
|
|
20
|
+
"@@type": "WellsLayer",
|
|
21
|
+
name: "Wells",
|
|
22
|
+
id: "wells-layer",
|
|
23
|
+
autoHighlight: true,
|
|
24
|
+
opacity: 1,
|
|
25
|
+
lineWidthScale: 1,
|
|
26
|
+
pointRadiusScale: 1,
|
|
27
|
+
lineStyle: { dash: false },
|
|
28
|
+
outline: true,
|
|
29
|
+
logRadius: 10,
|
|
30
|
+
logCurves: true,
|
|
31
|
+
refine: false,
|
|
32
|
+
visible: true,
|
|
33
|
+
wellNameVisible: false,
|
|
34
|
+
wellNameAtTop: false,
|
|
35
|
+
wellNameSize: 14,
|
|
36
|
+
wellNameColor: [0, 0, 0, 255],
|
|
37
|
+
selectedWell: "@@#editedData.selectedWells",
|
|
38
|
+
depthTest: true,
|
|
39
|
+
ZIncreasingDownwards: true,
|
|
40
|
+
};
|
|
41
|
+
function multiply(pair, factor) {
|
|
42
|
+
return [pair[0] * factor, pair[1] * factor];
|
|
43
|
+
}
|
|
44
|
+
const LINE = "line";
|
|
45
|
+
const POINT = "point";
|
|
46
|
+
const DEFAULT_POINT_SIZE = 8;
|
|
47
|
+
const DEFAULT_LINE_WIDTH = 5;
|
|
48
|
+
const DEFAULT_DASH = [5, 5];
|
|
49
|
+
function getDashFactor(accessor, width_accessor, offset = 0) {
|
|
50
|
+
return (object, objectInfo) => {
|
|
51
|
+
let width = DEFAULT_LINE_WIDTH;
|
|
52
|
+
if (typeof width_accessor == "function") {
|
|
53
|
+
width = width_accessor(object);
|
|
54
|
+
}
|
|
55
|
+
else if (width_accessor) {
|
|
56
|
+
width = width_accessor;
|
|
57
|
+
}
|
|
58
|
+
const factor = width / (width + offset);
|
|
59
|
+
let dash = [0, 0];
|
|
60
|
+
if (typeof accessor == "function") {
|
|
61
|
+
dash = accessor(object, objectInfo);
|
|
62
|
+
}
|
|
63
|
+
else if (accessor)
|
|
64
|
+
dash = accessor;
|
|
65
|
+
else if (accessor)
|
|
66
|
+
dash = DEFAULT_DASH;
|
|
67
|
+
if (dash.length == 2) {
|
|
68
|
+
return multiply(dash, factor);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return multiply(DEFAULT_DASH, factor);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function getColor(accessor) {
|
|
76
|
+
if (accessor) {
|
|
77
|
+
return accessor;
|
|
78
|
+
}
|
|
79
|
+
return (object, objectInfo) => {
|
|
80
|
+
var _a;
|
|
81
|
+
if (typeof accessor === "function") {
|
|
82
|
+
const color = accessor(object, objectInfo);
|
|
83
|
+
if (color) {
|
|
84
|
+
return color;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return (_a = object.properties) === null || _a === void 0 ? void 0 : _a["color"];
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export function getSize(type, accessor, offset = 0) {
|
|
91
|
+
if (typeof accessor == "function") {
|
|
92
|
+
return (object) => {
|
|
93
|
+
return (accessor(object) + offset);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
if (accessor == 0)
|
|
97
|
+
return 0;
|
|
98
|
+
if (accessor > 0)
|
|
99
|
+
return accessor + offset;
|
|
100
|
+
if (type == LINE)
|
|
101
|
+
return DEFAULT_LINE_WIDTH + offset;
|
|
102
|
+
if (type == POINT)
|
|
103
|
+
return DEFAULT_POINT_SIZE + offset;
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
export default class WellsLayer extends CompositeLayer {
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
|
|
108
|
+
onClick(info) {
|
|
109
|
+
var _a;
|
|
110
|
+
// Make selection only when drawing is disabled
|
|
111
|
+
if (isDrawingEnabled(this.context.layerManager)) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
this.context.userData.setEditedData({
|
|
116
|
+
selectedWell: (_a = info.object.properties) === null || _a === void 0 ? void 0 : _a["name"],
|
|
117
|
+
});
|
|
118
|
+
return false; // do not return true to allow DeckGL props.onClick to be called
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
setSelection(well, _selection) {
|
|
122
|
+
if (this.internalState) {
|
|
123
|
+
this.setState({
|
|
124
|
+
well: well,
|
|
125
|
+
selection: _selection,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
setMultiSelection(wells) {
|
|
130
|
+
if (this.internalState) {
|
|
131
|
+
this.setState({
|
|
132
|
+
selectedMultiWells: wells,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
shouldUpdateState({ changeFlags }) {
|
|
137
|
+
return (changeFlags.viewportChanged ||
|
|
138
|
+
changeFlags.propsOrDataChanged ||
|
|
139
|
+
typeof changeFlags.updateTriggersChanged === "object");
|
|
140
|
+
}
|
|
141
|
+
getLegendData(value) {
|
|
142
|
+
return getLegendData(value, "", this.props.logName, this.props.logColor);
|
|
143
|
+
}
|
|
144
|
+
setLegend(value) {
|
|
145
|
+
this.setState({
|
|
146
|
+
legend: this.getLegendData(value),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
getLogLayer() {
|
|
150
|
+
var _a;
|
|
151
|
+
const sub_layers = (_a = this.internalState) === null || _a === void 0 ? void 0 : _a.subLayers;
|
|
152
|
+
const log_layer = getLayersById(sub_layers, "wells-layer-log_curve");
|
|
153
|
+
return log_layer === null || log_layer === void 0 ? void 0 : log_layer[0];
|
|
154
|
+
}
|
|
155
|
+
getSelectionLayer() {
|
|
156
|
+
var _a;
|
|
157
|
+
const sub_layers = (_a = this.internalState) === null || _a === void 0 ? void 0 : _a.subLayers;
|
|
158
|
+
const log_layer = getLayersById(sub_layers, "wells-layer-selection");
|
|
159
|
+
return log_layer === null || log_layer === void 0 ? void 0 : log_layer[0];
|
|
160
|
+
}
|
|
161
|
+
getLogCurveData() {
|
|
162
|
+
const log_layer = this.getLogLayer();
|
|
163
|
+
return log_layer === null || log_layer === void 0 ? void 0 : log_layer.props.data;
|
|
164
|
+
}
|
|
165
|
+
setupLegend() {
|
|
166
|
+
const data = this.getLogCurveData();
|
|
167
|
+
if (data)
|
|
168
|
+
this.setLegend(data);
|
|
169
|
+
}
|
|
170
|
+
renderLayers() {
|
|
171
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
172
|
+
if (!this.props.data.features) {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
let data = this.props.data;
|
|
176
|
+
if (!this.props.ZIncreasingDownwards) {
|
|
177
|
+
data = invertPath(data);
|
|
178
|
+
}
|
|
179
|
+
const refine = this.props.refine;
|
|
180
|
+
data = refine
|
|
181
|
+
? splineRefine(data) // smooth well paths.
|
|
182
|
+
: data;
|
|
183
|
+
const is3d = this.context.viewport.constructor === OrbitViewport;
|
|
184
|
+
const positionFormat = "XYZ";
|
|
185
|
+
const isDashed = !!((_a = this.props.lineStyle) === null || _a === void 0 ? void 0 : _a.dash);
|
|
186
|
+
const extensions = [
|
|
187
|
+
new PathStyleExtension({
|
|
188
|
+
dash: isDashed,
|
|
189
|
+
highPrecisionDash: isDashed,
|
|
190
|
+
}),
|
|
191
|
+
];
|
|
192
|
+
const parameters = {
|
|
193
|
+
[GL.DEPTH_TEST]: this.props.depthTest,
|
|
194
|
+
[GL.POLYGON_OFFSET_FILL]: true,
|
|
195
|
+
};
|
|
196
|
+
const outline = new UnfoldedGeoJsonLayer(this.getSubLayerProps({
|
|
197
|
+
id: "outline",
|
|
198
|
+
data,
|
|
199
|
+
pickable: false,
|
|
200
|
+
stroked: false,
|
|
201
|
+
positionFormat,
|
|
202
|
+
pointRadiusUnits: "pixels",
|
|
203
|
+
lineWidthUnits: "pixels",
|
|
204
|
+
visible: this.props.outline,
|
|
205
|
+
pointRadiusScale: this.props.pointRadiusScale,
|
|
206
|
+
lineWidthScale: this.props.lineWidthScale,
|
|
207
|
+
getLineWidth: getSize(LINE, (_b = this.props.lineStyle) === null || _b === void 0 ? void 0 : _b.width),
|
|
208
|
+
getPointRadius: getSize(POINT, (_c = this.props.wellHeadStyle) === null || _c === void 0 ? void 0 : _c.size),
|
|
209
|
+
extensions: extensions,
|
|
210
|
+
getDashArray: getDashFactor((_d = this.props.lineStyle) === null || _d === void 0 ? void 0 : _d.dash),
|
|
211
|
+
lineBillboard: true,
|
|
212
|
+
pointBillboard: true,
|
|
213
|
+
parameters,
|
|
214
|
+
}));
|
|
215
|
+
const colors = new UnfoldedGeoJsonLayer(this.getSubLayerProps({
|
|
216
|
+
id: "colors",
|
|
217
|
+
data,
|
|
218
|
+
pickable: true,
|
|
219
|
+
stroked: false,
|
|
220
|
+
positionFormat,
|
|
221
|
+
pointRadiusUnits: "pixels",
|
|
222
|
+
lineWidthUnits: "pixels",
|
|
223
|
+
pointRadiusScale: this.props.pointRadiusScale,
|
|
224
|
+
lineWidthScale: this.props.lineWidthScale,
|
|
225
|
+
getLineWidth: getSize(LINE, (_e = this.props.lineStyle) === null || _e === void 0 ? void 0 : _e.width, -1),
|
|
226
|
+
getPointRadius: getSize(POINT, (_f = this.props.wellHeadStyle) === null || _f === void 0 ? void 0 : _f.size, -1),
|
|
227
|
+
getFillColor: getColor((_g = this.props.wellHeadStyle) === null || _g === void 0 ? void 0 : _g.color),
|
|
228
|
+
getLineColor: getColor((_h = this.props.lineStyle) === null || _h === void 0 ? void 0 : _h.color),
|
|
229
|
+
extensions: extensions,
|
|
230
|
+
getDashArray: getDashFactor((_j = this.props.lineStyle) === null || _j === void 0 ? void 0 : _j.dash, getSize(LINE, (_k = this.props.lineStyle) === null || _k === void 0 ? void 0 : _k.width), -1),
|
|
231
|
+
lineBillboard: true,
|
|
232
|
+
pointBillboard: true,
|
|
233
|
+
parameters,
|
|
234
|
+
}));
|
|
235
|
+
// Highlight the selected well.
|
|
236
|
+
const highlight = new UnfoldedGeoJsonLayer(this.getSubLayerProps({
|
|
237
|
+
id: "highlight",
|
|
238
|
+
data: getWellObjectByName(data.features, this.props.selectedWell),
|
|
239
|
+
pickable: false,
|
|
240
|
+
stroked: false,
|
|
241
|
+
positionFormat,
|
|
242
|
+
pointRadiusUnits: "pixels",
|
|
243
|
+
lineWidthUnits: "pixels",
|
|
244
|
+
pointRadiusScale: this.props.pointRadiusScale,
|
|
245
|
+
lineWidthScale: this.props.lineWidthScale,
|
|
246
|
+
getLineWidth: getSize(LINE, (_l = this.props.lineStyle) === null || _l === void 0 ? void 0 : _l.width, 2),
|
|
247
|
+
getPointRadius: getSize(POINT, (_m = this.props.wellHeadStyle) === null || _m === void 0 ? void 0 : _m.size, 2),
|
|
248
|
+
getFillColor: getColor((_o = this.props.wellHeadStyle) === null || _o === void 0 ? void 0 : _o.color),
|
|
249
|
+
getLineColor: getColor((_p = this.props.lineStyle) === null || _p === void 0 ? void 0 : _p.color),
|
|
250
|
+
parameters,
|
|
251
|
+
}));
|
|
252
|
+
// Highlight the multi selected wells.
|
|
253
|
+
const highlightMultiWells = new UnfoldedGeoJsonLayer(this.getSubLayerProps({
|
|
254
|
+
id: "highlight2",
|
|
255
|
+
data: getWellObjectsByName(data.features, this.state["selectedMultiWells"]),
|
|
256
|
+
pickable: false,
|
|
257
|
+
stroked: false,
|
|
258
|
+
positionFormat,
|
|
259
|
+
pointRadiusUnits: "pixels",
|
|
260
|
+
lineWidthUnits: "pixels",
|
|
261
|
+
pointRadiusScale: this.props.pointRadiusScale,
|
|
262
|
+
lineWidthScale: this.props.lineWidthScale,
|
|
263
|
+
getLineWidth: getSize(LINE, (_q = this.props.lineStyle) === null || _q === void 0 ? void 0 : _q.width, -1),
|
|
264
|
+
getPointRadius: getSize(POINT, (_r = this.props.wellHeadStyle) === null || _r === void 0 ? void 0 : _r.size, 2),
|
|
265
|
+
getFillColor: [255, 140, 0],
|
|
266
|
+
getLineColor: [255, 140, 0],
|
|
267
|
+
parameters,
|
|
268
|
+
}));
|
|
269
|
+
const log_layer = new PathLayer(this.getSubLayerProps({
|
|
270
|
+
id: "log_curve",
|
|
271
|
+
data: this.props.logData,
|
|
272
|
+
positionFormat,
|
|
273
|
+
pickable: true,
|
|
274
|
+
widthScale: 10,
|
|
275
|
+
widthMinPixels: 1,
|
|
276
|
+
miterLimit: 100,
|
|
277
|
+
visible: this.props.logCurves,
|
|
278
|
+
getPath: (d) => {
|
|
279
|
+
var _a;
|
|
280
|
+
return getLogPath(data.features, d, this.props.logrunName, (_a = this.props.lineStyle) === null || _a === void 0 ? void 0 : _a.color);
|
|
281
|
+
},
|
|
282
|
+
getColor: (d) => getLogColor(d, this.props.logrunName, this.props.logName, this.props.logColor, this.context.userData
|
|
283
|
+
.colorTables, this.props.colorMappingFunction, this.props.isLog),
|
|
284
|
+
getWidth: (d) => this.props.logRadius ||
|
|
285
|
+
getLogWidth(d, this.props.logrunName, this.props.logName),
|
|
286
|
+
updateTriggers: {
|
|
287
|
+
getColor: [
|
|
288
|
+
this.props.logrunName,
|
|
289
|
+
this.props.logName,
|
|
290
|
+
this.props.logColor,
|
|
291
|
+
this.context.userData
|
|
292
|
+
.colorTables,
|
|
293
|
+
this.props.isLog,
|
|
294
|
+
],
|
|
295
|
+
getWidth: [
|
|
296
|
+
this.props.logrunName,
|
|
297
|
+
this.props.logName,
|
|
298
|
+
this.props.logRadius,
|
|
299
|
+
],
|
|
300
|
+
getPath: [positionFormat],
|
|
301
|
+
},
|
|
302
|
+
onDataLoad: (value) => {
|
|
303
|
+
this.setLegend(value);
|
|
304
|
+
},
|
|
305
|
+
parameters,
|
|
306
|
+
}));
|
|
307
|
+
const selection_layer = new PathLayer(this.getSubLayerProps({
|
|
308
|
+
id: "selection",
|
|
309
|
+
data: this.props.logData,
|
|
310
|
+
positionFormat,
|
|
311
|
+
pickable: false,
|
|
312
|
+
widthScale: 10,
|
|
313
|
+
widthMinPixels: 1,
|
|
314
|
+
miterLimit: 100,
|
|
315
|
+
visible: this.props.logCurves,
|
|
316
|
+
getPath: (d) => {
|
|
317
|
+
var _a;
|
|
318
|
+
return getLogPath1(data.features, d, this.state["well"], this.state["selection"], this.props.logrunName, (_a = this.props.lineStyle) === null || _a === void 0 ? void 0 : _a.color);
|
|
319
|
+
},
|
|
320
|
+
getColor: (d) => getLogColor1(data.features, d, this.state["well"], this.state["selection"], this.props.logrunName),
|
|
321
|
+
getWidth: (d) => this.props.logRadius * 1.5 ||
|
|
322
|
+
getLogWidth(d, this.props.logrunName, this.props.logName),
|
|
323
|
+
updateTriggers: {
|
|
324
|
+
getColor: [
|
|
325
|
+
this.props.logrunName,
|
|
326
|
+
this.state["well"],
|
|
327
|
+
this.state["selection"],
|
|
328
|
+
],
|
|
329
|
+
getWidth: [
|
|
330
|
+
this.props.logrunName,
|
|
331
|
+
this.props.logName,
|
|
332
|
+
this.props.logRadius,
|
|
333
|
+
],
|
|
334
|
+
getPath: [
|
|
335
|
+
positionFormat,
|
|
336
|
+
this.props.logrunName,
|
|
337
|
+
this.state["well"],
|
|
338
|
+
this.state["selection"],
|
|
339
|
+
],
|
|
340
|
+
},
|
|
341
|
+
onDataLoad: (value) => {
|
|
342
|
+
this.setLegend(value);
|
|
343
|
+
},
|
|
344
|
+
parameters,
|
|
345
|
+
}));
|
|
346
|
+
// well name
|
|
347
|
+
const names = new TextLayer(this.getSubLayerProps({
|
|
348
|
+
id: "names",
|
|
349
|
+
data: data.features,
|
|
350
|
+
visible: this.props.wellNameVisible,
|
|
351
|
+
getPosition: (d) => {
|
|
352
|
+
var _a;
|
|
353
|
+
return getAnnotationPosition(d, this.props.wellNameAtTop, is3d, (_a = this.props.lineStyle) === null || _a === void 0 ? void 0 : _a.color);
|
|
354
|
+
},
|
|
355
|
+
getText: (d) => { var _a; return (_a = d.properties) === null || _a === void 0 ? void 0 : _a["name"]; },
|
|
356
|
+
getColor: this.props.wellNameColor,
|
|
357
|
+
getAnchor: "start",
|
|
358
|
+
getAlignmentBaseline: "bottom",
|
|
359
|
+
getSize: this.props.wellNameSize,
|
|
360
|
+
parameters,
|
|
361
|
+
}));
|
|
362
|
+
return [
|
|
363
|
+
outline,
|
|
364
|
+
log_layer,
|
|
365
|
+
colors,
|
|
366
|
+
highlight,
|
|
367
|
+
highlightMultiWells,
|
|
368
|
+
selection_layer,
|
|
369
|
+
names,
|
|
370
|
+
];
|
|
371
|
+
}
|
|
372
|
+
getPickingInfo({ info }) {
|
|
373
|
+
var _a, _b;
|
|
374
|
+
if (!info.object)
|
|
375
|
+
return Object.assign(Object.assign({}, info), { properties: [], logName: "" });
|
|
376
|
+
const coordinate = (info.coordinate || [0, 0, 0]);
|
|
377
|
+
let md_property = getMdProperty(coordinate, info.object, (_a = this.props.lineStyle) === null || _a === void 0 ? void 0 : _a.color, info.featureType);
|
|
378
|
+
if (!md_property) {
|
|
379
|
+
md_property = getLogProperty(coordinate, this.props.data.features, info.object, this.props.logrunName, "MD");
|
|
380
|
+
}
|
|
381
|
+
let tvd_property = getTvdProperty(coordinate, info.object, (_b = this.props.lineStyle) === null || _b === void 0 ? void 0 : _b.color, info.featureType);
|
|
382
|
+
if (!tvd_property) {
|
|
383
|
+
tvd_property = getLogProperty(coordinate, this.props.data.features, info.object, this.props.logrunName, "TVD");
|
|
384
|
+
}
|
|
385
|
+
const log_property = getLogProperty(coordinate, this.props.data.features, info.object, this.props.logrunName, this.props.logName);
|
|
386
|
+
// Patch for inverting tvd readout to fix issue #830,
|
|
387
|
+
// should make proper fix when handling z increase direction - issue #842
|
|
388
|
+
const inverted_tvd_property = tvd_property && Object.assign(Object.assign({}, tvd_property), { value: (tvd_property === null || tvd_property === void 0 ? void 0 : tvd_property.value) * -1 });
|
|
389
|
+
const layer_properties = [];
|
|
390
|
+
if (md_property)
|
|
391
|
+
layer_properties.push(md_property);
|
|
392
|
+
if (inverted_tvd_property)
|
|
393
|
+
layer_properties.push(inverted_tvd_property);
|
|
394
|
+
if (log_property)
|
|
395
|
+
layer_properties.push(log_property);
|
|
396
|
+
return Object.assign(Object.assign({}, info), { properties: layer_properties, logName: (log_property === null || log_property === void 0 ? void 0 : log_property.name) || "" });
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
WellsLayer.layerName = "WellsLayer";
|
|
400
|
+
WellsLayer.defaultProps = Object.assign(Object.assign({}, defaultProps), { onDataLoad: (data, context) => onDataLoad(data, context) });
|
|
401
|
+
//================= Local help functions. ==================
|
|
402
|
+
function getColumn(data, col) {
|
|
403
|
+
const column = [];
|
|
404
|
+
for (let i = 0; i < data.length; i++) {
|
|
405
|
+
column.push(data[i][col]);
|
|
406
|
+
}
|
|
407
|
+
return column;
|
|
408
|
+
}
|
|
409
|
+
function getLogMd(d, logrun_name) {
|
|
410
|
+
if (!isSelectedLogRun(d, logrun_name))
|
|
411
|
+
return [];
|
|
412
|
+
const names_md = ["DEPTH", "DEPT", "MD", "TDEP", "MD_RKB"]; // aliases for MD
|
|
413
|
+
const log_id = getLogIndexByNames(d, names_md);
|
|
414
|
+
return log_id >= 0 ? getColumn(d.data, log_id) : [];
|
|
415
|
+
}
|
|
416
|
+
export function getLogValues(d, logrun_name, log_name) {
|
|
417
|
+
if (!isSelectedLogRun(d, logrun_name))
|
|
418
|
+
return [];
|
|
419
|
+
const log_id = getLogIndexByName(d, log_name);
|
|
420
|
+
return log_id >= 0 ? getColumn(d.data, log_id) : [];
|
|
421
|
+
}
|
|
422
|
+
export function getLogInfo(d, logrun_name, log_name) {
|
|
423
|
+
if (!isSelectedLogRun(d, logrun_name))
|
|
424
|
+
return undefined;
|
|
425
|
+
const log_id = getLogIndexByName(d, log_name);
|
|
426
|
+
return d.curves[log_id];
|
|
427
|
+
}
|
|
428
|
+
function getDiscreteLogMetadata(d, log_name) {
|
|
429
|
+
return d === null || d === void 0 ? void 0 : d.metadata_discrete[log_name];
|
|
430
|
+
}
|
|
431
|
+
function isSelectedLogRun(d, logrun_name) {
|
|
432
|
+
return d.header.name.toLowerCase() === logrun_name.toLowerCase();
|
|
433
|
+
}
|
|
434
|
+
// return position for well name and icon
|
|
435
|
+
function getAnnotationPosition(well_data, name_at_top, view_is_3d, color_accessor) {
|
|
436
|
+
if (name_at_top) {
|
|
437
|
+
let top;
|
|
438
|
+
// Read top position from Point geometry, if not present, read it from LineString geometry
|
|
439
|
+
const well_head = getWellHeadPosition(well_data);
|
|
440
|
+
if (well_data)
|
|
441
|
+
top = well_head;
|
|
442
|
+
else {
|
|
443
|
+
const trajectory = getTrajectory(well_data, color_accessor);
|
|
444
|
+
top = trajectory === null || trajectory === void 0 ? void 0 : trajectory.at(0);
|
|
445
|
+
}
|
|
446
|
+
// using z=0 for orthographic view to keep label above other other layers
|
|
447
|
+
if (top)
|
|
448
|
+
return view_is_3d ? top : [top[0], top[1], 0];
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
let bot;
|
|
452
|
+
// if trajectory is not present, return top position from Point geometry
|
|
453
|
+
const trajectory = getTrajectory(well_data, color_accessor);
|
|
454
|
+
if (trajectory)
|
|
455
|
+
bot = trajectory === null || trajectory === void 0 ? void 0 : trajectory.at(-1);
|
|
456
|
+
else
|
|
457
|
+
bot = getWellHeadPosition(well_data);
|
|
458
|
+
// using z=0 for orthographic view to keep label above other other layers
|
|
459
|
+
if (bot)
|
|
460
|
+
return view_is_3d ? bot : [bot[0], bot[1], 0];
|
|
461
|
+
}
|
|
462
|
+
return null;
|
|
463
|
+
}
|
|
464
|
+
function getWellObjectByName(wells_data, name) {
|
|
465
|
+
return wells_data === null || wells_data === void 0 ? void 0 : wells_data.find((item) => { var _a, _b; return ((_b = (_a = item.properties) === null || _a === void 0 ? void 0 : _a["name"]) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === (name === null || name === void 0 ? void 0 : name.toLowerCase()); });
|
|
466
|
+
}
|
|
467
|
+
function getWellObjectsByName(wells_data, name) {
|
|
468
|
+
const res = [];
|
|
469
|
+
for (let i = 0; i < (name === null || name === void 0 ? void 0 : name.length); i++) {
|
|
470
|
+
wells_data === null || wells_data === void 0 ? void 0 : wells_data.find((item) => {
|
|
471
|
+
var _a, _b, _c;
|
|
472
|
+
if (((_b = (_a = item.properties) === null || _a === void 0 ? void 0 : _a["name"]) === null || _b === void 0 ? void 0 : _b.toLowerCase()) ===
|
|
473
|
+
((_c = name[i]) === null || _c === void 0 ? void 0 : _c.toLowerCase())) {
|
|
474
|
+
res.push(item);
|
|
475
|
+
}
|
|
476
|
+
});
|
|
477
|
+
}
|
|
478
|
+
return res;
|
|
479
|
+
}
|
|
480
|
+
function getPointGeometry(well_object) {
|
|
481
|
+
var _a;
|
|
482
|
+
return (_a = well_object.geometry) === null || _a === void 0 ? void 0 : _a.geometries.find((item) => item.type == "Point");
|
|
483
|
+
}
|
|
484
|
+
function getLineStringGeometry(well_object) {
|
|
485
|
+
var _a;
|
|
486
|
+
return (_a = well_object.geometry) === null || _a === void 0 ? void 0 : _a.geometries.find((item) => item.type == "LineString");
|
|
487
|
+
}
|
|
488
|
+
// Return well head position from Point Geometry
|
|
489
|
+
function getWellHeadPosition(well_object) {
|
|
490
|
+
var _a;
|
|
491
|
+
return (_a = getPointGeometry(well_object)) === null || _a === void 0 ? void 0 : _a.coordinates;
|
|
492
|
+
}
|
|
493
|
+
// return trajectory visibility based on alpha of trajectory color
|
|
494
|
+
function isTrajectoryVisible(well_object, color_accessor) {
|
|
495
|
+
var _a;
|
|
496
|
+
let alpha;
|
|
497
|
+
const accessor = getColor(color_accessor);
|
|
498
|
+
if (typeof accessor === "function") {
|
|
499
|
+
alpha = (_a = accessor(well_object)) === null || _a === void 0 ? void 0 : _a[3];
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
alpha = accessor === null || accessor === void 0 ? void 0 : accessor[3];
|
|
503
|
+
}
|
|
504
|
+
return alpha !== 0;
|
|
505
|
+
}
|
|
506
|
+
// Return Trajectory data from LineString Geometry if it's visible (checking trajectory visiblity based on line color)
|
|
507
|
+
function getTrajectory(well_object, color_accessor) {
|
|
508
|
+
var _a;
|
|
509
|
+
if (isTrajectoryVisible(well_object, color_accessor))
|
|
510
|
+
return (_a = getLineStringGeometry(well_object)) === null || _a === void 0 ? void 0 : _a.coordinates;
|
|
511
|
+
else
|
|
512
|
+
return undefined;
|
|
513
|
+
}
|
|
514
|
+
function getWellMds(well_object) {
|
|
515
|
+
var _a;
|
|
516
|
+
return (_a = well_object.properties) === null || _a === void 0 ? void 0 : _a["md"][0];
|
|
517
|
+
}
|
|
518
|
+
function getNeighboringMdIndices(mds, md) {
|
|
519
|
+
const idx = mds.findIndex((x) => x >= md);
|
|
520
|
+
return idx === 0 ? [idx, idx + 1] : [idx - 1, idx];
|
|
521
|
+
}
|
|
522
|
+
function getPositionByMD(well_xyz, well_mds, md) {
|
|
523
|
+
const [l_idx, h_idx] = getNeighboringMdIndices(well_mds, md);
|
|
524
|
+
const md_low = well_mds[l_idx];
|
|
525
|
+
const md_normalized = (md - md_low) / (well_mds[h_idx] - md_low);
|
|
526
|
+
return interpolateNumberArray(well_xyz[l_idx], well_xyz[h_idx])(md_normalized);
|
|
527
|
+
}
|
|
528
|
+
function getLogPath(wells_data, d, logrun_name, trajectory_line_color) {
|
|
529
|
+
const well_object = getWellObjectByName(wells_data, d.header.well);
|
|
530
|
+
if (!well_object)
|
|
531
|
+
return [];
|
|
532
|
+
const well_xyz = getTrajectory(well_object, trajectory_line_color);
|
|
533
|
+
const well_mds = getWellMds(well_object);
|
|
534
|
+
if (well_xyz == undefined ||
|
|
535
|
+
well_mds == undefined ||
|
|
536
|
+
well_xyz.length == 0 ||
|
|
537
|
+
well_mds.length == 0)
|
|
538
|
+
return [];
|
|
539
|
+
const log_xyz = [];
|
|
540
|
+
const log_mds = getLogMd(d, logrun_name);
|
|
541
|
+
log_mds.forEach((md) => {
|
|
542
|
+
const xyz = getPositionByMD(well_xyz, well_mds, md);
|
|
543
|
+
log_xyz.push(xyz);
|
|
544
|
+
});
|
|
545
|
+
return log_xyz;
|
|
546
|
+
}
|
|
547
|
+
function getLogIndexByName(d, log_name) {
|
|
548
|
+
const name = log_name.toLowerCase();
|
|
549
|
+
return d.curves.findIndex((item) => item.name.toLowerCase() === name);
|
|
550
|
+
}
|
|
551
|
+
function getLogIndexByNames(d, names) {
|
|
552
|
+
for (const name of names) {
|
|
553
|
+
const index = getLogIndexByName(d, name);
|
|
554
|
+
if (index >= 0)
|
|
555
|
+
return index;
|
|
556
|
+
}
|
|
557
|
+
return -1;
|
|
558
|
+
}
|
|
559
|
+
function getLogColor(d, logrun_name, log_name, logColor, colorTables,
|
|
560
|
+
// eslint-disable-next-line
|
|
561
|
+
colorMappingFunction, isLog) {
|
|
562
|
+
var _a;
|
|
563
|
+
const log_data = getLogValues(d, logrun_name, log_name);
|
|
564
|
+
const log_info = getLogInfo(d, logrun_name, log_name);
|
|
565
|
+
if (log_data.length == 0 || log_info == undefined)
|
|
566
|
+
return [];
|
|
567
|
+
const log_color = [];
|
|
568
|
+
if (log_info.description == "continuous") {
|
|
569
|
+
const min = Math.min(...log_data);
|
|
570
|
+
const max = Math.max(...log_data);
|
|
571
|
+
const max_delta = max - min;
|
|
572
|
+
log_data.forEach((value) => {
|
|
573
|
+
const rgb = colorMappingFunction
|
|
574
|
+
? colorMappingFunction((value - min) / max_delta)
|
|
575
|
+
: rgbValues((value - min) / max_delta, logColor, colorTables);
|
|
576
|
+
rgbValues(value - min / max_delta, logColor, colorTables, isLog);
|
|
577
|
+
if (rgb) {
|
|
578
|
+
if (Array.isArray(rgb)) {
|
|
579
|
+
log_color.push([rgb[0], rgb[1], rgb[2]]);
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
log_color.push([rgb === null || rgb === void 0 ? void 0 : rgb.r, rgb === null || rgb === void 0 ? void 0 : rgb.g, rgb === null || rgb === void 0 ? void 0 : rgb.b]);
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
else {
|
|
586
|
+
log_color.push([0, 0, 0, 0]); // push transparent for null/undefined log values
|
|
587
|
+
}
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
591
|
+
// well log data set for ex : H1: Array(2)0: (4) [255, 26, 202, 255] 1: 13
|
|
592
|
+
const log_attributes = (_a = getDiscreteLogMetadata(d, log_name)) === null || _a === void 0 ? void 0 : _a.objects;
|
|
593
|
+
const logLength = Object.keys(log_attributes).length;
|
|
594
|
+
// eslint-disable-next-line
|
|
595
|
+
const attributesObject = {};
|
|
596
|
+
const categorial = true;
|
|
597
|
+
Object.keys(log_attributes).forEach((key) => {
|
|
598
|
+
// get the point from log_attributes
|
|
599
|
+
const point = log_attributes[key][1];
|
|
600
|
+
const categorialMin = 0;
|
|
601
|
+
const categorialMax = logLength - 1;
|
|
602
|
+
let rgb;
|
|
603
|
+
if (colorMappingFunction) {
|
|
604
|
+
rgb = colorMappingFunction(point, categorial, categorialMin, categorialMax);
|
|
605
|
+
}
|
|
606
|
+
else {
|
|
607
|
+
// if colormap function is not defined
|
|
608
|
+
const arrayOfColors = getColors(logColor, colorTables, point);
|
|
609
|
+
if (!arrayOfColors.length)
|
|
610
|
+
console.error("Empty or missed '" + logColor + "' color table");
|
|
611
|
+
rgb = arrayOfColors;
|
|
612
|
+
}
|
|
613
|
+
if (rgb) {
|
|
614
|
+
if (Array.isArray(rgb)) {
|
|
615
|
+
if (rgb.length === 3) {
|
|
616
|
+
attributesObject[key] = [
|
|
617
|
+
[rgb[0], rgb[1], rgb[2]],
|
|
618
|
+
point,
|
|
619
|
+
];
|
|
620
|
+
}
|
|
621
|
+
else {
|
|
622
|
+
attributesObject[key] = [
|
|
623
|
+
[rgb[1], rgb[2], rgb[3]],
|
|
624
|
+
point,
|
|
625
|
+
];
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
attributesObject[key] = [[rgb.r, rgb.g, rgb.b], point];
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
});
|
|
633
|
+
log_data.forEach((log_value) => {
|
|
634
|
+
var _a;
|
|
635
|
+
const dl_attrs = (_a = Object.entries(attributesObject).find(([, value]) => value[1] == log_value)) === null || _a === void 0 ? void 0 : _a[1];
|
|
636
|
+
dl_attrs
|
|
637
|
+
? log_color.push(dl_attrs[0])
|
|
638
|
+
: log_color.push([0, 0, 0, 0]); // use transparent for undefined/null log values
|
|
639
|
+
});
|
|
640
|
+
}
|
|
641
|
+
return log_color;
|
|
642
|
+
}
|
|
643
|
+
function getLogPath1(wells_data, d, selectedWell, selection, logrun_name, trajectory_line_color) {
|
|
644
|
+
if (!selection || selectedWell !== d.header.well)
|
|
645
|
+
return [];
|
|
646
|
+
const well_object = getWellObjectByName(wells_data, d.header.well);
|
|
647
|
+
if (!well_object)
|
|
648
|
+
return [];
|
|
649
|
+
const well_xyz = getTrajectory(well_object, trajectory_line_color);
|
|
650
|
+
const well_mds = getWellMds(well_object);
|
|
651
|
+
if (well_xyz == undefined ||
|
|
652
|
+
well_mds == undefined ||
|
|
653
|
+
well_xyz.length == 0 ||
|
|
654
|
+
well_mds.length == 0)
|
|
655
|
+
return [];
|
|
656
|
+
const log_mds = getLogMd(d, logrun_name);
|
|
657
|
+
if (!log_mds)
|
|
658
|
+
return [];
|
|
659
|
+
const log_xyz = [];
|
|
660
|
+
let md0 = selection[0];
|
|
661
|
+
if (md0 !== undefined) {
|
|
662
|
+
let md1 = selection[1];
|
|
663
|
+
if (md1 == md0)
|
|
664
|
+
md1 = undefined;
|
|
665
|
+
const mdFirst = well_mds[0];
|
|
666
|
+
const mdLast = well_mds[well_mds.length - 1];
|
|
667
|
+
if (md1 !== undefined) {
|
|
668
|
+
if (md0 > md1) {
|
|
669
|
+
const tmp = md0;
|
|
670
|
+
md0 = md1;
|
|
671
|
+
md1 = tmp;
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
const delta = 2;
|
|
675
|
+
if (md0 - delta > mdFirst) {
|
|
676
|
+
let xyz = getPositionByMD(well_xyz, well_mds, md0 - delta);
|
|
677
|
+
log_xyz.push(xyz);
|
|
678
|
+
xyz = getPositionByMD(well_xyz, well_mds, md0);
|
|
679
|
+
log_xyz.push(xyz);
|
|
680
|
+
}
|
|
681
|
+
if (md1 !== undefined) {
|
|
682
|
+
const _md1 = md1;
|
|
683
|
+
let index = 0;
|
|
684
|
+
well_mds.forEach((md) => {
|
|
685
|
+
if (md0 <= md && md <= _md1) {
|
|
686
|
+
const xyz = well_xyz[index];
|
|
687
|
+
log_xyz.push(xyz);
|
|
688
|
+
}
|
|
689
|
+
index++;
|
|
690
|
+
});
|
|
691
|
+
if (_md1 + delta < mdLast) {
|
|
692
|
+
let xyz = getPositionByMD(well_xyz, well_mds, _md1);
|
|
693
|
+
log_xyz.push(xyz);
|
|
694
|
+
xyz = getPositionByMD(well_xyz, well_mds, _md1 + delta);
|
|
695
|
+
log_xyz.push(xyz);
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
return log_xyz;
|
|
700
|
+
}
|
|
701
|
+
function getLogColor1(wells_data, d, selectedWell, selection, logrun_name) {
|
|
702
|
+
if (!selection || selectedWell !== d.header.well)
|
|
703
|
+
return [];
|
|
704
|
+
const well_object = getWellObjectByName(wells_data, d.header.well);
|
|
705
|
+
if (!well_object)
|
|
706
|
+
return [];
|
|
707
|
+
const well_mds = getWellMds(well_object);
|
|
708
|
+
const log_mds = getLogMd(d, logrun_name);
|
|
709
|
+
if (!log_mds || log_mds.length === 0)
|
|
710
|
+
return [];
|
|
711
|
+
const log_color = [];
|
|
712
|
+
let md0 = selection[0];
|
|
713
|
+
if (md0 !== undefined) {
|
|
714
|
+
const mdFirst = well_mds[0];
|
|
715
|
+
const mdLast = well_mds[well_mds.length - 1];
|
|
716
|
+
let md1 = selection[1];
|
|
717
|
+
if (md1 == md0)
|
|
718
|
+
md1 = undefined;
|
|
719
|
+
let swap = false;
|
|
720
|
+
if (md1 !== undefined) {
|
|
721
|
+
if (md0 > md1) {
|
|
722
|
+
const tmp = md0;
|
|
723
|
+
md0 = md1;
|
|
724
|
+
md1 = tmp;
|
|
725
|
+
swap = true;
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
const delta = 2;
|
|
729
|
+
if (md0 - delta > mdFirst)
|
|
730
|
+
log_color.push(swap ? [0, 255, 0, 128] : [255, 0, 0, 128]);
|
|
731
|
+
if (md1 !== undefined) {
|
|
732
|
+
const _md1 = md1;
|
|
733
|
+
log_color.push([128, 128, 128, 128]);
|
|
734
|
+
well_mds.forEach((md) => {
|
|
735
|
+
if (md0 <= md && md <= _md1) {
|
|
736
|
+
log_color.push([128, 128, 128, 128]);
|
|
737
|
+
}
|
|
738
|
+
});
|
|
739
|
+
if (_md1 + delta < mdLast)
|
|
740
|
+
log_color.push(swap ? [255, 0, 0, 128] : [0, 255, 0, 128]);
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
return log_color;
|
|
744
|
+
}
|
|
745
|
+
function getLogWidth(d, logrun_name, log_name) {
|
|
746
|
+
return getLogValues(d, logrun_name, log_name);
|
|
747
|
+
}
|
|
748
|
+
function squared_distance(a, b) {
|
|
749
|
+
const dx = a[0] - b[0];
|
|
750
|
+
const dy = a[1] - b[1];
|
|
751
|
+
return dx * dx + dy * dy;
|
|
752
|
+
}
|
|
753
|
+
// Return distance between line segment vw and point p
|
|
754
|
+
function distToSegmentSquared(v, w, p) {
|
|
755
|
+
const l2 = squared_distance(v, w);
|
|
756
|
+
if (l2 == 0)
|
|
757
|
+
return squared_distance(p, v);
|
|
758
|
+
let t = ((p[0] - v[0]) * (w[0] - v[0]) + (p[1] - v[1]) * (w[1] - v[1])) / l2;
|
|
759
|
+
t = Math.max(0, Math.min(1, t));
|
|
760
|
+
return squared_distance(p, [
|
|
761
|
+
v[0] + t * (w[0] - v[0]),
|
|
762
|
+
v[1] + t * (w[1] - v[1]),
|
|
763
|
+
]);
|
|
764
|
+
}
|
|
765
|
+
// Interpolates point closest to the coords on trajectory
|
|
766
|
+
function interpolateDataOnTrajectory(coord, data, trajectory) {
|
|
767
|
+
// if number of data points in less than 1 or
|
|
768
|
+
// length of data and trajectory are different we cannot interpolate.
|
|
769
|
+
if (data.length <= 1 || data.length != trajectory.length)
|
|
770
|
+
return -1;
|
|
771
|
+
// Identify closest well path leg to coord.
|
|
772
|
+
const segment_index = getSegmentIndex(coord, trajectory);
|
|
773
|
+
const index0 = segment_index;
|
|
774
|
+
const index1 = index0 + 1;
|
|
775
|
+
// Get the nearest data.
|
|
776
|
+
const data0 = data[index0];
|
|
777
|
+
const data1 = data[index1];
|
|
778
|
+
// Get the nearest survey points.
|
|
779
|
+
const survey0 = trajectory[index0];
|
|
780
|
+
const survey1 = trajectory[index1];
|
|
781
|
+
const dv = distance(survey0, survey1);
|
|
782
|
+
if (dv === 0) {
|
|
783
|
+
return -1;
|
|
784
|
+
}
|
|
785
|
+
// Calculate the scalar projection onto segment.
|
|
786
|
+
const v0 = subtract(coord, survey0);
|
|
787
|
+
const v1 = subtract(survey1, survey0);
|
|
788
|
+
// scalar_projection in interval [0,1]
|
|
789
|
+
const scalar_projection = dot(v0, v1) / (dv * dv);
|
|
790
|
+
// Interpolate data.
|
|
791
|
+
return data0 * (1.0 - scalar_projection) + data1 * scalar_projection;
|
|
792
|
+
}
|
|
793
|
+
function getMd(coord, feature, accessor) {
|
|
794
|
+
var _a, _b;
|
|
795
|
+
if (!((_b = (_a = feature.properties) === null || _a === void 0 ? void 0 : _a["md"]) === null || _b === void 0 ? void 0 : _b[0]) || !feature.geometry)
|
|
796
|
+
return null;
|
|
797
|
+
const measured_depths = feature.properties["md"][0];
|
|
798
|
+
const trajectory3D = getTrajectory(feature, accessor);
|
|
799
|
+
if (trajectory3D == undefined)
|
|
800
|
+
return null;
|
|
801
|
+
let trajectory;
|
|
802
|
+
// In 2D view coord is of type Position2D and in 3D view it's Position3D,
|
|
803
|
+
// so use apropriate trajectory for interpolation
|
|
804
|
+
if (coord.length == 2) {
|
|
805
|
+
const trajectory2D = trajectory3D.map((v) => {
|
|
806
|
+
return v.slice(0, 2);
|
|
807
|
+
});
|
|
808
|
+
trajectory = trajectory2D;
|
|
809
|
+
}
|
|
810
|
+
else {
|
|
811
|
+
trajectory = trajectory3D;
|
|
812
|
+
}
|
|
813
|
+
return interpolateDataOnTrajectory(coord, measured_depths, trajectory);
|
|
814
|
+
}
|
|
815
|
+
function getMdProperty(coord, feature, accessor, featureType) {
|
|
816
|
+
var _a, _b;
|
|
817
|
+
if (featureType === "points") {
|
|
818
|
+
return null;
|
|
819
|
+
}
|
|
820
|
+
const md = getMd(coord, feature, accessor);
|
|
821
|
+
if (md != null) {
|
|
822
|
+
const prop_name = "MD " + ((_a = feature.properties) === null || _a === void 0 ? void 0 : _a["name"]);
|
|
823
|
+
return createPropertyData(prop_name, md, (_b = feature.properties) === null || _b === void 0 ? void 0 : _b["color"]);
|
|
824
|
+
}
|
|
825
|
+
return null;
|
|
826
|
+
}
|
|
827
|
+
function getTvd(coord, feature, accessor) {
|
|
828
|
+
var _a;
|
|
829
|
+
const trajectory3D = getTrajectory(feature, accessor);
|
|
830
|
+
// if trajectory is not found or if it has a data single point then get tvd from well head
|
|
831
|
+
if (trajectory3D == undefined || (trajectory3D === null || trajectory3D === void 0 ? void 0 : trajectory3D.length) <= 1) {
|
|
832
|
+
const wellhead_xyz = getWellHeadPosition(feature);
|
|
833
|
+
return (_a = wellhead_xyz === null || wellhead_xyz === void 0 ? void 0 : wellhead_xyz[2]) !== null && _a !== void 0 ? _a : null;
|
|
834
|
+
}
|
|
835
|
+
let trajectory;
|
|
836
|
+
// For 2D view coord is Position2D and for 3D view it's Position3D
|
|
837
|
+
if (coord.length == 2) {
|
|
838
|
+
const trajectory2D = trajectory3D === null || trajectory3D === void 0 ? void 0 : trajectory3D.map((v) => {
|
|
839
|
+
return v.slice(0, 2);
|
|
840
|
+
});
|
|
841
|
+
trajectory = trajectory2D;
|
|
842
|
+
}
|
|
843
|
+
else {
|
|
844
|
+
trajectory = trajectory3D;
|
|
845
|
+
}
|
|
846
|
+
const tvds = trajectory3D.map((v) => {
|
|
847
|
+
return v[2];
|
|
848
|
+
});
|
|
849
|
+
return interpolateDataOnTrajectory(coord, tvds, trajectory);
|
|
850
|
+
}
|
|
851
|
+
function getTvdProperty(coord, feature, accessor, featureType) {
|
|
852
|
+
var _a, _b;
|
|
853
|
+
if (featureType === "points") {
|
|
854
|
+
return null;
|
|
855
|
+
}
|
|
856
|
+
const tvd = getTvd(coord, feature, accessor);
|
|
857
|
+
if (tvd != null) {
|
|
858
|
+
const prop_name = "TVD " + ((_a = feature.properties) === null || _a === void 0 ? void 0 : _a["name"]);
|
|
859
|
+
return createPropertyData(prop_name, tvd, (_b = feature.properties) === null || _b === void 0 ? void 0 : _b["color"]);
|
|
860
|
+
}
|
|
861
|
+
return null;
|
|
862
|
+
}
|
|
863
|
+
// Identify closest path leg to coord.
|
|
864
|
+
function getSegmentIndex(coord, path) {
|
|
865
|
+
let min_d = Number.MAX_VALUE;
|
|
866
|
+
let segment_index = 0;
|
|
867
|
+
for (let i = 0; i < (path === null || path === void 0 ? void 0 : path.length) - 1; i++) {
|
|
868
|
+
const d = distToSegmentSquared(path[i], path[i + 1], coord);
|
|
869
|
+
if (d > min_d)
|
|
870
|
+
continue;
|
|
871
|
+
segment_index = i;
|
|
872
|
+
min_d = d;
|
|
873
|
+
}
|
|
874
|
+
return segment_index;
|
|
875
|
+
}
|
|
876
|
+
// Returns segment index of discrete logs
|
|
877
|
+
function getLogSegmentIndex(coord, wells_data, log_data, logrun_name) {
|
|
878
|
+
const trajectory = getLogPath(wells_data, log_data, logrun_name);
|
|
879
|
+
return getSegmentIndex(coord, trajectory);
|
|
880
|
+
}
|
|
881
|
+
function getLogProperty(coord, wells_data, log_data, logrun_name, log_name) {
|
|
882
|
+
var _a, _b, _c;
|
|
883
|
+
if (!log_data.data)
|
|
884
|
+
return null;
|
|
885
|
+
const segment_index = getLogSegmentIndex(coord, wells_data, log_data, logrun_name);
|
|
886
|
+
let log_value = getLogValues(log_data, logrun_name, log_name)[segment_index];
|
|
887
|
+
let dl_attrs = undefined;
|
|
888
|
+
const dl_metadata = (_a = getDiscreteLogMetadata(log_data, log_name)) === null || _a === void 0 ? void 0 : _a.objects;
|
|
889
|
+
if (dl_metadata) {
|
|
890
|
+
dl_attrs = Object.entries(dl_metadata).find(([, value]) => value[1] == log_value);
|
|
891
|
+
}
|
|
892
|
+
const log = (_b = getLogInfo(log_data, logrun_name, log_name)) === null || _b === void 0 ? void 0 : _b.name;
|
|
893
|
+
const prop_name = log + " " + log_data.header.well;
|
|
894
|
+
log_value = dl_attrs ? dl_attrs[0] + " (" + log_value + ")" : log_value;
|
|
895
|
+
if (log_value) {
|
|
896
|
+
const well_object = getWellObjectByName(wells_data, log_data.header.well);
|
|
897
|
+
return createPropertyData(prop_name, log_value, (_c = well_object === null || well_object === void 0 ? void 0 : well_object.properties) === null || _c === void 0 ? void 0 : _c["color"]);
|
|
898
|
+
}
|
|
899
|
+
else
|
|
900
|
+
return null;
|
|
901
|
+
}
|
|
902
|
+
// Return data required to build welllayer legend
|
|
903
|
+
function getLegendData(logs, wellName, logName, logColor) {
|
|
904
|
+
if (!logs)
|
|
905
|
+
return null;
|
|
906
|
+
const log = wellName
|
|
907
|
+
? logs.find((log) => log.header.well == wellName)
|
|
908
|
+
: logs[0];
|
|
909
|
+
const logInfo = !log
|
|
910
|
+
? undefined
|
|
911
|
+
: getLogInfo(log, log.header.name, logName);
|
|
912
|
+
const title = "Wells / " + logName;
|
|
913
|
+
if (log && (logInfo === null || logInfo === void 0 ? void 0 : logInfo.description) == "discrete") {
|
|
914
|
+
const meta = log["metadata_discrete"];
|
|
915
|
+
const metadataDiscrete = meta[logName].objects;
|
|
916
|
+
return {
|
|
917
|
+
title: title,
|
|
918
|
+
colorName: logColor,
|
|
919
|
+
discrete: true,
|
|
920
|
+
metadata: metadataDiscrete,
|
|
921
|
+
};
|
|
922
|
+
}
|
|
923
|
+
else {
|
|
924
|
+
const minArray = [];
|
|
925
|
+
const maxArray = [];
|
|
926
|
+
logs.forEach(function (log) {
|
|
927
|
+
const logValues = getLogValues(log, log.header.name, logName);
|
|
928
|
+
minArray.push(Math.min(...logValues));
|
|
929
|
+
maxArray.push(Math.max(...logValues));
|
|
930
|
+
});
|
|
931
|
+
return {
|
|
932
|
+
title: title,
|
|
933
|
+
colorName: logColor,
|
|
934
|
+
discrete: false,
|
|
935
|
+
valueRange: [Math.min(...minArray), Math.max(...maxArray)],
|
|
936
|
+
};
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
//# sourceMappingURL=wellsLayer.js.map
|