Comments (11)
I tried looking into tile generation/serving. No conclusion, but posting some links you can check out.
- GDAL which Troll maps are using works good for pre-generating tiles and reading them from disk.
- Looks like TileMill (github) can generate tiles in MBTiles format, but seems like that maybe also uses GDAL?.
- Leaflet.TileLayer.MBTiles can display MBTiles in Leaflet (only raster tiles).
- Tilelive Fast interface to tiles with pluggable backends
- TileCache
- TileStache
- TileStream
- MapTiler
- TileCloud Chain
- PGRestAPI
- TileServer GL
Vector tiles is probably not the solution for surfaces, but could maybe be used for other data, e.g. cylinder logs?
- mapbox-vector-tile
- geojson-vt Create vector tiles on-the-fly without a server. Explanation
- Leaflet.VectorTileLayer Slice GeoJSON/TopoJSON into vector tiles or display vector tiles hosted and transferred with protobuf. Seems like it does not work with MBTiles format yet.
- Mapbox GL Leaflet WebGL layer for vector tiles.
from webviz-subsurface-components.
This is a summary of feature requests that is aimed for being included in the Dash LayeredMap
component ("version 2") - which will replace and improve the existing LayeredMap
component.
The existing component can be viewed in action in the live demo on e.g. pages "Surface with seismic cross-section" (which shows how the user can draw a line, update the component state, and use Dash callbacks to update another Dash component) and "Surface viewer (FMU)" (which shows usage of syncing different instances of the same component). Example of Python usage of the current version is available here.
It can be assumed that the data to be visualized is available locally on disk, and available to the Python instance running.
Existing features that should probably be kept in some way:
- Possibility for the Python user to send map data in some efficient format, appearing in different layers in the map.
- Possibility for the Python user to send overlays (lines, polygons, circles etc.) with tooltips.
- Possibility for the Python user to say that some given instances should sync zoom/pan.
- Possibility for the Python user to allow the client/browser user to scale the y axis (e.g. if the visualized data is not a map, but seismic intersection).
- Possibility for the Python user to allow the client/browser user to turn on/off hill shading.*
- Possibility for the Python user to allow the client/browser user to draw line/polygon or place a circle (which updates some state in the component based on the coordinates of the drawn object). The Python user can then use this state as input to further Dash callbacks.
* We have some simple hill shading implemented in the current version using WebGL. This could be improved (see this and this reference for inspiration).
Improvements to existing features / new features:
- Might be better to work directly on https://leafletjs.com/ compared with the currently used https://react-leaflet.js.org/ (and instead do the top React wrapping towards the Dash component building ourselves).
xy
position and value of map indicated on hover.- Show colorscales of selected maps.
- Possibility to do client side selection of used colormap (using e.g. Plotly's own colorscale React component).
- Possibility to have logarithmic colormap.
- Possibility to set cut-off points on colormap (i.e. that all values below/above cut-off has same color).
- Currently if any of the visualized data is updated, all the visualized data needs to be sent again from server to client. Only send changed data.
- Currently only "static" data is supported, which do not scale to big data sets/maps. Investigate usage of tile server (preferably served by Flask to be within the same software stack as Dash). Efficient creation of the tiles is not within scope of the project. Can e.g. assume they are premade and available on disk, and then maybe use something along the lines of this concept:
from flask import Flask
app = Flask(__name__)
@app.route("/tiles/<zoom>/<y>/<x>")
def tiles(zoom, y, x):
return send_file(f"./sometile{zoom}_{x}_{y}.png")
if __name__ == "__main__":
app.run(debug=False, host="localhost", port=8080)
from webviz-subsurface-components.
A bit more explanation on the "logarithmic colormap" and "cut-of points" on colormap.
- The Python user of the component should be able to choose between linear and logarithmic scale (default linear).
- The Python user should be able to set end-points of the colormap (default could be min-max of input data).
- If user provides a colormap min/max end point that is higher/lower than global min/max in the map data, could show a ≤/≥ to indicate that the end point of the colormap is used as a "cut-off".
- If user provides a colormap min/max end point that is lower/higher than global min/max in the map data, the effect is simply a larger range of the colormap.
A rough sketch of linear/logarithmic in MS Paint 😎 🎨
from webviz-subsurface-components.
Sounds good! 🎉🚀 I guess we might want to collaborate on that same PR #109, when people have time (cc @anders-kiaer, @HansKallekleiv, @thor85 ++) - we can always go back some commits if we decide on going a different route.
Since this is a big issue - we can maybe put our name behind each of the subtasks when self-assigning something, such that we don't work on the same item simultaneously.
from webviz-subsurface-components.
Good plan. Also feel free to add any tasks / ideas to this issue. The list above is far from complete.
from webviz-subsurface-components.
I would also like to have an option to print a well name along a well (not only as tooltip)
from webviz-subsurface-components.
I would also like to have an option to print a well name along a well (not only as tooltip)
Currently I show wellnames on a tileLayer in Troll Maps, but I have made a branch where I display names as svg. It was noticeably slower on Troll with so many wellbores, so I left it for a while untill I have time to look at a different option (maybe pixiJS?). Svg probably works fine for most fields with much less wells though.
from webviz-subsurface-components.
Correct colormap scaling given min-/max values (both for map values inside or outside given min/max)
from webviz-subsurface-components.
Possibility to change the map without having to add the well layers again
from webviz-subsurface-components.
Should have an option for logarithmic colormap (e.g. for permeability)
from webviz-subsurface-components.
Implemented in #219. Let us move any remaining missing/wanted feature requests to separate issues.
from webviz-subsurface-components.
Related Issues (20)
- [NGRM]: PolylinesLayer performance and memory usage improvements.
- Support discrete properties in Grid3D Layer
- Section view for SubsurfaceViewer component
- Incorrect 2D axes rendering with vertical scaling
- Not able to rotate/pan while loading layers.
- Wells does not update when property "wellNameAtTop" is changed.
- [NGRM] - Grid3DLayer: Incorrect coloring by discrete property.
- API to control vertical scaling in 3D
- [NGRM] - Add property "formatLabelFunc" to set a callback funtion for formating label numbers
- [NGRM] WLV callback to reset component to given props HOT 2
- Logarithmic colorscales in maps HOT 3
- [NGRM] - Grid3DLayer: Incorrect coloring of property values equal to colorRange.
- Grid3DLayer: display discrete property names in the readouts.
- [NGRM] - SLV layout conflicts with MUI Grid HOT 5
- Incorrect depth readout after vertical re-scaling HOT 1
- Well trajectory unfolded projection HOT 1
- [NGRM] - Axes2DLayer; Introduce a property "labelFontSizePt" to enable controlling the size of the labels.
- [NGRM] - Display discrete value in Grid3dLayer readout.
- [NGRM] - Provide API not to display specific well pick in sync log view
- [NGRM] - Scrolling is erratic when flattening in sync log viewer HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from webviz-subsurface-components.