Assessing Salt Marsh Change in Jamaica Bay Using LiDAR Data (2014–2017)
In this report, I will be focusing on working with LiDAR data to analyze whether the salt marsh in Jamaica Bay, Queens goes up or down between 2014 and 2017. The LiDAR data will be obtained from the National Oceanic and Atmospheric Administration (NOAA). This will be done by processing point cloud data into DEM maps and comparing the differences in elevation data from both years. This will help me determine whether the marsh is healthy and growing or slowly eroding over time.
Show the code
library(sf)
Linking to GEOS 3.13.0, GDAL 3.8.5, PROJ 9.5.1; sf_use_s2() is TRUE
Show the code
library(lidR)
Attaching package: 'lidR'
The following object is masked from 'package:sf':
st_concave_hull
Show the code
library(RCSF)library(terra)
terra 1.9.1
Attaching package: 'terra'
The following object is masked from 'package:lidR':
watershed
Show the code
library(raster)
Loading required package: sp
Attaching package: 'sp'
The following object is masked from 'package:lidR':
wkt
Attaching package: 'raster'
The following objects are masked from 'package:lidR':
projection, projection<-
Processing, Classifying and Extracting Data
I read in the data files and reduced the number of points to improve processing speed. Afterwards, I classified the LiDAR point cloud into ground and non-ground points, isolating ground-level elevation from vegetation and other above-ground features.
Show the code
# read las filelas_2014 <-readLAS("/Users/Ally/Desktop/LIDAR_Project/25170_2014.las")
Warning: There are 3874701 points flagged 'withheld'.
# decreasing number of points las_2014 <-decimate_points(las_2014, homogenize(1, res =1))las_2017 <-decimate_points(las_2017, homogenize(1, res =1))# classify LiDAR point clouds into ground and non-ground pointslas_2014 <-classify_ground(las_2014, algorithm =csf(time_step =5))
Original dataset already contains 1132272 ground points. These points were reclassified as 'unclassified' before performing a new ground classification.
Original dataset already contains 162513 ground points. These points were reclassified as 'unclassified' before performing a new ground classification.
Using the classified ground points, I generated a DEM for each year displaying the salt marsh elevation across Jamaica Bay. I then subtracted the two grids to produce a difference map showing elevation change between 2014 and 2017.
2014 Salt Marsh in Jamaica Bay
Show the code
# clean and convert scattered LiDAR points into an elevation griddem_2014 <-rasterize_terrain(ground_2014, res =1, algorithm =tin())
plot(dem_2014, main ="2014 Salt Marsh Elevation - Jamaica Bay", xlab ="Longitude", ylab ="Latitude")
2017 Salt Marsh in Jamaica Bay
Show the code
# clean and convert scattered LiDAR points into an elevation griddem_2017 <-rasterize_terrain(ground_2017, res =1, algorithm =tin()) crs(dem_2017) <-"EPSG:32618"# reproject 2017 to match 2014 coordinate systemdem_2017 <-project(dem_2017, crs(dem_2014))dem_2017 <-resample(dem_2017, dem_2014)plot(dem_2017, main ="2017 Salt Marsh Elevation - Jamaica Bay", xlab ="Longitude", ylab ="Latitude")
Difference between Salt Marsh in Jamaica Bay
Show the code
dem_difference <- dem_2017 - dem_2014plot(dem_difference, main ="Elevation Change in Jamaica Bay (2014-2017)", xlab ="Longitude", ylab ="Latitude")
Source Code
---title: "Project"author: "Alexandra Mejia"date: "4/23/2026"format: html: toc: true toc-location: left code-fold: true code-summary: "Show the code" code-tools: true embed-resources: true---# Assessing Salt Marsh Change in Jamaica Bay Using LiDAR Data (2014–2017)In this report, I will be focusing on working with LiDAR data to analyze whether the salt marsh in Jamaica Bay, Queens goes up or down between 2014 and 2017. The LiDAR data will be obtained from the National Oceanic and Atmospheric Administration (NOAA). This will be done by processing point cloud data into DEM maps and comparing the differences in elevation data from both years. This will help me determine whether the marsh is healthy and growing or slowly eroding over time.```{r}library(sf)library(lidR)library(RCSF)library(terra)library(raster)```## Processing, Classifying and Extracting DataI read in the data files and reduced the number of points to improve processing speed. Afterwards, I classified the LiDAR point cloud into ground and non-ground points, isolating ground-level elevation from vegetation and other above-ground features.```{r}# read las filelas_2014 <-readLAS("/Users/Ally/Desktop/LIDAR_Project/25170_2014.las")las_2017 <-readLAS("/Users/Ally/Desktop/LIDAR_Project/25170_2017.las")# decreasing number of points las_2014 <-decimate_points(las_2014, homogenize(1, res =1))las_2017 <-decimate_points(las_2017, homogenize(1, res =1))# classify LiDAR point clouds into ground and non-ground pointslas_2014 <-classify_ground(las_2014, algorithm =csf(time_step =5))las_2017 <-classify_ground(las_2017, algorithm =csf(time_step =5))# filtering ground point classification ground_2014 <-filter_poi(las_2014, Classification ==2) ground_2017 <-filter_poi(las_2017, Classification ==2) ```## Interpolating DataUsing the classified ground points, I generated a DEM for each year displaying the salt marsh elevation across Jamaica Bay. I then subtracted the two grids to produce a difference map showing elevation change between 2014 and 2017.### 2014 Salt Marsh in Jamaica Bay```{r}# clean and convert scattered LiDAR points into an elevation griddem_2014 <-rasterize_terrain(ground_2014, res =1, algorithm =tin()) plot(dem_2014, main ="2014 Salt Marsh Elevation - Jamaica Bay", xlab ="Longitude", ylab ="Latitude")```### 2017 Salt Marsh in Jamaica Bay```{r}# clean and convert scattered LiDAR points into an elevation griddem_2017 <-rasterize_terrain(ground_2017, res =1, algorithm =tin()) crs(dem_2017) <-"EPSG:32618"# reproject 2017 to match 2014 coordinate systemdem_2017 <-project(dem_2017, crs(dem_2014))dem_2017 <-resample(dem_2017, dem_2014)plot(dem_2017, main ="2017 Salt Marsh Elevation - Jamaica Bay", xlab ="Longitude", ylab ="Latitude")```### Difference between Salt Marsh in Jamaica Bay```{r}dem_difference <- dem_2017 - dem_2014plot(dem_difference, main ="Elevation Change in Jamaica Bay (2014-2017)", xlab ="Longitude", ylab ="Latitude")```