Skip to content

PRACTICE 3

Parent materials of soils

purpose

Your goal is to make a map that could help town planners in Addison County compare information from the Addison County Soil Survey (1971) to property parcels in their town.

Practically, your workflow will include the following patterns:

  • gather and inspect vector data
  • filter feature collections
  • convert vector to raster
  • mask raster data
  • display layer of nominal classes with unique colors
  • explain nominal class symbology
  • filter and flatten an image collection
  • make terrain layers
  • paint strokes

When you solve the problem, you should have a workflow that uses the town of Middlebury as the test subject to produce a map with the layers shown in the app below. Ideally, you will write the script so that you can very easily shift the map to any other town in Addison County, Vermont.


open app in new tab


data sources

We will use a number of datasets that are available through the cloud, either through the Earth Engine Data Catalog or assets that I maintain for Vermont geography.

DATA DESCRIPTIONS
US Counties source
background
VT Towns source
VT Parcels source
background
VT Soils source
background
report
DEM 1m source
background


starter script

var geo = require("users/jhowarth/eePatterns:modules/geo.js");

print("geo methods dictionary", geo.help);    // Prints dictionary of all tools in module.  
print("geo palettes", geo.iPalettes);         // Prints dictionary of all palettes in module. 


// -------------------------------------------------------------
//  DATA SOURCES 
// ------------------------------------------------------------- 

var fc_address_county = "TIGER/2018/Counties";
var fc_address_town = "projects/conservation-atlas/assets/cadastre/Boundary_TWNBNDS_poly";
var fc_address_parcel = "projects/vt-conservation/assets/state/FS_VCGI_OPENDATA_Cadastral_VTPARCELS_poly_standardized_parcels_SP_v1";
var fc_address_soils = "projects/conservation-atlas/assets/soils/VT_Data_NRCS_Soil_Survey_Units";
var ic_address_dem = "USGS/3DEP/1m"; 

var palette_soils = geo.iPalettes.iSoils.parent_materials_addison_county;
var class_labels_soils = geo.iPalettes.iSoils.parent_materials_addison_county_labels;

print("SOILS Palette and Class labels", palette_soils, class_labels_soils);

// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//  1. GATHER HUMAN GEOGRAPHY
// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

// -------------------------------------------------------------
//  1.1 Make Addison County layer
// -------------------------------------------------------------

var fc_county ;

// -------------------------------------------------------------
//  1.2 Make study town (Middlebury) layer
// -------------------------------------------------------------

var fc_town ;

// -------------------------------------------------------------
//  1.3 Center map on study town
// -------------------------------------------------------------



// -------------------------------------------------------------
//  1.4 Make parcels in study town layer
// -------------------------------------------------------------

var fc_parcels ;



// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//  2. GATHER SOILS DATA AND FILTER FOR ADDISON COUNTY 
// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

// -------------------------------------------------------------
//  2.1 Gather soils data
// -------------------------------------------------------------


var fc_soils ;



// -------------------------------------------------------------
//  2.2 Filter for soils that overlap Addison County
// ------------------------------------------------------------- 

var fc_filter_bounds_soils ;

// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//  3. MAKE PARENT MATERIAL IMAGE FOR STUDY TOWN. 
// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

// -------------------------------------------------------------
//  3.1 Make nominal image of soil parent material. 
// -------------------------------------------------------------

var image_nominal_soils ;

// -------------------------------------------------------------
//  3.2 Mask by Addison County.
// -------------------------------------------------------------

var image_with_mask_soils ;

// -------------------------------------------------------------
//  3.3 Display masked soils image as layer. 
// -------------------------------------------------------------



// -------------------------------------------------------------
//  3.4 Add legend to bottom-left of Map. 
// -------------------------------------------------------------



// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//  4. GATHER DEM 
// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

// -------------------------------------------------------------
//  4.1 Construct image collection. 
// -------------------------------------------------------------

var ic_dem ;

// -------------------------------------------------------------
//  4.2 Filter for images that overlap Addison County.
// -------------------------------------------------------------

var ic_filtered_dem_county ;

// -------------------------------------------------------------
//  4.3 Mosaic filtered image collection to image. 
// -------------------------------------------------------------

var ic_dem_mosaic ;


// -------------------------------------------------------------
//  4.2 Mask mosaic image by Addison County. 
// -------------------------------------------------------------

var image_with_mask_dem ;

// -------------------------------------------------------------
//  4.3 Make hillshade from masked image and display as layer with 0.5 opacity.
//  No vertical exaggeration; azimuth 315; zenith 35.
// -------------------------------------------------------------

var hs  ;

// -------------------------------------------------------------
//  4.6 Make slope from masked image and display as layer with 0.5 opacity.
// -------------------------------------------------------------

var slope ;


// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
//  5. PAINT STROKES
// -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

// -------------------------------------------------------------
//  5.1 Make strokes for parcels ("white" and 0.5 weight) and add as layer.
// -------------------------------------------------------------

var strokes_parcels ;

// -------------------------------------------------------------
//  5.2 Make strokes for town ("white" and 4 weight) and add as layer.
// -------------------------------------------------------------

var strokes_town ;

// -------------------------------------------------------------
//  PRACTICE CHECKS
// -------------------------------------------------------------

print("CHECKS:");

//  Import check module for tutorial 1.

var check = require("users/jhowarth/eePatterns:checks/p03.js");

// ><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><

//  PLEASE DO THE FOLLOWING: 

// 1. Uncomment all of the check statements below.
// 2. Replace 'result_#p#' with the name of the data object that you used to map as a layer in each section.
// 3. Run the script.
// 4. Use the results printed to Console in the Check Up that is due Friday 5pm. 

// ><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><

// check.checkCollection("Check 1.1", result_1p1);
// check.checkCollection("Check 1.2", result_1p2);
// check.checkCollection("Check 1.4", result_1p4);
// check.checkCollection("Check 2.1", result_2p1);
// check.checkCollection("Check 2.2", result_2p2);

// check.checkPoint("Check 3.3", result_3p3);
// check.checkPoint("Check 4.5", result_4p5);
// check.checkPoint("Check 4.6", result_4p6);

This work is licensed under CC BY-NC-SA 4.0