Tuesday, July 28, 2026

Module 5 - Part 2 - Corridor Analysis

In part two of the analysis lab we are asked to create a corridor that model the potential movement of black bears between two protected areas.

The extent environment should first be modified to align with the elevation or land cover layer.

Running Euclidean tool on the road layer and reclassifying the raster layer based on the distance from roads. The further the distance from the road the higher the suitability value. Distance from the roads greater than 500 meter is given the value of 10 while values lower than 100 meter is classified as value 1, and values between 100-500 m are given the value of 5. 

Reclassified Elevation layer based on suitability value. Elevation between 1200-3000m is considered the most suitable, it is given the number 10.

Land Cover are reclassified based on suitability values, landcover I, 2, and 4 are classified as value 10  

Runing the Weighted Overlay tool to integrate the three criteria, assigning weights of 60% to land cover, 20% to elevation, and 20% to distance from roads, thereby generating the suitability model surface. 

To develop a cost surface, I inverted the suitability model surface layer utilizing the reclassify tool. In this context, a higher suitability value corresponds to a lower cost, while a lower suitability value indicates a higher cost. 

Following this, I executed the Cost Distance tool for the Coronado 1 shapefile and repeated the process for the Coronado 2 shapefile. 

I applied the Corridor tool using the two cost distance surfaces. The corridor raster represents cells that hold values indicating the total travel cost between the source and destination points in both directions.

Finally, I assigned an appropriate symbology to the newly created layer.






Module 5 - Part 1 - Rating Locations in Raster

In this laboratory assignment, we are tasked with identifying the most appropriate location for a developer to establish a new project. Our analysis will encompass five distinct layers, each based on the provided suitability ratings: Land Cover, Soils, Slope, Rivers, and Roads. 

To begin, we will utilize the Reclassify tool to categorize the Land Cover into the specified suitability ratings.

Next, we will convert the vector soil layer into a raster format using the polygon to raster method, followed by reclassifying this new raster layer according to the designated suitability ratings.

We will then employ the slope tool to generate a slope raster from the Digital Elevation Model (DEM) and subsequently reclassify this new layer based on the suitability ratings.

Additionally, we will apply the Euclidean tool to create a raster representing the distance from the river, which will also be reclassified according to the provided suitability ratings.

Lastly, we will generate a distance raster from the Roads vector layer using the Euclidean tool and reclassify this new raster based on the specified suitability ratings.

After completing these steps, we will utilize the Weighted Overlay tool, assigning a scale of 1-5 and incorporating all raster layers, with each layer contributing 20% to the overall analysis.

The outcome will be a new map illustrating areas ranked from the most suitable to the least suitable for development.













Alternative Scenario

In the alternative scenario, we applied the Weighted Overlay tool again using the same layers but adjusted the percentage contributions as follows:

▪ Land Cover – 20%

▪ Soils – 20%

▪ Slope – 40%

▪ Distance to Streams – 10%

▪ Distance to Roads – 10%

This adjustment resulted in a new map depicting different suitability areas.















Friday, July 24, 2026

Module 4 - Damage Assessment

In this lab assignment, we are tasked with evaluating the damage caused by hurricanes within a designated study area. We began by creating a new map and establishing a new feature class specifically for structural damage. This new layer incorporates an attribute domain to distinguish between various types of structures and their corresponding damage. I employed a raster image taken prior to the hurricane to assess different properties, placing points on each structure and filling in attributes with the correct building type. Additionally, using raster image taken after the event helped in identifying the structural damage. 

In the last step, we established a new polyline feature class layer intended for digitizing the coastline. This new layer will facilitate the analysis of structural damage based on five categories within distances of 100, 200, and 300 feet from the coastline. The categories include: no Damage, Affected, Minor Damage, Major Damage, and destroyed. There are several methods to evaluate the number of houses according to damage categories and their distance from the coastline. One method I used involved the Multiple Ring Buffer tool to create non-overlapping buffers at 100, 200, and 300 meters from the coastline. Afterward, I employed the Overlay tool alongside the building layer and each buffer to generate three separate layers, each illustrating the houses affected by the hurricane based on the distance specified by each buffer. Finally, I symbolized each layer according to the level of structural damage and activated the Show Count feature to ascertain the number of houses classified by structural damage within each buffer.

Damage Assessment Map

Table showing number of houses damaged based on structure damage category

Friday, July 17, 2026

Module 3 - Coastal Flooding

Hurricane Sandy made landfall in October 2012 in Mantoloking, New Jersey, resulting in extensive destruction. This week’s module involved downloading two LAZ files from the NOAA website, corresponding to the conditions before and after Hurricane Sandy. 

I utilized the Spatial ETL tool to convert both files into LAS format. The analysis of the two Lidar datasets, collected prior to and after the hurricane, reveals notable alterations. A color gradient is utilized, with low values represented in red and high values in blue. The dataset acquired post-hurricane predominantly displays red, indicating erosion, and a high value of 38.48, a decrease from 39.49 in the pre-hurricane dataset, signifying damage and changes in elevation.

In the following step, I applied the LAS dataset to TIN tool, followed by the TIN to Raster tool to create DEMs. The final step was to utilize the Raster Calculator to subtract the pre-Sandy raster from the post-Sandy raster dataset. The outcome illustrates the changes observed between the pre and post-event images. 


 
A screenshot of the change area that has significant changes due to the hurricane. The red areas indicate where erosion has occurred, where as the blue area signify regions where sand and debris have accumulated resulting from storm surge and flooding. 







Friday, July 10, 2026

Module 2 - Forestry and Lidar

In this week's module, we explored .laz and .las lidar data files, and we generated Digital Elevation Models (DEMs) and Digital Surface Models (DSMs) from lidar data. Additionally, we computed forest height and assessed biomass density.

Initially, I retrieved the data from the Virginia Lidar application and employed the convert LAS tool to transform the downloaded .laz file into a .las file.

Subsequently, I calculated the forest height. To begin, I utilized the Point File Information tool, which produces statistical data regarding the .las layer, including the number of points, as well as the maximum, minimum, and average point spacing.

Following this, I created a DEM layer from the lidar ground point layer by using the LAS Dataset to Raster tool. Furthermore, I generated a DSM layer for the non-ground points. Furthermore, the Minus tool is used to subtract the ground height from the non-ground height in order to determine the tree height.



In the final step to calculate biomass density, I utilized a combination of tools, specifically: the LAS to MultiPoint tool, setting Class code 2 for bare earth and 1 for vegetation; the Point to Raster tool to convert the two new layers into raster format; the IS Null tool to create binary files; the Con tool to assign a value of 0 to true raster and to pull false values from the original raster; the Plus tool to merge both layers from the previous step; and the Float tool to convert the Plus result from integer to float. Finally, we applied the Divide tool to compute the density.



Sunday, June 28, 2026

Module 1 - Crime Analysis

 In part C of the lab exercise, I generated three distinct maps: a grid-based thematic map, a kernel density map, and a local Moran’s I map, utilizing homicide data from 2017 to identify homicide hotspots within the city of Chicago, Illinois.

Initially, for the grid-based thematic hotspot map, I employed a spatial join to associate the grid cells with the 2017 homicide data. This process resulted in a grid cell representation indicating the number of homicides per cell. I then eliminated all cells with a count of zero and focused on the top 20% of grid cells exhibiting the highest counts. To achieve this, I sorted the data based on the count field in descending order and selected the first 62 records (which corresponds to 20% of 311 records when rounded to the nearest whole number), subsequently exporting these selected records to a new layer. A new integer field named 'dissolved' was added, populated with the value of 1, and this field was utilized to dissolve the feature class into a singular polygon.


In the subsequent step, I utilized the kernel density tool, configuring the output cell size to 100 and the search radius to 2630, with area units set to square miles, to produce a kernel density map. The symbology was modified to exclude zero values and to establish breaks at two values: 3 times the mean and the maximum value. The mean value calculated from the statistics was 5.64, leading to two classifications: values less than or greater than 16.92 (5.64 multiplied by 3) and those exceeding 16.92.

           

I then applied the reclassify tool to categorize the values into three classes: 0, 1, and 2, as 2 being 3*mean and above. Following this, I employed the Raster to Polygon tool; once the conversion to polygon was completed, I utilized the select by attribute function to isolate features with a grid code value of 2, thereby creating a new layer.


In the final phase, I developed a third hotspot map by employing local Moran's I hotspot mapping. This process began with a spatial join between census tracts and the 2017 homicide data, resulting in a new data layer for census tracts that reflects the number of homicides within each census block. I then introduced an additional field to compute the crime rate per 1,000 housing units using the formula ((Join_count/total_households)*100). Subsequently, I utilized the Cluster and Outlier Analysis tool to generate a new layer categorizing areas as HH, HL, LH, and LL. Since our focus was solely on the HH cluster, I applied a SQL query to isolate this specific cluster and exported it to a new layer. Finally, I employed the dissolve tool, selecting the COType IDW field to merge the new layer into a single polygon.

 

          









 







Monday, June 23, 2025

Module 6 - Working with Geometries

In the final module of this course, Module 6, we will explore the topic of geometries. This includes learning how to interpret the properties of geometry objects derived from existing features, as well as the process of creating new geometry objects based on coordinate information.

Features are objects that are depicted on a map or within a dataset. A point represents a single location like a fire hydrant or a tree; a polyline represents a linear feature such as a road, river, and a polygon feature that represents an area or region, like a lake, park, or administrative boundary. Each feature in a data set is typically represented by a row in an attribute table.

A point feature class in GIS represents a single location consists of a single vertex defined by x,y coordinates. On the other hand, polyline and polygons features consist of multiple vertices and are constructed using two or more points objects. These vertices define the shape of a polyline or polygon feature.

To effectively work with geometry objects, it is essential to establish a cursor on the geometry field. Tokens such as SHAPE@ provide access to the complete geometry object; however, in the context of a large dataset, this approach may lead to slower performance. For scenarios where only specific properties are required, alternative tokens can be utilized. For instance, SHAPE@XY returns a tuple of x and y coordinates that represent the centroid of the feature, while SHAPE@LENGTH provides the length of the feature.

ArcPy provides a variety of classes designed for working with geometry objects, including the generic arcpy.Geometry class, which is utilized to create geometry objects. In addition to this, ArcPy includes four specific geometry classes: MultiPoint, PointGeometry, Polygon, and Polyline. Furthermore, ArcPy incorporates two additional classes that facilitate the construction of geometry: Array and Point. The relevant classes include arcpy.Array() and arcpy.Point().

Certain features are composed of multiple parts but are represented as a single feature within the attribute table; these are referred to as multipart features. To determine whether a feature is classified as a single part or multipart, the isMultipart statement is utilized. Additionally, the partCount function will provide the total number of geometry parts associated with a given feature. Furthermore, polygons that contain holes present a challenge. These shapes typically feature one exterior ring, which is defined as a clockwise ring, and one or more interior rings that are defined as a counterclockwise ring.

Lastly, we explored the process of writing geometries, which encompasses the creation of new features. New features can be developed utilizing the InsertCursor class from the arcpy.da module. This process requires creating a geometry object, and then saving the result as a feature using insertRow() method.

cursor = arcpy.da.InsertCursor()

The lab assignment for Module 6 requires the development of a Python script that generates a new text file. This script should populate the file with the Object Identifier (OID) of each feature or row, the vertex ID, the X and Y coordinates of the vertices, as well as the name of the river feature derived from a feature class containing polylines representing rivers in Maui, Hawaii.

Initially, I imported all necessary modules and classes, enabled the overwriteOutput setting, configured the workspace, and defined the feature class variable. Subsequently, I created a rivers.txt file in write mode ("w") and established a search cursor for the rivers.shp file. This cursor was designed to access the OID, SHAPE, and NAME fields.

Furthermore, I implemented a for loop to iterate through each row or feature within the cursor/ShapeFile, while also creating a variable to serve as a vertex ID number. A second for loop was introduced to iterate through each point or vertex in the row, utilizing the .getPart() method to extract the x and y coordinates of the vertices, incrementing the vertex ID number with each iteration.

The output.write() method was employed to append a line to the .txt file, detailing the Feature/ROW OID, Vertex ID, X coordinate, Y coordinate, and the name of the river feature. A print statement was also included to display the output.write result. Finally, I ensured that the .txt file was properly closed and deleting row and cursor variables outside of all loops.

The execution of the script for Module 6 generated a formatted text file corresponding to each river feature within the Maui rivers feature class.

 




Module 6 script flowchart