import ee
# Trigger the authentication flow.
ee.Authenticate()
# Initialize the library.
='PROJECT_ID') #replpace with your project ID ee.Initialize(project
Weird Weather In Washington State
Weird Weather: Precipitation and Temperature Variability for Assessing Agricultural Vulnerability to Climate Change
Overview
Objectives
Introduction
Getting Started with Google Earth Engine (GEE)
Google Earth Engine (GEE) requires registration. Since this is for educational purposes, a pricing plan is not required for noncommercial registration. For more information accessing GEE, please visit Earth Engine Access.
Once you have registered and enabled the GEE API, we can now work with GEE in Python!
For more information, please see An Intro to the Earth Engine Python API
First of all, run the following cell to initialize the API. The output will contain instructions on how to grant this notebook access to Earth Engine using your account. To find out the project ID, Go to https://console.cloud.google.com/; In the top bar, click the dropdown next to the current project name. You’ll see a list of projects. The Project ID is in the second column.
Hello from the Earth Engine servers!
The code above should generate a GEE token, which this application will request for you to paste.
Working with U.S. Census TIGER data
This lesson uses the following Python packages to work with Google Earth Engine: ee
, earthengine-api
, pandas
, numpy
import folium
import matplotlib.pyplot as plt
import pandas as pd
import datetime
import branca.colormap as cm
# U.S. Census counties (2020)
= ee.FeatureCollection("TIGER/2018/Counties")
counties
# Filter to Washington State (STATEFP = '53')
= counties.filter(ee.Filter.eq("STATEFP", "53")) wa_counties
# # Create the map
# Map1 = geemap.Map(center=[47.5, -120], zoom=6)
# # Add Washington counties layer
# Map1.addLayer(wa_counties, {}, "Washington Counties")
# # Display the map
# Map1
# Convert the Earth Engine FeatureCollection to GeoJSON
= ee.FeatureCollection(wa_counties).getInfo()
wa_counties_geojson
# Create a folium map
= folium.Map(location=[47.5, -120], zoom_start=6)
Map1
# Add the counties as a GeoJSON overlay
folium.GeoJson(
wa_counties_geojson,="Washington Counties"
name
).add_to(Map1)
# Add layer control
folium.LayerControl().add_to(Map1)
# Display the map
Map1
Importing ERA5 Land Daily Aggregated image collection
The GEE Data Catalog is a great source for planetary-scale Earth science data.
From this catalog, we will be working with the ERA5-Land Daily Aggregated - ECMWF Climate Reanalysis.
#Import data
= ee.ImageCollection("ECMWF/ERA5_LAND/DAILY_AGGR")
era5
# Filter to years and selected bands
= era5.filterDate('2009-01-01', '2024-12-31').select('temperature_2m', 'total_precipitation_sum')
era5
# Clip each image to Washington state (functionally map over the collection)
= era5.map(lambda img: img.clip(wa_counties)) era5
Filter Data from ERA5
# Filter to list of years
# Creating list of normals years for ERA 5 land
= era5.filterDate('2009-01-01', '2023-12-31')
era5_hist
# Creating list of days for the year
= era5.filterDate('2024-01-01', '2024-12-31') era5_2024
Calculate Normals from 2009 - 2023
Loop through each of the 10 years: 2009-2013 - Select only relevant years for that iteration of the loop - Create average for each day for each year - create image collection that contains an image with averages for each day for the selected years - for each image in image collection, reduce to zip code average - return list of averages for each zip for each day in those selected years
# Function to get average values for each county in a FeatureCollection
# Safer Avg function with fallback scale
# Safe average function with fixed scale and GEOID to county_id
def Avg(image, counties, fallback_scale=10000):
# Safely get scale (if projection is valid)
= ee.Number(fallback_scale)
scale try:
= image.projection().nominalScale()
proj_scale = ee.Algorithms.If(proj_scale, proj_scale, scale)
scale except:
pass # fallback already defined
# Reduce image over counties
= image.reduceRegions(
stats =counties,
collection=ee.Reducer.mean(),
reducer=scale
scale
)
# Ensure 'county_id' property is present (based on GEOID)
def add_ids(f):
return f.set('county_id', f.get('GEOID'))
return stats.map(add_ids)
# Get both county GEOIDs and names
= wa_counties.aggregate_array('GEOID').getInfo()
county_ids = wa_counties.aggregate_array('NAME').getInfo()
county_names
# Initialize DataFrames
= pd.DataFrame({'county_id': county_ids, 'county_name': county_names})
temps_1 = pd.DataFrame({'county_id': county_ids, 'county_name': county_names})
precips_1
# Loop through days of year (DOY 121–123, i.e., May 1–3 for testing)
for day in range(121, 124): #182
= str(day)
day_str
# 1. Get composite average for this DOY across all years
= era5_hist.filter(ee.Filter.calendarRange(day, day, 'day_of_year'))
day_data = day_data.mean()
composite
# 2. Reduce over counties
= composite.reduceRegions(
reduced =wa_counties,
collection=ee.Reducer.mean(),
reducer=10000 # ERA5 resolution
scale
)
# Add county_id and county_name to each feature
def add_county_info(f):
return f.set({
'county_id': f.get('GEOID'),
'county_name': f.get('NAME')
})
= reduced.map(add_county_info)
reduced
# 3. TEMPERATURE EXTRACTION
= reduced.map(lambda f: ee.Feature(None, {
temp_data 'county_id': f.get('county_id'),
'county_name': f.get('county_name'),
'temperature_2m')
day_str: f.get(
})).reduceColumns(=ee.Reducer.toList(3),
reducer=['county_id', 'county_name', day_str]
selectors'list']
).getInfo()[
= pd.DataFrame(temp_data, columns=['county_id', 'county_name', day_str])
temp_df = pd.merge(temps_1, temp_df, on=['county_id', 'county_name'], how='left')
temps_1
# 4. PRECIPITATION EXTRACTION
= reduced.map(lambda f: ee.Feature(None, {
precip_data 'county_id': f.get('county_id'),
'county_name': f.get('county_name'),
'total_precipitation_sum')
day_str: f.get(
})).reduceColumns(=ee.Reducer.toList(3),
reducer=['county_id', 'county_name', day_str]
selectors'list']
).getInfo()[
= pd.DataFrame(precip_data, columns=['county_id', 'county_name', day_str])
precip_df = pd.merge(precips_1, precip_df, on=['county_id', 'county_name'], how='left') precips_1
# Get county names and IDs
= wa_counties.aggregate_array('GEOID').getInfo()
county_ids = wa_counties.aggregate_array('NAME').getInfo()
county_names
# Create base DataFrames with both ID and name
= pd.DataFrame({'county_id': county_ids, 'county_name': county_names})
temps_daily1 = pd.DataFrame({'county_id': county_ids, 'county_name': county_names})
precips_daily1
# Loop over each day in 2024 (example: DOY 121–123)
for doy in range(121, 124): #182
= datetime.date(2024, 1, 1) + datetime.timedelta(days=doy - 1)
date
# Use DOY as string for column name
= str(doy)
doy_str
# Get the image for the day
= era5_2024.filterDate(date.strftime('%Y-%m-%d')).first()
img
if img is None:
print(f"No image found for DOY {doy}")
continue
# Reduce to mean per county
= img.reduceRegions(
reduced =wa_counties,
collection=ee.Reducer.mean(),
reducer=10000
scale
)
# Add county metadata
def add_county_info(f):
return f.set({
'county_id': f.get('GEOID'),
'county_name': f.get('NAME')
})
= reduced.map(add_county_info)
reduced
# ------- TEMPERATURE --------
= reduced.map(lambda f: ee.Feature(None, {
temp_data 'county_id': f.get('county_id'),
'county_name': f.get('county_name'),
'temperature_2m')
doy_str: f.get(
})).reduceColumns(=ee.Reducer.toList(3),
reducer=['county_id', 'county_name', doy_str]
selectors'list']
).getInfo()[
= pd.DataFrame(temp_data, columns=['county_id', 'county_name', doy_str])
temp_df = pd.merge(temps_daily1, temp_df, on=['county_id', 'county_name'], how='left')
temps_daily1
# ------- PRECIPITATION --------
= reduced.map(lambda f: ee.Feature(None, {
precip_data 'county_id': f.get('county_id'),
'county_name': f.get('county_name'),
'total_precipitation_sum')
doy_str: f.get(
})).reduceColumns(=ee.Reducer.toList(3),
reducer=['county_id', 'county_name', doy_str]
selectors'list']
).getInfo()[
= pd.DataFrame(precip_data, columns=['county_id', 'county_name', doy_str])
precip_df = pd.merge(precips_daily1, precip_df, on=['county_id', 'county_name'], how='left') precips_daily1
Anomalies
# Ensure both have same index and columns
= temps_daily1.set_index('county_id').copy()
obs = temps_1.set_index('county_id').copy()
clim
# Extract day columns (e.g., '121'–'365')
= [col for col in obs.columns if col.isdigit() and col in clim.columns]
day_cols
# Subset and align
= obs[day_cols].astype(float).sort_index()
obs_days = clim[day_cols].astype(float).sort_index()
clim_days
# Subtract climatology from observed: get daily anomalies
= obs_days - clim_days
temps_anomalies
temps_anomalies.head()
121 | 122 | 123 | |
---|---|---|---|
county_id | |||
53001 | -5.497249 | -4.624398 | -3.870438 |
53003 | -5.542081 | -5.544621 | -4.568444 |
53005 | -5.531265 | -4.904690 | -3.798700 |
53007 | -4.404568 | -4.427515 | -2.366732 |
53009 | -2.998318 | -2.067569 | -1.218782 |
# Ensure both have same index and columns
= precips_daily1.set_index('county_id').copy()
obs = precips_1.set_index('county_id').copy()
clim
# Extract day columns (e.g., '121'–'365')
= [col for col in obs.columns if col.isdigit() and col in clim.columns]
day_cols
# Subset and align
= obs[day_cols].astype(float).sort_index()
obs_days = clim[day_cols].astype(float).sort_index()
clim_days
# Subtract climatology from observed: get daily anomalies
= obs_days - clim_days
precips_anomalies
precips_anomalies.head()
121 | 122 | 123 | |
---|---|---|---|
county_id | |||
53001 | -0.000599 | -0.000334 | -0.000397 |
53003 | 0.000802 | 0.001983 | -0.001771 |
53005 | -0.000170 | -0.000247 | -0.000128 |
53007 | 0.000179 | 0.000402 | -0.002110 |
53009 | 0.003841 | -0.002358 | -0.005998 |
# List of anomaly DataFrames and their labels
= [
anomalies_df "Temperature", temps_anomalies),
("Precipitation", precips_anomalies)
(
]
# Create subplots: one for each variable
= plt.subplots(nrows=2, ncols=1, figsize=(12, 8), sharex=True)
fig, axes
for ax, (label, anomalies) in zip(axes, anomalies_df):
# Identify day-of-year columns
= [col for col in anomalies.columns if col.isdigit()]
day_cols
# Compute mean anomaly across counties for each day
= anomalies[day_cols].mean(axis=0)
daily_mean_anomaly
# Reset index to long format
= daily_mean_anomaly.reset_index()
daily_anomaly_long = ['day', 'anomaly']
daily_anomaly_long.columns 'day'] = daily_anomaly_long['day'].astype(int)
daily_anomaly_long[= daily_anomaly_long.sort_values("day")
daily_anomaly_long
# Extract data
= daily_anomaly_long['day'].values
x = daily_anomaly_long['anomaly'].values
y = ['red' if val < 0 else 'blue' for val in y]
colors
# Plot line and colored markers
='gray', linewidth=1.5, label=f'{label} Anomaly')
ax.plot(x, y, color=colors, edgecolor='black', s=40, zorder=3)
ax.scatter(x, y, c0, color='black', linestyle='--', linewidth=1)
ax.axhline(
# Plot labels
f"Mean Daily {label} Anomalies Across All Counties (2024)")
ax.set_title("Anomaly")
ax.set_ylabel(True)
ax.grid(
# Common x-axis label
-1].set_xlabel("Day of Year")
axes[
plt.tight_layout() plt.show()
'avg_anomaly'] = precips_anomalies[day_cols].mean(axis=1)
precips_anomalies['avg_anomaly'] = temps_anomalies[day_cols].mean(axis=1)
temps_anomalies[
= precips_anomalies[['avg_anomaly']].copy()
precips_anomaly_result = 'county_id'
precips_anomaly_result.index.name
= temps_anomalies[['avg_anomaly']].copy()
temps_anomaly_result = 'county_id'
temps_anomaly_result.index.name
temps_anomaly_result.head()
avg_anomaly | |
---|---|
county_id | |
53001 | -4.664028 |
53003 | -5.218382 |
53005 | -4.744885 |
53007 | -3.732938 |
53009 | -2.094890 |
# Step 1: Create EE dictionaries from each anomaly DataFrame
= ee.Dictionary(temps_anomaly_result['avg_anomaly'].to_dict())
temps_anomaly_dict = ee.Dictionary(precips_anomaly_result['avg_anomaly'].to_dict())
precips_anomaly_dict
# Step 2: Define a function to set both anomalies to each county feature
def add_both_anomalies(feature):
= feature.get('GEOID')
geoid = temps_anomaly_dict.get(geoid)
temp_val = precips_anomaly_dict.get(geoid)
precip_val return feature.set({
'avg_temp_anomaly': temp_val,
'avg_precip_anomaly': precip_val
})
# Step 3: Apply to the FeatureCollection
= wa_counties.map(add_both_anomalies) wa_counties_anomaly
# View the first feature (prints a dictionary of properties including avg_anomaly)
print(wa_counties_anomaly.first().getInfo())
{'type': 'Feature', 'geometry': {'type': 'Polygon', 'coordinates': [[[-123.03842505513434, 47.52022697671061], [-123.03712338681052, 47.52022694173501], [-123.03649500317054, 47.52022694515167], [-123.03595643772823, 47.520226964995516], [-123.03546280327656, 47.52027182732147], [-123.03492416276187, 47.52027178186103], [-123.03478950261062, 47.520271853946085], [-123.03317374380099, 47.52027181311768], [-123.0320067111646, 47.520271817077706], [-123.02989721232956, 47.52027180022522], [-123.02801207378172, 47.52027182594219], [-123.02747352822992, 47.520271793599555], [-123.02689006454061, 47.52027178900823], [-123.02635149571962, 47.520271842063124], [-123.02585766573985, 47.52031671709755], [-123.0247356401448, 47.52031674486688], [-123.02316471624272, 47.520316707272535], [-123.02285062014514, 47.52031671842357], [-123.02231198353363, 47.520316687659246], [-123.02069613247596, 47.52031672675315], [-123.01957402990368, 47.52031672168074], [-123.0191701289741, 47.52031668187846], [-123.01782365155627, 47.520316722896105], [-123.0171054598988, 47.52031673219281], [-123.01571410370869, 47.52031667448163], [-123.01535499798868, 47.52031671736121], [-123.01504091289458, 47.52031670048769], [-123.01463691723552, 47.52031667308499], [-123.0139636267253, 47.52031672412305], [-123.01360462677366, 47.520316726504866], [-123.01320063371931, 47.520316692472974], [-123.01275180169262, 47.52031673936927], [-123.01239272675171, 47.52031667779809], [-123.01118091026429, 47.520316671295824], [-123.009071347284, 47.52031673967816], [-123.00866743939, 47.52031674370936], [-123.00803908260632, 47.52031672746135], [-123.00512164276857, 47.52031673063382], [-123.00296724896042, 47.52027178993289], [-123.00126171025268, 47.52027184362775], [-122.99901747596427, 47.52027181556992], [-122.99636943004647, 47.5202718285406], [-122.99417010586866, 47.52027184538572], [-122.99363148718054, 47.52027182271681], [-122.99340709271067, 47.520316707785724], [-122.99237481073507, 47.520361577496836], [-122.99174640863265, 47.52040651100711], [-122.98914317645531, 47.520541123794224], [-122.98730296149084, 47.520630856708884], [-122.98627066739556, 47.52067574724542], [-122.9852383758635, 47.52072062568522], [-122.9842061170649, 47.52081043364966], [-122.98317372658285, 47.52085532123667], [-122.9826351009234, 47.52085532331859], [-122.98115404411635, 47.52094507826118], [-122.9801216611719, 47.520989930082685], [-122.97697979354096, 47.52116947853384], [-122.97491522271201, 47.52130413262571], [-122.9722222040327, 47.52143877567782], [-122.97195292593332, 47.52143881915657], [-122.97163866171806, 47.521438805521925], [-122.97056154481214, 47.521483666165025], [-122.9698433814053, 47.52148365719856], [-122.96966384744141, 47.5214836309642], [-122.96948428752344, 47.52148369665016], [-122.96930479397194, 47.5215285199314], [-122.9691252341501, 47.52152858488409], [-122.96876616714266, 47.5215285291077], [-122.96840707461517, 47.521528564146806], [-122.96813780055882, 47.52152859589944], [-122.96777873514998, 47.52152853607277], [-122.96750946185563, 47.521528565892616], [-122.9671953179637, 47.52157344567276], [-122.96683615072533, 47.52157341524914], [-122.96652196960298, 47.52157344228745], [-122.96625269754192, 47.521573468246196], [-122.96589371166031, 47.52157345971966], [-122.96562436349983, 47.521573424719485], [-122.96531011693192, 47.52161833107506], [-122.96495113218825, 47.52161831868943], [-122.96459204505607, 47.52161833809175], [-122.96423295850465, 47.521618356021115], [-122.96387397550382, 47.52161833921824], [-122.96360462950626, 47.52161829800826], [-122.96329038327686, 47.52166319719529], [-122.96297620649507, 47.52166321151892], [-122.96266203015794, 47.521663224715006], [-122.96234785426557, 47.52166323678352], [-122.96198887392855, 47.521663212256506], [-122.9615848834242, 47.52166321709603], [-122.9601485888592, 47.521708081239865], [-122.95992415816175, 47.521752974779986], [-122.95880201211813, 47.52175296292], [-122.95835322447104, 47.5217978587188], [-122.95067819129652, 47.52202225839529], [-122.94740169493647, 47.52215691789656], [-122.94569622176498, 47.52224670033458], [-122.94340714463941, 47.52233641721794], [-122.94129767298769, 47.5224262183302], [-122.93968182510056, 47.52251597654807], [-122.93887385731122, 47.52251596331822], [-122.93680929865612, 47.52247111565765], [-122.93546272827507, 47.52242621323031], [-122.93474466072448, 47.52242625250348], [-122.93308401842393, 47.5224262284885], [-122.93268004650454, 47.522381340626175], [-122.93214144537168, 47.52238130921258], [-122.93200671151195, 47.522381348828574], [-122.93115402558878, 47.522381364824156], [-122.92967284313215, 47.52233647042852], [-122.92922405374972, 47.52233645858541], [-122.92778768180163, 47.522336436226], [-122.92706964617751, 47.52229156078626], [-122.92644123102866, 47.522291546271795], [-122.92536401040923, 47.5222915878865], [-122.92047174637702, 47.52215694004471], [-122.92015760046745, 47.52215689305077], [-122.91948428103863, 47.52215689716154], [-122.91908038774311, 47.522156949569876], [-122.91881114342655, 47.522156921955926], [-122.91697084305606, 47.52211204506486], [-122.91535508216644, 47.52206716815419], [-122.91243761519813, 47.52202228557632], [-122.90956516735737, 47.52197739391155], [-122.908487933417, 47.5219325014879], [-122.90790444748257, 47.52193247575588], [-122.90548070208692, 47.521887604383416], [-122.9050319142447, 47.52188765299967], [-122.90027433686105, 47.52184275486832], [-122.89421507206963, 47.52175299392324], [-122.88618094204789, 47.52166321982734], [-122.88326355513271, 47.521618320376135], [-122.87733898601128, 47.521483688787384], [-122.87442155645584, 47.52143880447054], [-122.87347896967167, 47.52143878408347], [-122.87222222377719, 47.521393900299636], [-122.86477151510842, 47.52130412519395], [-122.85682727677427, 47.521304113788354], [-122.85512165111236, 47.52130412993029], [-122.84973568483926, 47.52134898611371], [-122.84771594436143, 47.52134901845491], [-122.84520249663221, 47.52134899411273], [-122.84457414517554, 47.521349037665416], [-122.84408040364956, 47.521393932677825], [-122.84327246862588, 47.52139390046052], [-122.84304804967336, 47.52139392054547], [-122.84224019509192, 47.52139393793981], [-122.84111815568941, 47.52134901564375], [-122.84093854532958, 47.52134903537935], [-122.84048973500997, 47.521304151546296], [-122.84031022836758, 47.521304136874356], [-122.84004090398888, 47.521304176860994], [-122.83981641218384, 47.52130412951628], [-122.83977160631179, 47.521304123765205], [-122.83923298266204, 47.52125928815926], [-122.8390983859286, 47.52125924391321], [-122.83461005803403, 47.52107974268899], [-122.8319170289986, 47.520989922534014], [-122.83187212206747, 47.520989945840626], [-122.83169262383463, 47.52098991348041], [-122.83066021507614, 47.52094506144223], [-122.82810199358835, 47.52085529944834], [-122.82648609375977, 47.5208104232128], [-122.8250947736322, 47.520810388738575], [-122.82496016064144, 47.520810414986435], [-122.82311986751783, 47.52076554193462], [-122.82303016075726, 47.520765546398984], [-122.82280566288776, 47.52076554764566], [-122.82258126826241, 47.52076551522248], [-122.82244665695877, 47.52076553760395], [-122.82213245329358, 47.52076554089933], [-122.82168363924315, 47.52076556427579], [-122.82118994801485, 47.5207655109282], [-122.8208307819931, 47.52072064917947], [-122.82051668399824, 47.52072061357929], [-122.81997806531064, 47.520720663093556], [-122.81899066630743, 47.520720626612956], [-122.81809299618764, 47.520675760658804], [-122.81795838792914, 47.52067577613589], [-122.81732999527605, 47.52067574936746], [-122.8168362885093, 47.52067576370363], [-122.8163873832569, 47.52067579300616], [-122.8162976794455, 47.52067579057031], [-122.81620779605926, 47.52067576196958], [-122.81548972757686, 47.52063090034359], [-122.81481643962694, 47.52063087040213], [-122.81477153657853, 47.52063088493279], [-122.81450232451388, 47.52063090546369], [-122.81441262157134, 47.52063090109516], [-122.8141432303391, 47.520630894445404], [-122.81333534125491, 47.520630862518985], [-122.8131558333458, 47.520630884382356], [-122.81266208560235, 47.52058599697271], [-122.81050770299302, 47.52058598178733], [-122.81019354614111, 47.52054112317996], [-122.80269797783798, 47.5204513548574], [-122.80099247940457, 47.52040645260847], [-122.80103736702965, 47.52018208060158], [-122.80130669366304, 47.505684771845566], [-122.8013066304483, 47.501779922245795], [-122.80130659987685, 47.50160035212813], [-122.80130665300733, 47.50079244256142], [-122.80130656481218, 47.50043340237254], [-122.80130667326014, 47.500209003362876], [-122.80130668769996, 47.499849934365415], [-122.80130660351826, 47.49733649846848], [-122.80130663742068, 47.495451388605375], [-122.80130662459915, 47.494778118250316], [-122.80130654864524, 47.49257882505206], [-122.8013066140161, 47.49082839171822], [-122.80108217864051, 47.48701329013978], [-122.80103728976422, 47.486160535693585], [-122.80099250450874, 47.485307762900625], [-122.80094749892969, 47.48409587305793], [-122.80090262486068, 47.48351239456232], [-122.80090273110014, 47.481133613964786], [-122.80085781629748, 47.476241343388914], [-122.80076798618218, 47.47211206565914], [-122.80076799843383, 47.47058600990071], [-122.8007231906755, 47.46973326267297], [-122.800723179879, 47.46955371706201], [-122.80067829402961, 47.46407796527857], [-122.80063331484965, 47.46201330578956], [-122.80049876431976, 47.45029877389628], [-122.80049872623295, 47.44729162345622], [-122.80063337601419, 47.444867929246705], [-122.80067832218836, 47.44379070996596], [-122.80090267234232, 47.43934725487985], [-122.8009923967285, 47.437596806559434], [-122.80099237893737, 47.437551911608274], [-122.80112713742281, 47.43467939712111], [-122.80112706482723, 47.43449982822576], [-122.80126181450012, 47.43261477607752], [-122.80121688064558, 47.42920365423563], [-122.80112712257527, 47.42489481601631], [-122.80108218354523, 47.42139394971895], [-122.80108227049062, 47.420451402150206], [-122.80108224127065, 47.419419056782615], [-122.80108217129045, 47.41901512010661], [-122.80108219754032, 47.41811743627844], [-122.80108227131512, 47.41614258299244], [-122.80108219376932, 47.4144819320555], [-122.80112710803044, 47.41277630132898], [-122.80112711057865, 47.40864705096557], [-122.80117198529697, 47.40541545258911], [-122.80117195211469, 47.40505640428193], [-122.80117197443649, 47.404024106412166], [-122.80121681090333, 47.403934339428865], [-122.80121681738247, 47.403665029828524], [-122.80121687921314, 47.40357526897342], [-122.80108227512162, 47.403575292231395], [-122.79048982177287, 47.4035303935926], [-122.77976266358688, 47.403485498068186], [-122.7642330200785, 47.40344063945066], [-122.7640535701818, 47.4034406252331], [-122.76360465109613, 47.4034406409002], [-122.75938566582752, 47.403395743454574], [-122.75916124936873, 47.40339576913642], [-122.75839821581435, 47.40339572469488], [-122.75785957337142, 47.4033957438424], [-122.7575454495622, 47.40339570577675], [-122.74969087265687, 47.403530389012175], [-122.74434975635944, 47.403575263642054], [-122.74376625487216, 47.403575297387185], [-122.7428685482617, 47.40357526943772], [-122.73716841915858, 47.403665039707356], [-122.73137849295863, 47.40362013170733], [-122.72671064020919, 47.40348553126204], [-122.72563339022521, 47.403440620035575], [-122.72540898186787, 47.40344065117984], [-122.72527432238414, 47.40344059074746], [-122.72469084752262, 47.4034405892891], [-122.72451130104761, 47.403440618896525], [-122.72410737422997, 47.40344058394085], [-122.7230750779283, 47.403395701370364], [-122.7213246511548, 47.403395733310255], [-122.72029226945433, 47.40335085078297], [-122.7190356046994, 47.40335086220045], [-122.71890091498439, 47.4033059597364], [-122.71858668483956, 47.40326107454185], [-122.71782365698165, 47.403216212174826], [-122.7176442199052, 47.40321619478976], [-122.71750953944426, 47.40321621439818], [-122.71715049306493, 47.40326107591943], [-122.71670169605888, 47.40326109410009], [-122.71602832332552, 47.40326109083088], [-122.71548981091651, 47.40326109231184], [-122.71513073488549, 47.40326111338229], [-122.71504101734655, 47.40326110197683], [-122.7149511970928, 47.403261123365084], [-122.71414325403049, 47.403261088173814], [-122.7138740025303, 47.40330600779917], [-122.71369446324746, 47.40326109093397], [-122.71347006820427, 47.403261091451064], [-122.71329053178644, 47.403261098027265], [-122.71320071225699, 47.40326111761908], [-122.7125275293569, 47.403261113646685], [-122.71171959553388, 47.40330598039045], [-122.71122584850752, 47.40330599594337], [-122.71086677914965, 47.40330599952672], [-122.71059752889835, 47.403305984807176], [-122.71050771038658, 47.40330600163696], [-122.71032817622805, 47.403306002139665], [-122.70996910835713, 47.403306002040246], [-122.70965500152342, 47.40330597608516], [-122.70844304838322, 47.40335083403363], [-122.70736593096312, 47.40335086525386], [-122.70723125644852, 47.40335086905354], [-122.7068273361616, 47.40335084633288], [-122.70660284499007, 47.40335086212798], [-122.70597453210446, 47.40339574230847], [-122.70566032763101, 47.403395734903704], [-122.70552565403116, 47.40339573608134], [-122.7049422826003, 47.403395754079824], [-122.70426891766942, 47.40339575237149], [-122.70382014588613, 47.40339570452403], [-122.7026082757438, 47.40339570843223], [-122.70193508664477, 47.403440639627846], [-122.70166575453047, 47.40339570570558], [-122.70121696157479, 47.40339573650602], [-122.70103733197251, 47.403395750827286], [-122.70085780527589, 47.40339573191047], [-122.70018463198669, 47.40339572503636], [-122.69942155740998, 47.40344058396515], [-122.6991074382898, 47.403440612169085], [-122.69874828510247, 47.40344059892358], [-122.69672848073849, 47.40344061272478], [-122.69627969752867, 47.403440618217175], [-122.6949781142101, 47.403485502543944], [-122.69363167404596, 47.403485518078355], [-122.69241972897893, 47.40348550581626], [-122.6920158084419, 47.40348550675792], [-122.68950238810108, 47.40348550140114], [-122.68456521353251, 47.403440608769834], [-122.68402662113057, 47.40344063354999], [-122.67415234766105, 47.40344062970698], [-122.67096550110232, 47.403395729895635], [-122.66908044957238, 47.40339570960219], [-122.66580390955856, 47.403350839117145], [-122.66441262211825, 47.403305941737706], [-122.66409842548175, 47.40330596910705], [-122.66405347449283, 47.40330597009099], [-122.66396375143235, 47.40330599832178], [-122.66373938114678, 47.40330596334489], [-122.6624825780968, 47.40326107205266], [-122.6602833152476, 47.40321617426213], [-122.65341614664813, 47.40308157603016], [-122.65310196771318, 47.40308156390055], [-122.65099245588937, 47.4031264169641], [-122.64767120718818, 47.403126457071814], [-122.64610022780577, 47.40312640686285], [-122.64601040981691, 47.40312644949115], [-122.64565137046596, 47.403126461492434], [-122.6428237972031, 47.40317132146848], [-122.63990630982265, 47.4032162513967], [-122.6372133808282, 47.40321622941428], [-122.63712349026775, 47.403216203745004], [-122.63703377859444, 47.403216204370864], [-122.63501408007136, 47.40326109937008], [-122.63496913519758, 47.40326108541854], [-122.63465495510577, 47.40326109908117], [-122.63434077547207, 47.40326111161617], [-122.63398175440655, 47.40326107577329], [-122.63393680974856, 47.403261061291715], [-122.6338470993058, 47.40326105865333], [-122.63375728612293, 47.403261088714444], [-122.63335341593229, 47.40330598776942], [-122.6306603617249, 47.4033957078422], [-122.62985249158422, 47.403395722569215], [-122.62940357650308, 47.403440619804364], [-122.62895482661429, 47.403440648068525], [-122.62846105789505, 47.40344059755185], [-122.62801230997069, 47.403440620984334], [-122.62756339625305, 47.40348550886482], [-122.62711457365914, 47.40348546851189], [-122.62635156640351, 47.40353039494136], [-122.62608234014972, 47.40353039624174], [-122.62549884268752, 47.40353041033142], [-122.62522943866678, 47.403530382597395], [-122.62504992113573, 47.40353039218274], [-122.62469087751812, 47.4034855170005], [-122.62365864512516, 47.40348552292732], [-122.62105537112012, 47.40348550989988], [-122.62078604900202, 47.40348552768364], [-122.62074110686243, 47.403485506431046], [-122.61993324548133, 47.40348552162047], [-122.61867655541096, 47.40348553771297], [-122.61652214125412, 47.403485473490434], [-122.61468187409736, 47.40348550733725], [-122.61450236556232, 47.40348549528997], [-122.61423305164898, 47.40348549291329], [-122.61400867879259, 47.403485514440156], [-122.61355985774965, 47.40348549656471], [-122.6131109348596, 47.40348550915577], [-122.61293142763671, 47.403485493887146], [-122.61275192056384, 47.40348547825044], [-122.61225823781321, 47.40348548752902], [-122.6111810714585, 47.40348550464173], [-122.61041798039614, 47.403485523713016], [-122.60952032748544, 47.403485540813385], [-122.60013974336307, 47.40353041838029], [-122.59991538497852, 47.40353040379072], [-122.59969092403979, 47.40353042137821], [-122.59951132505476, 47.40353041134723], [-122.59937676670684, 47.403530400438804], [-122.59919716798476, 47.40353038976331], [-122.59901756941294, 47.40353037871936], [-122.59883814978626, 47.40353039377299], [-122.59870348907134, 47.403530414580786], [-122.59852389091249, 47.40353040252404], [-122.59829953421688, 47.40353038379332], [-122.59753644100307, 47.40357527634011], [-122.59677347277604, 47.403575235723615], [-122.59627979890196, 47.40357524688229], [-122.59434976986769, 47.403575304771046], [-122.59381116497984, 47.403575267186426], [-122.593048183203, 47.40357528607016], [-122.59300322158151, 47.40362014447811], [-122.59291350067055, 47.403620191874445], [-122.59161189460247, 47.40366504580721], [-122.59098357522316, 47.40366503681773], [-122.59017556314058, 47.40366502688651], [-122.59008584331183, 47.40366507138662], [-122.58995129044057, 47.40366504599836], [-122.58891890783148, 47.40366507574653], [-122.58838031541855, 47.40366500476904], [-122.58712359938535, 47.403620166553566], [-122.58680935698901, 47.403620133265186], [-122.58214158319684, 47.40357529713616], [-122.58160298216036, 47.403575276408645], [-122.58092966820685, 47.40353038449898], [-122.58025649762888, 47.40353040797355], [-122.57962800797003, 47.40353038291184], [-122.57922413820992, 47.4035304153063], [-122.57832643160621, 47.40353042120692], [-122.57666577927326, 47.403530385963535], [-122.57518465989465, 47.40348551811558], [-122.57002298292223, 47.40344060758777], [-122.56997812745342, 47.40344061951944], [-122.56634265416498, 47.403395751495175], [-122.56598356252941, 47.40339574543439], [-122.56522052663995, 47.403395738387665], [-122.56400864015643, 47.40344062291009], [-122.56234802188285, 47.40344059190605], [-122.56203386629835, 47.403440620878825], [-122.56149518793171, 47.40344060108992], [-122.56068728683118, 47.40344065406862], [-122.56064243331572, 47.40344066121735], [-122.56037311815668, 47.403395723523424], [-122.56028341136371, 47.40339573747437], [-122.56023855798128, 47.40339574441538], [-122.55992432989386, 47.40339570656152], [-122.55902665339163, 47.40339569844096], [-122.55835339731887, 47.4033957700914], [-122.5580391720009, 47.403395725471526], [-122.55799431908854, 47.40339573126278], [-122.55705173397088, 47.40344060302715], [-122.55696202847233, 47.40344061357659], [-122.55525638002462, 47.403440610664724], [-122.55485253023242, 47.40344062257933], [-122.55453828284534, 47.40344065735641], [-122.5533713371508, 47.403440588356986], [-122.55220437094583, 47.40344059575923], [-122.55103741110744, 47.40344058760723], [-122.55081305093009, 47.40344063109832], [-122.54650418175224, 47.403395781195265], [-122.53698902771188, 47.40335086763128], [-122.53698894206397, 47.40339576230138], [-122.53649517368322, 47.40438318510528], [-122.53640544373323, 47.404652477542975], [-122.5362259097351, 47.404921793422105], [-122.5357322788072, 47.405819449275185], [-122.53519359596842, 47.40671708668194], [-122.5338919830265, 47.40855729589215], [-122.53232103545479, 47.41044241475394], [-122.53079499145448, 47.41210307993799], [-122.53061547395717, 47.41228265306166], [-122.52994225093379, 47.41327003208832], [-122.52792245621919, 47.41614257195688], [-122.52765330181883, 47.41659143939964], [-122.52680042590247, 47.418117474403225], [-122.5258578867339, 47.42022699325763], [-122.52581303788027, 47.42040649354056], [-122.52451139854978, 47.4238625483394], [-122.52383811690719, 47.426196435071276], [-122.5235239628356, 47.42826105297858], [-122.52334442347443, 47.43046036028392], [-122.52334435408973, 47.43113361018519], [-122.52334442126843, 47.432839184121285], [-122.5233444223882, 47.433018741029755], [-122.52343413285638, 47.433557287179106], [-122.52361379109209, 47.43732751651349], [-122.52352401736812, 47.442040260322585], [-122.5234790014021, 47.442668608010116], [-122.52347907628868, 47.44352140347917], [-122.52338926262192, 47.44518208933556], [-122.52329957291408, 47.44621441902978], [-122.5231648859584, 47.4470222808238], [-122.52276098426161, 47.44971530625504], [-122.52177353734102, 47.45348552086823], [-122.52087582258083, 47.456447792303024], [-122.52020259879849, 47.45869193167086], [-122.52015770091049, 47.45887147850404], [-122.51943958831026, 47.461115678485804], [-122.51930498081443, 47.461429828866905], [-122.51926007547783, 47.46160938533631], [-122.51899074922142, 47.462237726474896], [-122.5189009330585, 47.462417272585476], [-122.51768906356301, 47.46488584492619], [-122.51652216544024, 47.46672604933041], [-122.51593862834314, 47.467578853012675], [-122.51414337195389, 47.470137185433735], [-122.51364959792414, 47.47081046135792], [-122.51162994557572, 47.473413690949826], [-122.5094754728816, 47.476061825893005], [-122.50790458573886, 47.47794687920666], [-122.50637850790972, 47.479787065853245], [-122.50543597772658, 47.480909181961046], [-122.50516670739519, 47.481268215808754], [-122.50310206302976, 47.48337779556351], [-122.50126190396307, 47.48526287527542], [-122.49816486510116, 47.488494482630244], [-122.49650423916347, 47.49046930126874], [-122.4955616360833, 47.4915914319819], [-122.49381124644302, 47.49410487320221], [-122.4934072209814, 47.49477810855087], [-122.49282379921513, 47.4960348699729], [-122.49273404150645, 47.49616950263343], [-122.49174655026783, 47.49760574885888], [-122.49111820918725, 47.498189288283335], [-122.49017566267214, 47.4990420516366], [-122.48981659745274, 47.499490890090264], [-122.48788661981945, 47.501914534085216], [-122.48649518759233, 47.504248499827966], [-122.4860014799686, 47.50519104630336], [-122.48559759044039, 47.50626826113339], [-122.48523855016005, 47.507704513346816], [-122.4851936144415, 47.508198189905364], [-122.48519364622032, 47.508826561227686], [-122.48519366170328, 47.510711663734305], [-122.48519367887047, 47.51084632940543], [-122.48505903390827, 47.511968416198016], [-122.48496917259526, 47.51237236524637], [-122.48492438815731, 47.51273144403504], [-122.48487944376573, 47.5130456278456], [-122.48461014839557, 47.5140330863535], [-122.48429598405848, 47.51502050130099], [-122.48335345400328, 47.517399305257065], [-122.48281480488588, 47.51834180851524], [-122.48182733587981, 47.519598589754374], [-122.48151314611076, 47.52000252253752], [-122.4800320147855, 47.52175298449982], [-122.47805723408871, 47.523548315985046], [-122.47689023304059, 47.52449083715245], [-122.47590271181083, 47.5252987388532], [-122.47406254844125, 47.52660035253941], [-122.47069633609635, 47.52790194678358], [-122.469843600971, 47.52821616001774], [-122.46858677903931, 47.528754772252114], [-122.4637394275215, 47.53090916835926], [-122.46194408426874, 47.531537499402795], [-122.45992431476756, 47.5319863677771], [-122.45965497632716, 47.53207612317098], [-122.45830848159315, 47.532749356797304], [-122.45512179490518, 47.534769142847274], [-122.45408949777114, 47.53544239799232], [-122.45233908308894, 47.53656444098624], [-122.45081304044618, 47.53746213453789], [-122.44991534004711, 47.53804558554285], [-122.44722241551237, 47.53988583206475], [-122.44699796745712, 47.54006537209525], [-122.44650420409697, 47.54046932675891], [-122.44601054895556, 47.54100787458797], [-122.44542700794007, 47.541860690065775], [-122.4451128823521, 47.54248906409743], [-122.44502305803867, 47.542713477590404], [-122.44484352936142, 47.54334186471459], [-122.44479867131108, 47.54441903245008], [-122.44434978017927, 47.54783016608799], [-122.44385616311507, 47.551779909707236], [-122.44390102071768, 47.55370985971248], [-122.44399076548477, 47.55447287141616], [-122.44430493768705, 47.55555011832745], [-122.44461910982963, 47.556447749059004], [-122.44475374118538, 47.556896575006434], [-122.44515773512143, 47.55774932844094], [-122.44574120337754, 47.55882658476023], [-122.44699793901894, 47.56075653668775], [-122.44847909830854, 47.56295579967423], [-122.45022956142498, 47.565603935528245], [-122.45081303004005, 47.56636692954978], [-122.45166586287823, 47.56748905698988], [-122.45242886349807, 47.568386718509004], [-122.45305720040469, 47.569104868099096], [-122.45323668438292, 47.56941904979226], [-122.45337138433712, 47.56959857162671], [-122.45399973445855, 47.570900173252625], [-122.45413438788358, 47.57130416220316], [-122.45449347509837, 47.57233643471889], [-122.45476276841457, 47.573682926233836], [-122.45480762573736, 47.57395221997232], [-122.45485249893984, 47.57476016760525], [-122.45476281142943, 47.57619641654553], [-122.45476273960075, 47.57637591433176], [-122.45471784721335, 47.57660038407367], [-122.4546281185952, 47.57722870248897], [-122.45408955362012, 47.57965240434903], [-122.45359579132852, 47.58122334917626], [-122.45314698371395, 47.582210744829425], [-122.45171062213122, 47.585083284982105], [-122.45139647731997, 47.585711647929244], [-122.45049885236418, 47.587417199710785], [-122.44969087732223, 47.58894323761554], [-122.44834438239566, 47.59123230684519], [-122.44789556879998, 47.592309482959045], [-122.4475814038594, 47.59329694613871], [-122.44731210066038, 47.59446388770649], [-122.44717742177343, 47.59558597222693], [-122.44699793627738, 47.597605734623485], [-122.4469530141534, 47.598099429284275], [-122.44686334020699, 47.59917663439569], [-122.44654916202492, 47.60276731211677], [-122.44619005554627, 47.60703123869326], [-122.44605541460601, 47.60801867422332], [-122.44650427551808, 47.61147466834139], [-122.44686330551376, 47.61241721550396], [-122.44731219917756, 47.61309048023214], [-122.44771607949286, 47.61421252507307], [-122.44789564614662, 47.61475114022292], [-122.44829953733591, 47.615693703159856], [-122.4486137432276, 47.616366977768365], [-122.44865864795813, 47.61645671050589], [-122.44865860820659, 47.61650158346353], [-122.44919730713843, 47.61753391600294], [-122.44955631054768, 47.618162237360615], [-122.45005003952797, 47.61901508392283], [-122.45139654331578, 47.62094506501048], [-122.45301227915834, 47.62287502380425], [-122.45377531619246, 47.62377269945368], [-122.454269048381, 47.62462549681922], [-122.45489744039112, 47.62655543267747], [-122.45498721774975, 47.62718383748239], [-122.4548973747405, 47.627632626345715], [-122.4545832340817, 47.62902403077722], [-122.45435881021145, 47.62965241177663], [-122.45417923486832, 47.63023587193671], [-122.45408955415046, 47.630684714675176], [-122.45386507739745, 47.631358001985646], [-122.45368551898225, 47.63203122242797], [-122.45350606128326, 47.632569789304775], [-122.45305716977691, 47.63454466978912], [-122.45283285909076, 47.63607071889286], [-122.45269812695095, 47.63876373230693], [-122.45265323446029, 47.639122762343355], [-122.45269815240144, 47.64235435409247], [-122.45283277992368, 47.64379059427129], [-122.45319190562765, 47.64625923022925], [-122.45323678707364, 47.64670805622523], [-122.45337135443012, 47.64765057833511], [-122.45408950283178, 47.651106610281396], [-122.45426897839137, 47.65200426543906], [-122.45435884766698, 47.65267752791386], [-122.45440366267498, 47.653261036587175], [-122.4552116037747, 47.65532564619006], [-122.45606438648338, 47.65770444008343], [-122.45673758818778, 47.659679321199235], [-122.45723130512036, 47.66134000736061], [-122.45808410913767, 47.663898330766266], [-122.45857784025928, 47.66560391346267], [-122.45938581828304, 47.669149701541215], [-122.4596100977334, 47.67112456600319], [-122.45974478033914, 47.672111971151665], [-122.45978968625457, 47.67242613605219], [-122.45969996508146, 47.67538848478119], [-122.4596998879157, 47.675792417526765], [-122.45969992205157, 47.675927071463256], [-122.45898179094561, 47.6809091028385], [-122.45857780632701, 47.68248002304855], [-122.45812895690959, 47.68378165314848], [-122.45799431538492, 47.684095832133686], [-122.4576352843794, 47.68517301316322], [-122.45750064220977, 47.68544235767314], [-122.45696203406696, 47.686519503907704], [-122.45610923257107, 47.68831486929119], [-122.4547627060242, 47.6904692489044], [-122.4544486303524, 47.69096296781943], [-122.45332656163195, 47.692668541783476], [-122.45301232206303, 47.69325201006443], [-122.45274297671783, 47.69379059047085], [-122.45157608224827, 47.69585524653923], [-122.45063353233452, 47.69751595887959], [-122.44987045316768, 47.69886244514146], [-122.44928701860087, 47.70011914238609], [-122.44892787460095, 47.700882180261466], [-122.44883813016247, 47.70101680098409], [-122.44852400776328, 47.70151057292152], [-122.44807517302458, 47.70227358674468], [-122.44690810682333, 47.70447283628706], [-122.44641446196228, 47.70519094283398], [-122.4456514764161, 47.70631304527194], [-122.4449333097677, 47.70707604838952], [-122.44430491587404, 47.70765955997135], [-122.4416119426656, 47.70945488602527], [-122.44004107501814, 47.71057694314485], [-122.43927800217098, 47.711250240330216], [-122.437437850145, 47.71304554272953], [-122.4370338932909, 47.71394321309247], [-122.4368991937282, 47.71430226501878], [-122.43662991215218, 47.71519994151722], [-122.43577714276725, 47.71798271862007], [-122.43532828295906, 47.71982292557779], [-122.43438570836615, 47.72435613825217], [-122.43407162825132, 47.726375892439634], [-122.4339817782194, 47.726734995866934], [-122.43344321477703, 47.72888932029212], [-122.43330856136517, 47.72933817499833], [-122.4332187333344, 47.729562591034], [-122.43268016908036, 47.73095401195377], [-122.43223130639016, 47.731941414706505], [-122.43200690587746, 47.732390237359056], [-122.42994227427118, 47.73526278401688], [-122.42715958979149, 47.745361537989915], [-122.42702489301668, 47.747515922712346], [-122.4270249044202, 47.74967033901316], [-122.42715958082094, 47.75191449973226], [-122.4273840036303, 47.75393421185189], [-122.42810212185175, 47.758108357048286], [-122.42814687708298, 47.75833277521357], [-122.42890995758434, 47.76080134647585], [-122.42944858805069, 47.762417204071134], [-122.4296281426823, 47.762865979530396], [-122.42976274148059, 47.76318017788054], [-122.43003209231811, 47.76376363343052], [-122.43025650637918, 47.7644369235389], [-122.43119900297077, 47.76645665294521], [-122.43276996647485, 47.769284287399685], [-122.434834566675, 47.77278518249113], [-122.4350141031949, 47.7730994308313], [-122.43721337286662, 47.77646563248441], [-122.43788664584736, 47.77749793495063], [-122.4381110233039, 47.77781214132209], [-122.43815595643524, 47.7779018631197], [-122.4398166486661, 47.780190942129934], [-122.44075917471702, 47.78216584822874], [-122.4414324346841, 47.78351232397532], [-122.4421056528338, 47.785352498447764], [-122.44219548834762, 47.78562183031661], [-122.44224033469995, 47.78571159656519], [-122.44291355795261, 47.789840892118185], [-122.4429136271085, 47.7932071246586], [-122.44286870631792, 47.79414966474519], [-122.4427340275901, 47.79504729618598], [-122.44250964851224, 47.79621426854538], [-122.44224029227416, 47.798458441492585], [-122.44179142442205, 47.79989470578818], [-122.44152214237194, 47.80070262701834], [-122.44120793541566, 47.801600276586], [-122.44089381782575, 47.80249790849085], [-122.44062448050816, 47.803126292764944], [-122.44044493717912, 47.803485380271454], [-122.44004104120951, 47.80447283046538], [-122.43963705757199, 47.80541538068158], [-122.43909847329306, 47.80658228665553], [-122.43887403287876, 47.807120899882364], [-122.43860478419896, 47.8076594911815], [-122.43842525841524, 47.80810838837948], [-122.43824569017352, 47.80851227591225], [-122.4379763745351, 47.809140695955485], [-122.43784173835412, 47.80941000065343], [-122.43761730390351, 47.809903686776245], [-122.43730312871403, 47.81066668298865], [-122.43698896578, 47.81133996300384], [-122.43685431567374, 47.81160927823036], [-122.43667483234768, 47.81196829443197], [-122.43640549624799, 47.812596661068824], [-122.43577711354833, 47.813988048663624], [-122.43546300304764, 47.81466133581226], [-122.43537315434287, 47.814975469639364], [-122.43523846696107, 47.81528966923704], [-122.43496917502902, 47.815962908524746], [-122.43465502032204, 47.81668108797354], [-122.43438567818207, 47.817444082200716], [-122.43398174963716, 47.818655942449894], [-122.43294953352299, 47.820675695140004], [-122.43259039552746, 47.82143871861547], [-122.4320966969631, 47.82256080110398], [-122.43079506213667, 47.82556798685027], [-122.42962812175257, 47.82808145418855], [-122.42976278343993, 47.82870977998882], [-122.43268017216931, 47.84204014343503], [-122.43357778891044, 47.843611047938346], [-122.43559766801273, 47.84621428312403], [-122.43829064187425, 47.84935608868191], [-122.44134266090299, 47.852453029913875], [-122.44443966614416, 47.85550511491474], [-122.4646370799153, 47.873009619800236], [-122.46670176132625, 47.87480494431654], [-122.4667017001047, 47.874849804039414], [-122.46688127971586, 47.875074203774986], [-122.46728516332377, 47.875433301838804], [-122.46840726293523, 47.87615145019067], [-122.46993322566094, 47.87745302831266], [-122.47056172866108, 47.8781262952007], [-122.4717286518252, 47.87933815143026], [-122.47285073730427, 47.88050508716531], [-122.4735240014732, 47.88149255816945], [-122.47442164229649, 47.88265951425157], [-122.47554379251427, 47.88414065077], [-122.47662092316035, 47.88548714754218], [-122.4777878488105, 47.887058056241884], [-122.47859573403557, 47.88818012476009], [-122.47967298650681, 47.889706146502405], [-122.48075015219115, 47.89163615532866], [-122.48155806522493, 47.89307245184825], [-122.48232106439474, 47.89459843883465], [-122.48303916667233, 47.89652842283363], [-122.48384716451064, 47.89836865808018], [-122.48474476145952, 47.900433306780364], [-122.48546292370716, 47.90200415421725], [-122.48600155109231, 47.90357509868255], [-122.48654011077645, 47.905370487679676], [-122.48739287994059, 47.90752486190184], [-122.48811110126144, 47.91053203932457], [-122.48878431074237, 47.91246197249879], [-122.48891897820036, 47.91282104991052], [-122.48900873632803, 47.91304548266319], [-122.48977176598005, 47.91502033743479], [-122.49084894815316, 47.91708499241688], [-122.4921953835554, 47.919553582399274], [-122.49358684435386, 47.92175286597404], [-122.4948884226775, 47.923368597596614], [-122.49623490554963, 47.92471512493318], [-122.49632472225174, 47.92480492367035], [-122.49820975495122, 47.9265105031499], [-122.4996460360916, 47.927946773802944], [-122.5012619140509, 47.9290239370355], [-122.50180048535181, 47.92969716775023], [-122.5032367253524, 47.93046021616506], [-122.50404465325667, 47.93090902236956], [-122.50521161883069, 47.93158228018064], [-122.50768013773764, 47.93261462712882], [-122.51064241607185, 47.933646906213674], [-122.51463704326488, 47.934679198896404], [-122.51719537537325, 47.93548712606073], [-122.5179584213791, 47.93575645926552], [-122.52240181577015, 47.93696827050617], [-122.52675547734215, 47.93813522597721], [-122.5356873865907, 47.94028965524104], [-122.53716848127213, 47.94087308748133], [-122.54466397508946, 47.94271335735324], [-122.55166579839803, 47.944284219766665], [-122.55709668205878, 47.945496094501], [-122.56472680743421, 47.947605578498624], [-122.5698435117626, 47.94953557413], [-122.5776981507689, 47.9525427766344], [-122.58146823485275, 47.95442785267311], [-122.58285969669251, 47.95514603293814], [-122.58465506611586, 47.95613345431548], [-122.5874826377241, 47.958063447295594], [-122.58900869977873, 47.95918553488195], [-122.59062452964966, 47.960352486116406], [-122.5937662920945, 47.962776210576415], [-122.59394583959775, 47.962910843934885], [-122.59870344733906, 47.96636682500364], [-122.60193508960256, 47.96888029598395], [-122.60534625173239, 47.97179771248314], [-122.60673756061384, 47.97296468152113], [-122.60983454101049, 47.971348870483745], [-122.61176448302751, 47.97063077474679], [-122.61468192797759, 47.96937404099089], [-122.61719536617025, 47.968251938771495], [-122.61845213117627, 47.96744401287878], [-122.6203372103606, 47.96596284286235], [-122.62217748138788, 47.9647510361822], [-122.62329953230312, 47.963898266589545], [-122.62419714839528, 47.96318012573119], [-122.62513974523984, 47.96250688348321], [-122.62626181918611, 47.96169895709436], [-122.62778778322951, 47.960442250539415], [-122.62985250668768, 47.95810831933879], [-122.63209667733281, 47.95550506700948], [-122.6333084213153, 47.95312626673493], [-122.6344754178831, 47.95133091388243], [-122.63555259893262, 47.94845841078308], [-122.63671966066286, 47.9446433157905], [-122.63712353506388, 47.943027503198216], [-122.63739286921921, 47.94168104259053], [-122.63734796033064, 47.938224977473986], [-122.63716843906978, 47.93638480781431], [-122.63707866378304, 47.93566664325906], [-122.63694400830641, 47.93508320949401], [-122.63636057018161, 47.93265951365166], [-122.63568726664323, 47.93014601674693], [-122.63487942712331, 47.92619627468694], [-122.63384709873178, 47.921977268969556], [-122.63214154151167, 47.91829679780833], [-122.63070526446634, 47.91515500053301], [-122.6290894455532, 47.91246196977461], [-122.62626177374209, 47.90882648199376], [-122.62496014122495, 47.90770437020348], [-122.62329949300674, 47.90644764956618], [-122.62168372180614, 47.90528066665096], [-122.61961910407625, 47.9042483500018], [-122.61809302964785, 47.90326091564154], [-122.61535514290429, 47.90222865208486], [-122.61320084179417, 47.90142072782924], [-122.61082194492121, 47.90043326987377], [-122.60902669973345, 47.89976004293859], [-122.60678246405907, 47.898907247446225], [-122.60494231499428, 47.897964708420574], [-122.60238386877496, 47.896348934475576], [-122.60085785828035, 47.89518197430503], [-122.59942153441652, 47.89392518461735], [-122.59856874645949, 47.892937769769624], [-122.59744673563094, 47.89127705787405], [-122.59735698316939, 47.89109754868284], [-122.59659399152622, 47.88957152972913], [-122.59556158736618, 47.88714781931474], [-122.59542699974193, 47.885307600227854], [-122.59538206669187, 47.88400599443631], [-122.5955167446948, 47.882300474313745], [-122.5959655714869, 47.88090908691643], [-122.59614514177717, 47.88041530164607], [-122.59659400817023, 47.879248369069124], [-122.59726721442487, 47.87736324957832], [-122.59789552000085, 47.87619628769624], [-122.5993766536696, 47.87480492192473], [-122.60575014593631, 47.87081027459629], [-122.62419720451855, 47.85963439375683], [-122.62626175500125, 47.85837762683334], [-122.6397267945883, 47.84913165385384], [-122.65364055536001, 47.83948178182675], [-122.66288657020125, 47.83292877383468], [-122.67114513604474, 47.82704912231088], [-122.67168372183525, 47.826690063425325], [-122.67608230056366, 47.82359308675502], [-122.68169267618102, 47.81968823934346], [-122.68537309333944, 47.81717476489738], [-122.68649516725088, 47.816366895302586], [-122.6868542718975, 47.81614248590649], [-122.69210565131567, 47.81232739903566], [-122.70265311928523, 47.80487674845193], [-122.70413438512325, 47.80379956727472], [-122.70575009929894, 47.80258767261914], [-122.71450236662571, 47.79563076070835], [-122.71638744808376, 47.79365595310418], [-122.71670160992673, 47.793341787391995], [-122.71854182164618, 47.791546403055], [-122.72186323270962, 47.787821139173644], [-122.72195294688937, 47.787686434314644], [-122.72370342526303, 47.785217890517245], [-122.72572313360692, 47.782210706246715], [-122.72720436618664, 47.779742096183824], [-122.72868546122236, 47.77740818047692], [-122.73092955723367, 47.773593090091275], [-122.73245567063806, 47.77094497481485], [-122.73326354979226, 47.769508767789205], [-122.73425095775833, 47.76744407262025], [-122.73523848033449, 47.764795974243604], [-122.73591173428538, 47.762910876914454], [-122.73757240299622, 47.75828790350909], [-122.7377070249287, 47.758018590314734], [-122.73869444690921, 47.75523586197475], [-122.7404897697766, 47.75186958971177], [-122.74147724119506, 47.750164014743866], [-122.74170159657754, 47.749804955065166], [-122.74268908019206, 47.74859309809052], [-122.74354178786946, 47.74724661333561], [-122.74381116685234, 47.746887528316975], [-122.74538205280204, 47.74486779734001], [-122.74565138557364, 47.74446382741808], [-122.74645931597678, 47.743431549282185], [-122.74820971772124, 47.74190553142059], [-122.74901756982983, 47.74123222265595], [-122.74933174980269, 47.74096297470303], [-122.75009481590878, 47.740155087373545], [-122.75126173487517, 47.739571547535114], [-122.75278781300936, 47.73826997093497], [-122.75530125558426, 47.73526274617782], [-122.75835333334564, 47.73162726725998], [-122.7602833212376, 47.72893420015946], [-122.76149509871819, 47.72695937960598], [-122.76171954244602, 47.726555427362314], [-122.76338023822566, 47.72341362575663], [-122.76432277605757, 47.72094504154407], [-122.76499599386024, 47.719194573783305], [-122.76575902249712, 47.71605270856073], [-122.76589366367695, 47.7134495084121], [-122.76589373137162, 47.70994860845737], [-122.76535511907002, 47.70743517497091], [-122.76463702117994, 47.70510122943879], [-122.76355978033318, 47.7031712684121], [-122.7624376694051, 47.70151053800535], [-122.76154008204986, 47.700343597583036], [-122.75983442022904, 47.6986380067703], [-122.75848802925995, 47.69666316361957], [-122.75772493623495, 47.69518201102596], [-122.7575005848197, 47.693790643084434], [-122.75750051801921, 47.692354365126974], [-122.75772503417477, 47.69078344465721], [-122.75862263973157, 47.688539248982124], [-122.76005884032875, 47.68620533158789], [-122.76149515331086, 47.684454856048056], [-122.76369440537385, 47.68216581347026], [-122.76499607338869, 47.68113352815732], [-122.76652206891963, 47.6799216724184], [-122.76872140264398, 47.67853032064256], [-122.77047186503604, 47.677542880356654], [-122.7721325400187, 47.67660030473195], [-122.77500509429214, 47.6752538236187], [-122.77908946679345, 47.673907316667155], [-122.78321866787542, 47.67274032922772], [-122.78505896496583, 47.6724261836982], [-122.78770698556582, 47.67197737728983], [-122.7921055237797, 47.671348982220536], [-122.79354188724913, 47.67125920412992], [-122.7958757887557, 47.67103479140803], [-122.79856876954071, 47.670900159876226], [-122.80211451675248, 47.670900163104676], [-122.80601934389618, 47.67094500455868], [-122.80839813664153, 47.67098988693066], [-122.81239277548339, 47.67094500869718], [-122.81589368711352, 47.67072058745741], [-122.8193945608473, 47.67054107521515], [-122.82285057145381, 47.67027174801497], [-122.82639637924048, 47.66991270949066], [-122.82976257460821, 47.66964339840028], [-122.83523838720362, 47.668835545664415], [-122.84434975513138, 47.66726459920661], [-122.84973571628178, 47.66605273458901], [-122.85189011768097, 47.66537950724605], [-122.85458311172538, 47.66461649550567], [-122.85880211245137, 47.662955785868455], [-122.8629763041559, 47.66093603883283], [-122.86804804008304, 47.65819818456098], [-122.86854179848198, 47.65788399905077], [-122.87114497983077, 47.65631306381911], [-122.87258129134592, 47.65541541116469], [-122.87536409141447, 47.653575170994614], [-122.87626167859855, 47.65294683552258], [-122.87908932487092, 47.65070264292928], [-122.88532811131105, 47.64603477693316], [-122.89345196708584, 47.640334629390786], [-122.8969079496915, 47.638449510680964], [-122.899601029674, 47.63719278123823], [-122.90305707957238, 47.635980924965935], [-122.90525638940395, 47.63530770420335], [-122.90803905073724, 47.634589531523275], [-122.91127064951905, 47.63391628513417], [-122.91499598338417, 47.63292888110666], [-122.91845196288344, 47.63189656892385], [-122.92226712821831, 47.63063985998647], [-122.92527432908179, 47.629427990123574], [-122.92868546750334, 47.62785708565505], [-122.9316477002721, 47.626375950247485], [-122.93339812046429, 47.62529873679119], [-122.93402646773998, 47.62480500090794], [-122.93649515975274, 47.622560842172014], [-122.93806603359923, 47.62076553067168], [-122.93999599201767, 47.61708504478664], [-122.94219524840626, 47.613270006242935], [-122.94394577345479, 47.610756547117795], [-122.94690797909279, 47.608467476573004], [-122.94699776004157, 47.608422630504066], [-122.95063325631585, 47.60631308172454], [-122.9506781361221, 47.606268194088045], [-122.95117193349408, 47.60599888208461], [-122.95148609347888, 47.60586422567961], [-122.95211442424963, 47.60563983754773], [-122.95224911499089, 47.6055949355167], [-122.95233888593144, 47.60555008676611], [-122.95238376336306, 47.605505198989796], [-122.95292237682213, 47.605280787958385], [-122.95368538158856, 47.60487686168092], [-122.95377519366355, 47.60487684585862], [-122.95458310427036, 47.60447286114861], [-122.95557049455796, 47.60406896310495], [-122.95628863432786, 47.6037547450856], [-122.95664765971455, 47.60362011381635], [-122.95700678650708, 47.60348544816921], [-122.95781461654238, 47.60317123581925], [-122.95889189400599, 47.60281218283947], [-122.96059746603765, 47.602183823058056], [-122.96346997029605, 47.601151487870624], [-122.9650857382688, 47.60056807073836], [-122.96580380550617, 47.60029872083014], [-122.96629757346422, 47.6000743394241], [-122.96768898357443, 47.599490846423386], [-122.96782369051186, 47.59940106475843], [-122.96934967964118, 47.59854824407748], [-122.96970875659865, 47.59836877306004], [-122.970741000396, 47.59769547501169], [-122.97105521778373, 47.59747111200122], [-122.97181832257462, 47.596977369864284], [-122.97208756508886, 47.59675291828824], [-122.97289543124006, 47.59616945985898], [-122.97442150185584, 47.594822963600485], [-122.97451123381714, 47.594778102643495], [-122.97496004587289, 47.59432926706579], [-122.97531911947303, 47.593925294427535], [-122.97540898732495, 47.59383554339972], [-122.97585777331108, 47.59329694055679], [-122.97630651381539, 47.592803197153486], [-122.97644125305565, 47.59262370382077], [-122.97675545811728, 47.59226462707613], [-122.97702470464972, 47.59186070376991], [-122.97724914335019, 47.591591345943215], [-122.97738372771823, 47.5913669754894], [-122.97751838089611, 47.59118742675647], [-122.9777428899813, 47.5909181305319], [-122.97855074844952, 47.58984094422975], [-122.97935862302153, 47.58871883017067], [-122.97953812409358, 47.588449551033094], [-122.97994215858303, 47.587866044386026], [-122.97998702143379, 47.58777630816037], [-122.98052556746521, 47.58701330310711], [-122.98057050197593, 47.58696838517824], [-122.98074993995141, 47.58665420413913], [-122.98075007215128, 47.586609320760516], [-122.98200672985331, 47.58441005377681], [-122.9827697765757, 47.58279420806612], [-122.98402651486343, 47.580146120735904], [-122.98460993011572, 47.57897915719625], [-122.98465487610078, 47.57888940167471], [-122.9849690552657, 47.57826100644516], [-122.98523833861479, 47.577857108194685], [-122.98622571292547, 47.576286152250326], [-122.98703373965003, 47.57516408217445], [-122.98829043093896, 47.57332383084204], [-122.98878406494926, 47.57260571924381], [-122.9889188352057, 47.57238131910408], [-122.98914319860195, 47.57211200636823], [-122.98950226549553, 47.57157340173324], [-122.98963690711315, 47.571393874690415], [-122.99031020131062, 47.57049621309607], [-122.99039992946254, 47.570361596256554], [-122.99048969922292, 47.57031670890068], [-122.99098346762426, 47.56973321805735], [-122.9910282699822, 47.569688344249236], [-122.99125276972616, 47.569463901256576], [-122.99152200777513, 47.56914969203556], [-122.9917015562262, 47.56901508336692], [-122.99197078830024, 47.568700875717575], [-122.99210547209572, 47.568566248155776], [-122.99232985758182, 47.56834184100839], [-122.99273382296974, 47.56793790117301], [-122.99309292036875, 47.56753394413789], [-122.99354183470987, 47.56712999285824], [-122.9939008015246, 47.56677090449003], [-122.99403551298803, 47.56659135533853], [-122.99434964986473, 47.56627723365605], [-122.99461901347388, 47.56600789270042], [-122.99479847562822, 47.56582839656849], [-122.99497796240765, 47.56564880836683], [-122.995247280362, 47.56542439198421], [-122.99627956449702, 47.56452674496806], [-122.9967734271491, 47.564033035483256], [-122.9977607921118, 47.563135380367136], [-122.99847893908714, 47.562462109821475], [-122.99915210571154, 47.561788860499206], [-123.00094750855448, 47.5600833229936], [-123.0011270191153, 47.5599486284255], [-123.0022940266696, 47.55882655834599], [-123.00305702355031, 47.558063552139906], [-123.0032814779358, 47.55788401575243], [-123.00395468048546, 47.55725564300252], [-123.00467284669283, 47.55653751589227], [-123.00489721096676, 47.55631309992455], [-123.0055704438888, 47.555729616158814], [-123.00655796241018, 47.554742210623104], [-123.00714135076383, 47.55420356338052], [-123.00767995346581, 47.553664965862296], [-123.00884691793604, 47.5525877677913], [-123.00920602971638, 47.55222868545009], [-123.00969971512343, 47.551734997337086], [-123.01005879205532, 47.55142082791215], [-123.01055254159185, 47.55097201960808], [-123.01329044909075, 47.5483687608829], [-123.01607318998504, 47.54567574944855], [-123.02285054523453, 47.53925741784454], [-123.0234339980812, 47.5387188556851], [-123.02388284400315, 47.538270021894895], [-123.0246459109948, 47.53755188011327], [-123.02469074989592, 47.53750698609824], [-123.02527426427434, 47.53692350160446], [-123.02576790712868, 47.53647467790432], [-123.02653099221224, 47.53571171036687], [-123.02684519441972, 47.535442404535154], [-123.02742857528145, 47.534903766710485], [-123.02783261269374, 47.53449980788252], [-123.02837121477714, 47.53400612573372], [-123.02895473785216, 47.53342262634014], [-123.02931373932712, 47.53310843259257], [-123.03272482900368, 47.528305938959825], [-123.03272482392931, 47.528261050372365], [-123.03303909356598, 47.52781223717755], [-123.03842505513434, 47.52022697671061]]]}, 'id': '00000000000000000030', 'properties': {'ALAND': 1023381117, 'AWATER': 442114809, 'CBSAFP': '14740', 'CLASSFP': 'H1', 'COUNTYFP': '035', 'COUNTYNS': '01529223', 'CSAFP': '500', 'FUNCSTAT': 'A', 'GEOID': '53035', 'INTPTLAT': '+47.6396874', 'INTPTLON': '-122.6496358', 'LSAD': '06', 'METDIVFP': '', 'MTFCC': 'G4020', 'NAME': 'Kitsap', 'NAMELSAD': 'Kitsap County', 'STATEFP': '53', 'avg_precip_anomaly': -0.0003468792588634216, 'avg_temp_anomaly': -2.876979509421176}}
# Convert FeatureCollection to GeoJSON
= wa_counties_anomaly.getInfo()
geojson
# Extract temperature anomaly values
= [f['properties'].get('avg_temp_anomaly') for f in geojson['features'] if f['properties'].get('avg_temp_anomaly') is not None]
temp_vals = min(temp_vals), max(temp_vals)
temp_min, temp_max
# Create colormap for temperature
= cm.LinearColormap(['blue', 'white', 'red'], vmin=temp_min, vmax=temp_max)
temp_colormap = 'Avg Temperature Anomaly (°C)'
temp_colormap.caption
# Create folium map for temperature
= folium.Map(location=[47.5, -120], zoom_start=6)
Map_temp
temp_colormap.add_to(Map_temp)
# Style function for temperature
def temp_style(feature):
= feature['properties'].get('avg_temp_anomaly')
val = 'gray' if val is None else temp_colormap(val)
color return {
'fillOpacity': 0.7,
'weight': 1,
'color': 'black',
'fillColor': color
}
# Add layer
folium.GeoJson(
geojson,='Temperature Anomaly',
name=temp_style,
style_function=folium.GeoJsonTooltip(fields=['avg_temp_anomaly'], aliases=['Temp Anomaly (°C):'])
tooltip
).add_to(Map_temp)
folium.LayerControl().add_to(Map_temp) Map_temp
# Extract precipitation anomaly values
= [f['properties'].get('avg_precip_anomaly') for f in geojson['features'] if f['properties'].get('avg_precip_anomaly') is not None]
precip_vals = min(precip_vals), max(precip_vals)
precip_min, precip_max
# Create colormap for precipitation
= cm.LinearColormap(['brown', 'white', 'green'], vmin=precip_min, vmax=precip_max)
precip_colormap = 'Avg Precipitation Anomaly (mm)'
precip_colormap.caption
# Create folium map for precipitation
= folium.Map(location=[47.5, -120], zoom_start=6)
Map_precip
precip_colormap.add_to(Map_precip)
# Style function for precipitation
def precip_style(feature):
= feature['properties'].get('avg_precip_anomaly')
val = 'gray' if val is None else precip_colormap(val)
color return {
'fillOpacity': 0.7,
'weight': 1,
'color': 'black',
'fillColor': color
}
# Add layer
folium.GeoJson(
geojson,='Precipitation Anomaly',
name=precip_style,
style_function=folium.GeoJsonTooltip(fields=['avg_precip_anomaly'], aliases=['Precip Anomaly (mm):'])
tooltip
).add_to(Map_precip)
folium.LayerControl().add_to(Map_precip) Map_precip
# Convert EE FeatureCollection to GeoJSON
= wa_counties_anomaly.getInfo() # Only safe for small datasets
geojson
# Create base folium map
= folium.Map(location=[47.5, -120], zoom_start=6)
Map
# -------------------- TEMPERATURE ANOMALY LAYER --------------------
# Extract temperature anomaly values
= [f['properties'].get('avg_temp_anomaly') for f in geojson['features'] if f['properties'].get('avg_temp_anomaly') is not None]
temp_vals = min(temp_vals), max(temp_vals)
temp_min, temp_max
# Create colormap for temperature
= cm.LinearColormap(['#32CD32', 'gray', 'purple'], vmin=temp_min, vmax=temp_max)
temp_colormap = 'Avg Temperature Anomaly (°C)'
temp_colormap.caption
temp_colormap.add_to(Map)
# Define style function for temperature
def temp_style(feature):
= feature['properties'].get('avg_temp_anomaly')
val = 'gray' if val is None else temp_colormap(val)
color return {
'fillOpacity': 0.7,
'weight': 1,
'color': 'black',
'fillColor': color
}
# Add temp layer
folium.GeoJson(
geojson,='Temperature Anomaly',
name=temp_style,
style_function=folium.GeoJsonTooltip(fields=['avg_temp_anomaly'], aliases=['Temp Anomaly (°C):'])
tooltip
).add_to(Map)
# -------------------- PRECIPITATION ANOMALY LAYER --------------------
# Extract precipitation anomaly values
= [f['properties'].get('avg_precip_anomaly') for f in geojson['features'] if f['properties'].get('avg_precip_anomaly') is not None]
precip_vals = min(precip_vals), max(precip_vals)
precip_min, precip_max
# Create colormap for precipitation
= cm.LinearColormap(['coral', 'gray', '#0571b0'], vmin=precip_min, vmax=precip_max)
precip_colormap = 'Avg Precipitation Anomaly (mm)'
precip_colormap.caption
precip_colormap.add_to(Map)
# Define style function for precipitation
def precip_style(feature):
= feature['properties'].get('avg_precip_anomaly')
val = 'gray' if val is None else precip_colormap(val)
color return {
'fillOpacity': 0.7,
'weight': 1,
'color': 'black',
'fillColor': color
}
# Add precip layer
folium.GeoJson(
geojson,='Precipitation Anomaly',
name=precip_style,
style_function=folium.GeoJsonTooltip(fields=['avg_precip_anomaly'], aliases=['Precip Anomaly (mm):'])
tooltip
).add_to(Map)
# -------------------- FINAL MAP SETUP --------------------
folium.LayerControl().add_to(Map) Map