Spaces:
Runtime error
Runtime error
Create app.py
Browse files
app.py
ADDED
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import pydeck as pdk
|
3 |
+
import numpy as np
|
4 |
+
|
5 |
+
# Define a data set
|
6 |
+
data = np.random.randn(1000, 2) * 0.1
|
7 |
+
layer = pdk.Layer(
|
8 |
+
"ScatterplotLayer",
|
9 |
+
data=data,
|
10 |
+
get_position="[0, 1]",
|
11 |
+
get_color="[200, 30, 0, 160]",
|
12 |
+
get_radius=50,
|
13 |
+
)
|
14 |
+
|
15 |
+
# Define a Pydeck view state
|
16 |
+
view_state = pdk.ViewState(latitude=37.7749, longitude=-122.4194, zoom=11)
|
17 |
+
|
18 |
+
# Define Pydeck initial rendering options
|
19 |
+
initial_options = pdk.Deck(
|
20 |
+
map_style="mapbox://styles/mapbox/dark-v9",
|
21 |
+
layers=[layer],
|
22 |
+
initial_view_state=view_state,
|
23 |
+
)
|
24 |
+
|
25 |
+
# Define the HTML template for the Three.js canvas
|
26 |
+
html_template = """
|
27 |
+
<div id="three-canvas-container"></div>
|
28 |
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
|
29 |
+
<script>
|
30 |
+
var canvasContainer = document.getElementById("three-canvas-container");
|
31 |
+
|
32 |
+
var camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1, 1000);
|
33 |
+
camera.position.z = 5;
|
34 |
+
|
35 |
+
var renderer = new THREE.WebGLRenderer({antialias: true});
|
36 |
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
37 |
+
canvasContainer.appendChild(renderer.domElement);
|
38 |
+
|
39 |
+
var geometry = new THREE.BoxGeometry(1, 1, 1);
|
40 |
+
var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
|
41 |
+
var cube = new THREE.Mesh(geometry, material);
|
42 |
+
scene.add(cube);
|
43 |
+
|
44 |
+
function animate() {
|
45 |
+
requestAnimationFrame(animate);
|
46 |
+
cube.rotation.x += 0.01;
|
47 |
+
cube.rotation.y += 0.01;
|
48 |
+
renderer.render(scene, camera);
|
49 |
+
}
|
50 |
+
|
51 |
+
animate();
|
52 |
+
</script>
|
53 |
+
"""
|
54 |
+
|
55 |
+
# Define the Streamlit app
|
56 |
+
def app():
|
57 |
+
# Define a Pydeck map using a ScatterplotLayer
|
58 |
+
st.pydeck_chart(initial_options)
|
59 |
+
|
60 |
+
# Add a dropdown menu to select Pydeck layer types
|
61 |
+
layer_type = st.selectbox("Layer type", ["HexagonLayer", "HeatmapLayer", "ScatterplotLayer"])
|
62 |
+
|
63 |
+
# Add sliders to adjust the Pydeck layer properties
|
64 |
+
if layer_type == "HexagonLayer":
|
65 |
+
layer.radius = st.slider("Radius", 10, 100, 50)
|
66 |
+
layer.elevation_scale = st.slider("Elevation scale", 0, 10, 1)
|
67 |
+
layer.elevation_range = st.slider("Elevation range", 0, 1000, 100)
|
68 |
+
layer.pickable = st.checkbox("Pickable", True)
|
69 |
+
layer.auto_highlight = st.checkbox("Auto highlight", True)
|
70 |
+
elif layer_type == "HeatmapLayer":
|
71 |
+
layer.intensity = st.slider("Intensity", 0, 10, 1)
|
72 |
+
layer.radius = st.slider("Radius", 10, 100, 50)
|
73 |
+
layer.color_range = st.color_picker("Color range", ["#008000", "#FFFF00", "#FF0000"])
|
74 |
+
layer.opacity = st.slider("Opacity", 0, 1, 0.8)
|
75 |
+
layer.blend_mode = st.selectbox("Blend mode", ["additive", "multiply"])
|
76 |
+
elif layer_type == "ScatterplotLayer":
|
77 |
+
layer.get_position = "[0, 1, 2]"
|
78 |
+
layer.get_color = "[200, 30, 0, 160]"
|
79 |
+
layer.get_radius = st.slider("Radius", 10, 100, 50)
|
80 |
+
|
81 |
+
# Add the updated Pydeck layer to the map
|
82 |
+
st.pydeck_chart(pdk.Deck(layers=[layer], initial_view_state=view_state))
|
83 |
+
|
84 |
+
# Add the Three.js canvas to the Streamlit app
|
85 |
+
st.components.v1.html(html_template, height=500)
|
86 |
+
|
87 |
+
if name == "main":
|
88 |
+
app()
|
89 |
+
|
90 |
+
# This app has a Pydeck map that displays a scatterplot layer by default, and it allows the user to switch between HexagonLayer, HeatmapLayer, and ScatterplotLayer using a dropdown menu. The user can also adjust the properties of the selected layer using sliders and color pickers. Finally, the app displays a Three.js canvas that rotates a green cube.
|