awacke1 commited on
Commit
975a985
·
1 Parent(s): 6dabea7

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +90 -0
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.