|
2 | 2 | <v-app> |
3 | 3 | <v-container fluid class="pa-3"> |
4 | 4 | <!-- Temperature Section --> |
5 | | - <v-row id="temperature-section"> |
6 | | - <v-col :cols="4" class="left-column"> |
7 | | - <section> |
8 | | - <h3 class="pb-4">Temperature</h3> |
9 | | - <p> |
10 | | - Over the years, temperatures have shown an overall increase, a clear indicator of climate change. This trend is evident when we look at the historical data of Tempelhofer Feld. |
11 | | - </p> |
12 | | - <p class="pt-6"> |
13 | | - The second graph on the right shows average (also called “mean”) temperatures from 1990 to 2008 and how other years differ. Longer red bars indicate warmer years; longer blue bars indicate cooler years. Tempelhof Airport closed in 2008 so that year marks the end of the reference period. Understanding these differences helps us see climate change patterns and impacts. August shows the most extreme deviations. |
14 | | - </p> |
15 | | - |
16 | | - <!-- TODO: --> |
17 | | - <!-- <p class="pt-6"> |
18 | | - [move month select for difference graph here] |
19 | | - </p> --> |
20 | | - </section> |
21 | | - </v-col> |
| 5 | + <div class="section" id="temperature-section"> |
| 6 | + <v-row> |
| 7 | + <v-col :cols="4" class="left-column sticky-left"> |
| 8 | + <section :class="{ active: activeSection === 'temperature-section' }"> |
| 9 | + <h3 class="pb-4">Temperature</h3> |
| 10 | + <p> |
| 11 | + Over the years, temperatures have shown an overall increase, a clear indicator of climate change. This trend is evident when we look at the historical data of Tempelhofer Feld. |
| 12 | + </p> |
| 13 | + <p class="pt-6"> |
| 14 | + The second graph on the right shows average (also called “mean”) temperatures from 1990 to 2008 and how other years differ. Longer red bars indicate warmer years; longer blue bars indicate cooler years. Tempelhof Airport closed in 2008 so that year marks the end of the reference period. Understanding these differences helps us see climate change patterns and impacts. August shows the most extreme deviations. |
| 15 | + </p> |
22 | 16 |
|
23 | | - <v-col :cols="8"> |
24 | | - <section> |
25 | | - <v-container> |
26 | | - <MedianTempGraph /> |
27 | | - <TempDifferenceGraph /> |
28 | | - </v-container> |
29 | | - </section> |
30 | | - </v-col> |
31 | | - </v-row> |
| 17 | + <!-- TODO: --> |
| 18 | + <!-- <p class="pt-6"> |
| 19 | + [move month select for difference graph here] |
| 20 | + </p> --> |
| 21 | + </section> |
| 22 | + </v-col> |
| 23 | + |
| 24 | + <v-col :cols="8"> |
| 25 | + <section> |
| 26 | + <v-container> |
| 27 | + <MedianTempGraph /> |
| 28 | + <TempDifferenceGraph /> |
| 29 | + </v-container> |
| 30 | + </section> |
| 31 | + </v-col> |
| 32 | + </v-row> |
| 33 | + </div> |
32 | 34 |
|
33 | 35 | <!-- NDVI Section --> |
34 | | - <v-row id="ndvi-explanation-section"> |
35 | | - <v-col :cols="4" class="left-column"> |
36 | | - <section> |
37 | | - <h3 class="pb-4">NDVI Explanation</h3> |
38 | | - <p> |
| 36 | + <div class="section" id="ndvi-explanation-section"> |
| 37 | + <v-row> |
| 38 | + <v-col :cols="4" class="left-column sticky-left"> |
| 39 | + <section :class="{ active: activeSection === 'ndvi-explanation-section' }"> |
| 40 | + <h3 class="pb-4">NDVI Explanation</h3> |
| 41 | + <p> |
39 | 42 | We chose to look at the health of the plant life on the field (we'll refer to this as "vegetation"). One way to understand the health of vegetation on a large area of land is to look at satellite pictures of it. Or, more precisely, using vegetation indices. These are various combinations of the different wavelengths ("colors") that satellites record. The most notable one is the normalized difference vegetation index or NDVI. |
40 | 43 | </p> |
41 | 44 | <p class="pt-6"> |
|
63 | 66 | Equation: <strong>NDVI = (NIR-RED) / (NIR+RED)</strong> |
64 | 67 | </p> |
65 | 68 | </div> |
66 | | - </section> |
67 | | - </v-col> |
68 | | - |
69 | | - <v-col :cols="8"> |
70 | | - <section> |
71 | | - <v-container> |
72 | | - <Images /> |
73 | | - </v-container> |
74 | | - </section> |
75 | | - </v-col> |
76 | | - </v-row> |
| 69 | + </section> |
| 70 | + </v-col> |
| 71 | + |
| 72 | + <v-col :cols="8"> |
| 73 | + <section> |
| 74 | + <v-container> |
| 75 | + <Images /> |
| 76 | + </v-container> |
| 77 | + </section> |
| 78 | + </v-col> |
| 79 | + </v-row> |
| 80 | + </div> |
77 | 81 |
|
78 | 82 | <!-- NDVI Graph Section --> |
79 | | - <v-row id="ndvi-results-section"> |
80 | | - <v-col :cols="4" class="left-column"> |
81 | | - <section> |
| 83 | + <div class="section" id="ndvi-results-section"> |
| 84 | + <v-row> |
| 85 | + <v-col :cols="4" class="left-column sticky-left"> |
| 86 | + <section :class="{ active: activeSection === 'ndvi-results-section' }"> |
82 | 87 | <h3 class="pb-4">NDVI Results</h3> |
83 | 88 | <p> |
84 | 89 | Our observations of NDVI values across the study area generally ranged between 0.2 and 0.7. One of the lowest recorded values was in December 2018, with an NDVI of 0.1706, while one of the highest was in November 2022, with an NDVI of 0.7010. The data we collected could be improved with more cleaning, as the area includes large concrete sections, is roughly defined, and contains inconsistencies due to changes in land use and purpose over time (like creating the gardening area and introducing sheep). |
|
104 | 109 | </section> |
105 | 110 | </v-col> |
106 | 111 | </v-row> |
| 112 | + </div> |
| 113 | + |
107 | 114 |
|
108 | 115 | <!-- Temperature vs. NDVI Section --> |
109 | | - <v-row id="correlations-section"> |
110 | | - <v-col :cols="4" class="left-column"> |
111 | | - <section> |
| 116 | + <div class="section" id="correlations-section"> |
| 117 | + <v-row> |
| 118 | + <v-col :cols="4" class="left-column sticky-left"> |
| 119 | + <section :class="{ active: activeSection === 'correlations-section' }"> |
112 | 120 | <h3 class="pb-4">Understanding the Dynamics of Tempelhofer Feld’s Temperature and Vegetation</h3> |
113 | 121 | <p> |
114 | 122 | The graph on the right illustrates two critical metrics: the yearly mean temperature and the yearly mean NDVI (in general, reflecting the health and density of plant life). |
|
136 | 144 | </section> |
137 | 145 | </v-col> |
138 | 146 | </v-row> |
| 147 | + </div> |
139 | 148 |
|
140 | 149 | <!-- Conclusion --> |
141 | | - <v-row id="conclusion-section"> |
142 | | - <v-col :cols="4" class="left-column pb-16"> |
143 | | - <section> |
| 150 | + <div class="section" id="conclusion-section"> |
| 151 | + <v-row> |
| 152 | + <v-col :cols="4" class="left-column sticky-left pb-16"> |
| 153 | + <section :class="{ active: activeSection === 'correlations-section' }"> |
144 | 154 | <h3 class="pb-4">What We Learned and What Comes Next</h3> |
145 | 155 | <p> |
146 | 156 | The analysis underscores the growing significance of earth observation tools, like satellite imagery and NDVI metrics, in monitoring urban green spaces such as Tempelhofer Feld. These tools provide insights into how ecosystems respond to climate change and enable data-driven decision-making for urban planning and conservation. |
|
166 | 176 | </section> |
167 | 177 | </v-col> |
168 | 178 | </v-row> |
| 179 | + </div> |
169 | 180 | </v-container> |
170 | 181 | </v-app> |
171 | 182 | </template> |
172 | 183 |
|
173 | 184 | <script> |
174 | | -import YearlyTemperatureNdviCorrelation from './CorrelationGraphs/YearlyTemperatureNdviCorrelation.vue' |
175 | | -import MedianTempGraph from './WeatherGraphs/MedianTempGraph.vue' |
176 | | -import TempDifferenceGraph from './WeatherGraphs/TempDifferenceGraph.vue' |
177 | | -import Images from './Images.vue' |
178 | | -import YearlyNdviPlot from './NdviGraphs/YearlyNdvi.vue' |
179 | | -import NdviSelectMonthGraph from './NdviGraphs/NdviSelectMonthGraph.vue' |
180 | | -import NdviOverlayGraph from './NdviGraphs/NdviOverlayGraph.vue' |
| 185 | +import MedianTempGraph from './WeatherGraphs/MedianTempGraph.vue'; |
| 186 | +import TempDifferenceGraph from './WeatherGraphs/TempDifferenceGraph.vue'; |
| 187 | +import Images from './Images.vue'; |
| 188 | +import YearlyNdviPlot from './NdviGraphs/YearlyNdvi.vue'; |
| 189 | +import NdviSelectMonthGraph from './NdviGraphs/NdviSelectMonthGraph.vue'; |
| 190 | +import NdviOverlayGraph from './NdviGraphs/NdviOverlayGraph.vue'; |
| 191 | +import YearlyTemperatureNdviCorrelation from './CorrelationGraphs/YearlyTemperatureNdviCorrelation.vue'; |
181 | 192 |
|
182 | 193 | export default { |
183 | | - name: "MainSection", |
| 194 | + name: 'MainSection', |
184 | 195 | components: { |
185 | 196 | MedianTempGraph, |
186 | 197 | TempDifferenceGraph, |
187 | | - YearlyTemperatureNdviCorrelation, |
188 | 198 | Images, |
189 | 199 | YearlyNdviPlot, |
190 | 200 | NdviSelectMonthGraph, |
191 | 201 | NdviOverlayGraph, |
| 202 | + YearlyTemperatureNdviCorrelation, |
192 | 203 | }, |
193 | 204 | data() { |
194 | 205 | return { |
| 206 | + activeSection: null, |
195 | 207 | isExpanded: false, |
196 | | - } |
| 208 | + }; |
197 | 209 | }, |
198 | 210 | methods: { |
199 | 211 | toggleExpand() { |
200 | 212 | this.isExpanded = !this.isExpanded |
201 | 213 | }, |
202 | | - scrollToSection(sectionId) { |
203 | | - const section = document.getElementById(sectionId) |
204 | | - if (section) { |
205 | | - section.scrollIntoView({ behavior: 'smooth', block: 'start' }) |
206 | | - } |
207 | | - } |
208 | 214 | }, |
209 | 215 | mounted() { |
210 | 216 | const observer = new IntersectionObserver( |
211 | | - ([entry]) => { |
212 | | - if (entry.isIntersecting) { |
213 | | - this.scrollToSection(entry.target.id) |
214 | | - } |
| 217 | + (entries) => { |
| 218 | + entries.forEach((entry) => { |
| 219 | + if (entry.isIntersecting) { |
| 220 | + this.activeSection = entry.target.id; |
| 221 | + } |
| 222 | + }); |
215 | 223 | }, |
216 | | - { |
217 | | - threshold: 0.3, |
218 | | - } |
| 224 | + { threshold: 0.5 } |
219 | 225 | ); |
220 | 226 |
|
221 | | - const sectionsToObserve = [ |
222 | | - 'temperature-section', |
223 | | - 'ndvi-explanation-section', |
224 | | - 'ndvi-results-section', |
225 | | - 'correlations-section', |
226 | | - 'conclusion-section', |
227 | | - 'about-section', |
228 | | - ]; |
229 | | -
|
230 | | - sectionsToObserve.forEach(sectionId => { |
231 | | - const section = document.getElementById(sectionId) |
232 | | - if (section) { |
233 | | - observer.observe(section) |
234 | | - } |
235 | | - }) |
236 | | - } |
237 | | -} |
| 227 | + const sections = document.querySelectorAll('.section'); |
| 228 | + sections.forEach((section) => observer.observe(section)); |
| 229 | + }, |
| 230 | +}; |
238 | 231 | </script> |
239 | 232 |
|
240 | 233 | <style scoped> |
|
250 | 243 | .left-column { |
251 | 244 | background-color: #d6f5d3; |
252 | 245 | } |
| 246 | +
|
| 247 | +
|
| 248 | +.sticky-left { |
| 249 | + position: sticky; |
| 250 | + top: 0px; |
| 251 | + height: fit-content; |
| 252 | + align-self: flex-start; |
| 253 | +} |
253 | 254 | </style> |
0 commit comments