Data Manipulation recap

Choropleths: maps with colors

Basics and the sf package

library(sf)
## Linking to GEOS 3.13.0, GDAL 3.8.5, PROJ 9.5.1; sf_use_s2() is TRUE
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(patchwork)

Finding data

  • You need to find data that has the right “geometry” information to create the map.
  • Then you need to be able to “convert” the data format into something you can work with.
  • The sf package supports reading multiple types of spatial data.
  • One popular type of data is GeoJSON
  • See examples here:
  • “Detailed” vs. “Generalized”
md_county_map <- st_read("Maryland_Physical_Boundaries_-_County_Boundaries_(Generalized).geojson")
## Reading layer `BNDY_CountyPhyBoundaryGen_DoIT' from data source 
##   `/Users/patel/Library/CloudStorage/OneDrive-UniversityofMaryland/AY 2024-25/Spring 2025/TA INST 462 Data Vis/Week 14/Maryland_Physical_Boundaries_-_County_Boundaries_(Generalized).geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 24 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.4873 ymin: 37.92397 xmax: -75.04921 ymax: 39.72288
## Geodetic CRS:  WGS 84
head(md_county_map)
## Simple feature collection with 6 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.06692 ymin: 38.31896 xmax: -75.70742 ymax: 39.72288
## Geodetic CRS:  WGS 84
##   OBJECTID         county district county_fip countynum          creation_d
## 1        1       Allegany        6          1         1 2007-08-07 20:00:00
## 2        2   Anne Arundel        5          3         2 2007-01-08 19:00:00
## 3        3      Baltimore        4          5         3 2009-11-16 19:00:00
## 4        4 Baltimore City        0        510        24 2006-04-17 20:00:00
## 5        5        Calvert        5          9         4 2007-01-08 19:00:00
## 6        6       Caroline        2         11         5 2007-05-20 20:00:00
##            last_updat shape_Length shape_Area                       geometry
## 1 2012-01-19 19:00:00    2.6488703 0.11494995 MULTIPOLYGON (((-78.38474 3...
## 2 2008-06-30 20:00:00    2.2298037 0.12117518 MULTIPOLYGON (((-76.53695 3...
## 3 2012-02-14 19:00:00    2.8951218 0.16815116 MULTIPOLYGON (((-76.44945 3...
## 4 2009-11-15 19:00:00    0.6428553 0.02481090 MULTIPOLYGON (((-76.52967 3...
## 5 2008-07-07 20:00:00    1.4357386 0.05935892 MULTIPOLYGON (((-76.52993 3...
## 6 2010-01-27 19:00:00    1.7949442 0.08731723 MULTIPOLYGON (((-75.74764 3...
summary(md_county_map)
##     OBJECTID        county             district       county_fip    
##  Min.   : 1.00   Length:24          Min.   :0.000   Min.   :  1.00  
##  1st Qu.: 6.75   Class :character   1st Qu.:2.000   1st Qu.: 14.50  
##  Median :12.50   Mode  :character   Median :3.500   Median : 26.00  
##  Mean   :12.50                      Mean   :3.625   Mean   : 44.96  
##  3rd Qu.:18.25                      3rd Qu.:5.250   3rd Qu.: 37.50  
##  Max.   :24.00                      Max.   :7.000   Max.   :510.00  
##    countynum       creation_d                    last_updat                 
##  Min.   : 1.00   Min.   :2006-04-17 20:00:00   Min.   :2007-01-07 19:00:00  
##  1st Qu.: 6.75   1st Qu.:2006-09-11 02:00:00   1st Qu.:2009-02-21 01:00:00  
##  Median :12.50   Median :2007-01-08 19:00:00   Median :2010-04-07 08:00:00  
##  Mean   :12.50   Mean   :2007-05-28 07:00:00   Mean   :2010-03-29 09:00:00  
##  3rd Qu.:18.25   3rd Qu.:2007-08-07 20:00:00   3rd Qu.:2012-01-09 19:00:00  
##  Max.   :24.00   Max.   :2012-01-09 19:00:00   Max.   :2012-02-14 19:00:00  
##   shape_Length      shape_Area               geometry 
##  Min.   :0.6429   Min.   :0.02481   MULTIPOLYGON :24  
##  1st Qu.:1.9787   1st Qu.:0.08833   epsg:4326    : 0  
##  Median :2.1978   Median :0.11806   +proj=long...: 0  
##  Mean   :2.2453   Mean   :0.11449                     
##  3rd Qu.:2.4790   3rd Qu.:0.13282                     
##  Max.   :3.7699   Max.   :0.17982
md_county_map_detailed <- st_read("Maryland_Physical_Boundaries_-_County_Boundaries_(Detailed).geojson")
## Reading layer `BNDY_CountyPhyBoundaryDetailed_SHA' from data source 
##   `/Users/patel/Library/CloudStorage/OneDrive-UniversityofMaryland/AY 2024-25/Spring 2025/TA INST 462 Data Vis/Week 14/Maryland_Physical_Boundaries_-_County_Boundaries_(Detailed).geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 24 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.4873 ymin: 37.89358 xmax: -75.0492 ymax: 39.72287
## Geodetic CRS:  WGS 84
head(md_county_map_detailed)
## Simple feature collection with 6 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.06692 ymin: 38.31637 xmax: -75.70741 ymax: 39.72287
## Geodetic CRS:  WGS 84
##   OBJECTID         COUNTY DISTRICT COUNTY_FIP COUNTYNUM          CREATION_D
## 1        1       Allegany        6          1         1 2010-01-27 19:00:00
## 2        2   Anne Arundel        5          3         2 2006-04-17 20:00:00
## 3        3      Baltimore        4          5         3 2006-10-08 20:00:00
## 4        4 Baltimore City        0        510        24 2006-04-17 20:00:00
## 5        5        Calvert        5          9         4 2010-01-27 19:00:00
## 6        6       Caroline        2         11         5 2007-05-20 20:00:00
##            LAST_UPDAT Shape_Length Shape_Area                       geometry
## 1 2010-01-27 19:00:00     3.814949 0.11502849 MULTIPOLYGON (((-78.34284 3...
## 2 2006-04-17 20:00:00    10.040214 0.11148263 MULTIPOLYGON (((-76.606 39....
## 3 2006-10-08 20:00:00     9.470194 0.16250630 MULTIPOLYGON (((-76.56796 3...
## 4 2009-11-15 19:00:00     1.978908 0.02198736 MULTIPOLYGON (((-76.52967 3...
## 5 2010-01-27 19:00:00     3.576389 0.05735034 MULTIPOLYGON (((-76.64212 3...
## 6 2008-07-29 20:00:00     3.078015 0.08607846 MULTIPOLYGON (((-75.74764 3...
summary(md_county_map_detailed)
##     OBJECTID        COUNTY             DISTRICT       COUNTY_FIP    
##  Min.   : 1.00   Length:24          Min.   :0.000   Min.   :  1.00  
##  1st Qu.: 6.75   Class :character   1st Qu.:2.000   1st Qu.: 14.50  
##  Median :12.50   Mode  :character   Median :3.500   Median : 26.00  
##  Mean   :12.50                      Mean   :3.625   Mean   : 44.96  
##  3rd Qu.:18.25                      3rd Qu.:5.250   3rd Qu.: 37.50  
##  Max.   :24.00                      Max.   :7.000   Max.   :510.00  
##    COUNTYNUM       CREATION_D                    LAST_UPDAT                 
##  Min.   : 1.00   Min.   :2006-04-17 20:00:00   Min.   :2006-04-17 20:00:00  
##  1st Qu.: 6.75   1st Qu.:2006-08-26 08:00:00   1st Qu.:2007-05-06 02:00:00  
##  Median :12.50   Median :2007-03-07 19:00:00   Median :2008-08-23 08:00:00  
##  Mean   :12.50   Mean   :2007-09-21 19:00:00   Mean   :2008-08-30 06:00:00  
##  3rd Qu.:18.25   3rd Qu.:2008-09-13 02:00:00   3rd Qu.:2009-12-04 01:00:00  
##  Max.   :24.00   Max.   :2010-01-27 19:00:00   Max.   :2012-01-16 19:00:00  
##   Shape_Length      Shape_Area               geometry 
##  Min.   : 1.940   Min.   :0.02199   MULTIPOLYGON :24  
##  1st Qu.: 3.539   1st Qu.:0.08590   epsg:4326    : 0  
##  Median : 5.376   Median :0.11326   +proj=long...: 0  
##  Mean   : 7.050   Mean   :0.10952                     
##  3rd Qu.: 8.199   3rd Qu.:0.12679                     
##  Max.   :25.068   Max.   :0.17963
  • Digging deeper into geometry
    • There’s a lot of data in each “cell”!
    • This is why having specialized packages like sf is so helpful.
md_county_map$geometry[1]
## Geometry set for 1 feature 
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.06692 ymin: 39.43853 xmax: -78.31348 ymax: 39.72288
## Geodetic CRS:  WGS 84
## MULTIPOLYGON (((-78.38474 39.62421, -78.38468 3...
class(md_county_map$geometry[1])
## [1] "sfc_MULTIPOLYGON" "sfc"
str(md_county_map$geometry[1])
## sfc_MULTIPOLYGON of length 1; first list element: List of 1
##  $ :List of 1
##   ..$ : num [1:2813, 1:2] -78.4 -78.4 -78.4 -78.4 -78.4 ...
##  - attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
md_county_map$geometry[1][[1]] # list of many values!
## MULTIPOLYGON (((-78.38474 39.62421, -78.38468 39.62382, -78.38458 39.6233, -78.38443 39.6228, -78.38405 39.62209, -78.38379 39.6214, -78.38292 39.62038, -78.38169 39.61903, -78.38066 39.61817, -78.37929 39.61695, -78.37734 39.61545, -78.37523 39.61378, -78.37452 39.6132, -78.37358 39.61269, -78.37315 39.61226, -78.373 39.61191, -78.37302 39.61141, -78.37313 39.611, -78.37337 39.61049, -78.37378 39.61005, -78.37417 39.60977, -78.37476 39.6095, -78.37601 39.60911, -78.37638 39.60907, -78.37784 39.60918, -78.37823 39.60931, -78.3793 39.6094, -78.38004 39.60948, -78.38134 39.60979, -78.38244 39.6101, -78.38309 39.61025, -78.38439 39.61071, -78.3868 39.61166, -78.38853 39.6124, -78.41299 39.62253, -78.41361 39.62278, -78.41398 39.62302, -78.41707 39.62418, -78.4195 39.62486, -78.42066 39.62513, -78.423 39.62541, -78.42413 39.6255, -78.42413 39.6255, -78.42413 39.6255, -78.42528 39.62545, -78.42722 39.62514, -78.42864 39.62482, -78.4304 39.6241, -78.43123 39.62361, -78.43273 39.62249, -78.4335 39.62176, -78.43457 39.62025, -78.4347 39.61972, -78.43462 39.61866, -78.43425 39.61718, -78.43369 39.61595, -78.43308 39.61489, -78.4327 39.6142, -78.43206 39.61304, -78.43091 39.61184, -78.43029 39.6112, -78.42838 39.60922, -78.42719 39.60799, -78.42368 39.60435, -78.42168 39.60303, -78.42029 39.60215, -78.41932 39.60145, -78.41809 39.60053, -78.417 39.59945, -78.41617 39.59883, -78.41475 39.59802, -78.41419 39.59788, -78.41302 39.59733, -78.41177 39.59658, -78.41021 39.5959, -78.40814 39.59512, -78.40565 39.59407, -78.40339 39.59329, -78.40219 39.59267, -78.40063 39.59173, -78.39898 39.59073, -78.3977 39.58986, -78.39706 39.5891, -78.39642 39.58798, -78.39592 39.58688, -78.39574 39.58601, -78.39586 39.58518, -78.39613 39.58453, -78.39682 39.58367, -78.39717 39.58321, -78.3987 39.58226, -78.40026 39.5815, -78.40096 39.58123, -78.40207 39.58058, -78.40355 39.58007, -78.40483 39.5797, -78.40615 39.57956, -78.40688 39.57951, -78.40817 39.57966, -78.41034 39.57992, -78.4126 39.58033, -78.41471 39.58091, -78.4157 39.58116, -78.41712 39.58171, -78.41791 39.58207, -78.41896 39.58262, -78.41999 39.58331, -78.42091 39.58412, -78.42193 39.585, -78.42279 39.58571, -78.42353 39.58631, -78.42467 39.58692, -78.42643 39.58753, -78.42818 39.58795, -78.42925 39.58815, -78.42979 39.58832, -78.43027 39.58849, -78.43052 39.58868, -78.43117 39.58885, -78.43315 39.58923, -78.43434 39.58961, -78.43561 39.59012, -78.43669 39.59045, -78.43796 39.59083, -78.43937 39.59114, -78.44047 39.59136, -78.44126 39.59157, -78.44171 39.59174, -78.44203 39.59191, -78.44355 39.59235, -78.44521 39.59244, -78.44522 39.59244, -78.44522 39.59244, -78.44701 39.59233, -78.4485 39.59209, -78.44973 39.59184, -78.45121 39.59149, -78.45247 39.59104, -78.45444 39.59004, -78.45491 39.58969, -78.45533 39.58953, -78.457 39.5886, -78.45736 39.58826, -78.45752 39.58804, -78.45804 39.58758, -78.45847 39.58664, -78.45863 39.58579, -78.4587 39.58507, -78.4588 39.58466, -78.45903 39.58374, -78.45908 39.58307, -78.45899 39.58172, -78.45898 39.58122, -78.45894 39.58044, -78.45871 39.58014, -78.45867 39.57966, -78.45866 39.57966, -78.45866 39.57966, -78.4585 39.5797, -78.45844 39.5796, -78.45838 39.57947, -78.45838 39.57929, -78.45851 39.57905, -78.45854 39.57894, -78.45854 39.57875, -78.45816 39.57812, -78.45781 39.57765, -78.45735 39.57707, -78.45706 39.5765, -78.45654 39.57579, -78.45639 39.57538, -78.45624 39.57506, -78.45592 39.57474, -78.45569 39.57441, -78.45549 39.57409, -78.45203 39.57109, -78.45086 39.57012, -78.44963 39.56936, -78.44824 39.56837, -78.44724 39.56758, -78.44647 39.567, -78.44626 39.5667, -78.44603 39.56651, -78.44561 39.56632, -78.44518 39.56593, -78.44444 39.56531, -78.44392 39.56477, -78.44253 39.56396, -78.44145 39.56348, -78.44057 39.56316, -78.43949 39.56263, -78.43859 39.56218, -78.43776 39.5618, -78.43672 39.56142, -78.43671 39.56143, -78.43671 39.56142, -78.43613 39.5615, -78.43562 39.56153, -78.43531 39.56142, -78.43429 39.56104, -78.43313 39.56064, -78.43226 39.56033, -78.43138 39.56019, -78.43079 39.55995, -78.43013 39.55957, -78.42959 39.55929, -78.42911 39.55878, -78.4289 39.5585, -78.42819 39.55809, -78.42743 39.55778, -78.42666 39.55744, -78.42627 39.55725, -78.42615 39.55718, -78.42615 39.55718, -78.42615 39.55718, -78.42609 39.5572, -78.42596 39.55732, -78.42562 39.55732, -78.42511 39.55678, -78.42416 39.55564, -78.4233 39.55476, -78.42286 39.55416, -78.4224 39.55355, -78.422 39.55334, -78.42169 39.55319, -78.42146 39.55291, -78.4212 39.55242, -78.42065 39.55166, -78.41999 39.5511, -78.41973 39.5508, -78.41939 39.55059, -78.41827 39.54947, -78.41803 39.54876, -78.41802 39.54824, -78.4181 39.548, -78.41851 39.54736, -78.41915 39.54679, -78.41987 39.5463, -78.42059 39.54599, -78.42084 39.54579, -78.42112 39.54578, -78.4223 39.54568, -78.42277 39.54568, -78.42345 39.54578, -78.42399 39.54599, -78.42461 39.54644, -78.42553 39.54721, -78.42659 39.54833, -78.42693 39.54869, -78.4278 39.54964, -78.42826 39.55033, -78.42856 39.55124, -78.42879 39.55158, -78.42942 39.55212, -78.43027 39.55274, -78.43084 39.5531, -78.4313 39.55329, -78.43296 39.55366, -78.43364 39.55396, -78.43429 39.55408, -78.43485 39.55427, -78.43556 39.55444, -78.43632 39.55447, -78.43632 39.55447, -78.43632 39.55447, -78.43713 39.55435, -78.4378 39.55413, -78.43866 39.55349, -78.43929 39.55283, -78.4397 39.55202, -78.43997 39.55149, -78.44007 39.55071, -78.43986 39.55004, -78.43948 39.5495, -78.43913 39.54909, -78.43854 39.54877, -78.43809 39.5486, -78.43789 39.54854, -78.43746 39.54807, -78.43711 39.54759, -78.43656 39.54658, -78.43614 39.54562, -78.43573 39.54463, -78.43555 39.54391, -78.4353 39.54307, -78.43532 39.54226, -78.43545 39.54183, -78.43571 39.54076, -78.43603 39.54019, -78.43631 39.53988, -78.43656 39.53975, -78.43692 39.5395, -78.43748 39.53939, -78.4384 39.53953, -78.43917 39.53987, -78.44009 39.54084, -78.44092 39.54159, -78.4417 39.54262, -78.44253 39.54376, -78.44378 39.54551, -78.44487 39.54684, -78.44564 39.54755, -78.44588 39.54788, -78.44616 39.54818, -78.44642 39.54826, -78.44711 39.54903, -78.44844 39.54991, -78.45012 39.5508, -78.45134 39.5514, -78.45196 39.55165, -78.45326 39.55185, -78.45475 39.55196, -78.45559 39.55197, -78.45678 39.55213, -78.45815 39.5522, -78.45815 39.5522, -78.45816 39.5522, -78.4588 39.55213, -78.45989 39.55192, -78.46067 39.55169, -78.46173 39.55125, -78.46209 39.55092, -78.46228 39.5505, -78.46252 39.55015, -78.46273 39.54941, -78.46258 39.54865, -78.46257 39.54808, -78.46241 39.54739, -78.46183 39.54644, -78.46097 39.54551, -78.46028 39.54491, -78.45923 39.54449, -78.45791 39.5441, -78.45559 39.54365, -78.45393 39.54347, -78.45393 39.54347, -78.45393 39.54347, -78.45247 39.54347, -78.45177 39.54341, -78.45087 39.54325, -78.45005 39.54291, -78.4493 39.54229, -78.44909 39.54175, -78.44914 39.54103, -78.44927 39.54085, -78.44938 39.54044, -78.44943 39.5402, -78.44967 39.53972, -78.45008 39.53928, -78.45109 39.53896, -78.45179 39.53887, -78.45358 39.53893, -78.45631 39.53922, -78.45632 39.53922, -78.45632 39.53922, -78.45702 39.53921, -78.45836 39.53907, -78.45909 39.53897, -78.45973 39.53881, -78.46048 39.53841, -78.4609 39.53812, -78.46171 39.53781, -78.46187 39.53765, -78.46246 39.53734, -78.46284 39.53688, -78.463 39.53655, -78.46341 39.53618, -78.46374 39.5357, -78.46395 39.53478, -78.46398 39.53384, -78.46357 39.53285, -78.46307 39.53194, -78.46315 39.53175, -78.46295 39.5316, -78.46257 39.53082, -78.46211 39.52993, -78.46177 39.52865, -78.46166 39.52722, -78.46161 39.52648, -78.46192 39.52502, -78.46218 39.52397, -78.46242 39.52325, -78.46324 39.52222, -78.46346 39.52185, -78.46398 39.52145, -78.46464 39.52053, -78.46532 39.51965, -78.46631 39.51883, -78.46781 39.51788, -78.46917 39.51732, -78.47051 39.51693, -78.47163 39.51683, -78.47295 39.51688, -78.47427 39.5171, -78.47555 39.5175, -78.47702 39.51816, -78.47875 39.519, -78.48022 39.5197, -78.48119 39.52004, -78.48229 39.52022, -78.4831 39.52036, -78.4835 39.52047, -78.48375 39.52057, -78.48404 39.5207, -78.48415 39.52085, -78.4846 39.52093, -78.48461 39.52093, -78.48461 39.52093, -78.48562 39.52092, -78.48668 39.5208, -78.48735 39.52059, -78.48777 39.52039, -78.48905 39.51998, -78.49005 39.51971, -78.49067 39.51953, -78.49114 39.51924, -78.49139 39.51919, -78.49148 39.51934, -78.49148 39.51934, -78.49148 39.51934, -78.4921 39.51931, -78.49403 39.51929, -78.49524 39.51934, -78.49755 39.51975, -78.4991 39.51999, -78.50017 39.52004, -78.50017 39.52004, -78.50017 39.52004, -78.50112 39.5199, -78.50193 39.51984, -78.50286 39.51996, -78.50421 39.52031, -78.50571 39.52073, -78.50698 39.52119, -78.5091 39.52182, -78.51069 39.52249, -78.5142 39.52375, -78.51567 39.52434, -78.51835 39.52507, -78.52005 39.52539, -78.52134 39.52562, -78.52135 39.52562, -78.52135 39.52562, -78.52432 39.52558, -78.52558 39.52554, -78.52665 39.52555, -78.52665 39.52555, -78.52744 39.52552, -78.53478 39.52457, -78.53478 39.52457, -78.53479 39.52457, -78.53584 39.52448, -78.53704 39.52427, -78.53837 39.52391, -78.53873 39.52372, -78.53956 39.52342, -78.54154 39.52286, -78.54228 39.52276, -78.54343 39.52267, -78.54412 39.52258, -78.54505 39.5224, -78.5464 39.52209, -78.54684 39.52197, -78.54743 39.52191, -78.54844 39.52201, -78.54982 39.52224, -78.55086 39.52247, -78.55368 39.52272, -78.55368 39.52272, -78.55368 39.52272, -78.55611 39.52269, -78.55769 39.52257, -78.55962 39.52219, -78.56161 39.52163, -78.5631 39.52124, -78.5643 39.52088, -78.56525 39.52081, -78.56654 39.52095, -78.56746 39.52134, -78.56915 39.52214, -78.5702 39.52288, -78.57077 39.52322, -78.57169 39.52355, -78.57281 39.5242, -78.57366 39.52469, -78.57451 39.52532, -78.57509 39.52581, -78.57529 39.52604, -78.5756 39.52663, -78.576 39.52698, -78.5772 39.52767, -78.57837 39.52819, -78.57973 39.52859, -78.58114 39.52884, -78.58264 39.52897, -78.58489 39.52915, -78.5859 39.52921, -78.5859 39.52921, -78.5859 39.52921, -78.58657 39.52919, -78.58711 39.52908, -78.5875 39.52915, -78.58822 39.52956, -78.58937 39.53027, -78.59057 39.53113, -78.59102 39.53151, -78.59128 39.53204, -78.59122 39.53256, -78.59075 39.53342, -78.58989 39.53467, -78.58937 39.53554, -78.58915 39.5359, -78.58924 39.53634, -78.58962 39.53681, -78.59037 39.53735, -78.59096 39.53752, -78.59193 39.53766, -78.59193 39.53766, -78.59193 39.53766, -78.59316 39.53756, -78.59473 39.53722, -78.59624 39.53678, -78.59749 39.53628, -78.59834 39.53578, -78.59899 39.53516, -78.59988 39.53442, -78.60085 39.53355, -78.60162 39.53287, -78.60213 39.53269, -78.6027 39.53274, -78.60332 39.53294, -78.60402 39.53341, -78.60475 39.53407, -78.60525 39.5346, -78.60586 39.53526, -78.60599 39.53558, -78.60642 39.53614, -78.60667 39.53646, -78.60715 39.53693, -78.60775 39.53717, -78.60867 39.53749, -78.60943 39.53767, -78.60998 39.53783, -78.61048 39.53811, -78.61097 39.5382, -78.61125 39.53825, -78.61179 39.53828, -78.61179 39.53828, -78.61179 39.53828, -78.61255 39.5382, -78.61309 39.53811, -78.61371 39.53829, -78.61569 39.53876, -78.6171 39.5392, -78.61879 39.5396, -78.61958 39.53978, -78.62 39.53982, -78.62057 39.5399, -78.62225 39.54007, -78.62356 39.54017, -78.62356 39.54017, -78.62356 39.54017, -78.62375 39.54014, -78.62408 39.54008, -78.62483 39.54008, -78.62483 39.54008, -78.62666 39.54009, -78.62666 39.54009, -78.62764 39.54009, -78.62796 39.54003, -78.6284 39.5399, -78.62903 39.53975, -78.62939 39.53973, -78.63003 39.53967, -78.63058 39.53967, -78.63058 39.53967, -78.63082 39.53967, -78.63129 39.53954, -78.6319 39.5393, -78.63256 39.53901, -78.63318 39.5388, -78.63419 39.5384, -78.63482 39.53808, -78.63522 39.53773, -78.63556 39.53754, -78.63632 39.53739, -78.63694 39.53728, -78.63782 39.53719, -78.63897 39.53708, -78.63943 39.53702, -78.6408 39.53698, -78.64237 39.53689, -78.64321 39.53684, -78.64375 39.53687, -78.64375 39.53687, -78.64376 39.53687, -78.64489 39.53677, -78.64597 39.53665, -78.64626 39.53658, -78.6476 39.53638, -78.64862 39.53622, -78.64959 39.53601, -78.65032 39.5359, -78.65073 39.53591, -78.65115 39.53596, -78.65139 39.53603, -78.65139 39.53603, -78.65139 39.53603, -78.65154 39.53603, -78.6518 39.53605, -78.65199 39.53612, -78.65218 39.53627, -78.65307 39.53645, -78.65401 39.53658, -78.65477 39.53662, -78.65566 39.53664, -78.65566 39.53664, -78.65566 39.53664, -78.65668 39.53656, -78.65722 39.53647, -78.65778 39.53649, -78.65778 39.53649, -78.65778 39.53649, -78.6587 39.53649, -78.65957 39.53651, -78.66022 39.53658, -78.66121 39.53678, -78.66282 39.53715, -78.66378 39.53758, -78.66436 39.53799, -78.66486 39.53841, -78.66554 39.53906, -78.66607 39.53955, -78.66623 39.53964, -78.66623 39.53964, -78.66623 39.53964, -78.66635 39.53964, -78.66647 39.53974, -78.6665 39.53992, -78.66703 39.54041, -78.66763 39.54074, -78.6683 39.54096, -78.66901 39.54108, -78.6693 39.5411, -78.67012 39.54117, -78.67072 39.5412, -78.67184 39.54122, -78.67184 39.54122, -78.67184 39.54122, -78.67261 39.54118, -78.67323 39.54111, -78.67352 39.54104, -78.67404 39.54087, -78.67463 39.54082, -78.67515 39.54082, -78.67533 39.5409, -78.67562 39.54098, -78.6762 39.54128, -78.67683 39.54177, -78.67751 39.54223, -78.67886 39.54303, -78.67986 39.54356, -78.68028 39.54384, -78.68039 39.54398, -78.68041 39.54417, -78.68045 39.54431, -78.68062 39.54439, -78.68068 39.54461, -78.68072 39.54495, -78.68082 39.54529, -78.68082 39.54554, -78.68098 39.54575, -78.68144 39.5461, -78.68183 39.54624, -78.68208 39.54638, -78.68264 39.54678, -78.68317 39.54709, -78.68379 39.54769, -78.6844 39.54818, -78.68484 39.54855, -78.68506 39.54894, -78.68536 39.54923, -78.68588 39.5495, -78.68691 39.54994, -78.6884 39.55043, -78.68919 39.55069, -78.68962 39.55074, -78.69024 39.55076, -78.69053 39.55087, -78.69063 39.55105, -78.69097 39.55142, -78.69143 39.55179, -78.69214 39.55239, -78.69338 39.55346, -78.69418 39.55413, -78.69481 39.55459, -78.69513 39.55472, -78.69578 39.55482, -78.71233 39.56265, -78.71272 39.56291, -78.71306 39.56303, -78.71378 39.56336, -78.71427 39.5635, -78.71583 39.56392, -78.7168 39.56401, -78.71794 39.56413, -78.71918 39.56419, -78.7207 39.56426, -78.72071 39.56426, -78.72071 39.56426, -78.72146 39.56422, -78.72205 39.5641, -78.72273 39.56406, -78.7232 39.56406, -78.72369 39.56422, -78.72411 39.56448, -78.72441 39.56488, -78.72467 39.56554, -78.72486 39.56613, -78.72496 39.56645, -78.72495 39.56665, -78.72491 39.5669, -78.72498 39.56702, -78.72523 39.56736, -78.72563 39.56798, -78.72586 39.56856, -78.72634 39.56946, -78.72679 39.57017, -78.72709 39.57052, -78.72742 39.5711, -78.72806 39.57194, -78.72833 39.57218, -78.72886 39.57263, -78.72921 39.57285, -78.7297 39.57324, -78.73016 39.57371, -78.73022 39.57387, -78.73026 39.57406, -78.73047 39.57427, -78.73077 39.575, -78.73088 39.57548, -78.73097 39.57611, -78.73111 39.57712, -78.73126 39.57805, -78.73145 39.57927, -78.73163 39.5807, -78.73173 39.58171, -78.73184 39.58247, -78.73202 39.58331, -78.73206 39.58355, -78.73213 39.58397, -78.73226 39.58449, -78.73231 39.58502, -78.73241 39.58546, -78.73255 39.58632, -78.73271 39.58682, -78.73296 39.58707, -78.73345 39.58724, -78.73389 39.58731, -78.73505 39.58737, -78.73505 39.58737, -78.73505 39.58737, -78.73651 39.5872, -78.73742 39.58708, -78.73801 39.58706, -78.73865 39.58704, -78.73903 39.58698, -78.73962 39.58689, -78.74026 39.58653, -78.74089 39.58606, -78.74125 39.58581, -78.74153 39.58569, -78.74169 39.58566, -78.74187 39.58552, -78.74207 39.58529, -78.74223 39.58487, -78.74243 39.58444, -78.74254 39.58427, -78.74279 39.58384, -78.74284 39.58351, -78.74285 39.58339, -78.74298 39.58314, -78.74326 39.58261, -78.74335 39.58221, -78.74347 39.5816, -78.74349 39.58143, -78.74356 39.58125, -78.74372 39.58094, -78.74399 39.58072, -78.74448 39.58049, -78.74508 39.58038, -78.74592 39.58024, -78.74636 39.58023, -78.74694 39.58032, -78.7473 39.58043, -78.7476 39.58056, -78.74843 39.58102, -78.75019 39.58193, -78.75097 39.58231, -78.75143 39.58246, -78.75143 39.58246, -78.75143 39.58246, -78.75181 39.58245, -78.75236 39.58236, -78.75306 39.58214, -78.75391 39.58184, -78.75426 39.58164, -78.7546 39.58143, -78.75505 39.58135, -78.75557 39.58124, -78.75597 39.58124, -78.75632 39.58133, -78.75665 39.58146, -78.75776 39.58199, -78.75851 39.58234, -78.75969 39.58297, -78.76093 39.58364, -78.76177 39.58415, -78.76274 39.58525, -78.76378 39.58645, -78.76384 39.58651, -78.77356 39.5976, -78.774 39.59818, -78.77439 39.59884, -78.7743 39.59935, -78.77409 39.6, -78.77398 39.60046, -78.77383 39.60125, -78.77381 39.60172, -78.77376 39.60232, -78.77369 39.60287, -78.77343 39.6033, -78.7726 39.60427, -78.77247 39.60439, -78.77205 39.60487, -78.77173 39.6051, -78.77113 39.60543, -78.77032 39.60584, -78.76991 39.60614, -78.76948 39.60648, -78.76922 39.60675, -78.76902 39.60707, -78.76885 39.60742, -78.76852 39.60778, -78.76805 39.60812, -78.7675 39.60837, -78.76647 39.60861, -78.76576 39.60885, -78.76462 39.60911, -78.76332 39.60939, -78.76288 39.60951, -78.76224 39.60953, -78.76133 39.6096, -78.76028 39.60968, -78.75956 39.60973, -78.75916 39.60971, -78.75867 39.6097, -78.75867 39.6097, -78.75867 39.6097, -78.75808 39.60975, -78.75727 39.60979, -78.75697 39.60985, -78.75636 39.61, -78.75603 39.61, -78.75556 39.61005, -78.75498 39.61003, -78.7543 39.60997, -78.75377 39.60993, -78.75377 39.60993, -78.75315 39.60993, -78.75315 39.60993, -78.75257 39.60987, -78.75208 39.60977, -78.7517 39.60961, -78.75133 39.60941, -78.75089 39.60909, -78.75069 39.60883, -78.75056 39.60864, -78.75049 39.60832, -78.75032 39.60789, -78.75018 39.60738, -78.75002 39.60674, -78.74984 39.60619, -78.74961 39.60585, -78.74945 39.60565, -78.74919 39.60548, -78.74853 39.60519, -78.74794 39.60502, -78.74735 39.60501, -78.74735 39.60501, -78.74734 39.60501, -78.74664 39.6052, -78.74636 39.60529, -78.74604 39.60549, -78.74555 39.60592, -78.74497 39.60656, -78.74404 39.60763, -78.7436 39.60792, -78.74326 39.60802, -78.74281 39.60808, -78.74235 39.60803, -78.74159 39.60802, -78.74159 39.60802, -78.74159 39.60802, -78.741 39.6081, -78.7404 39.60823, -78.73987 39.6084, -78.73931 39.60869, -78.73882 39.60903, -78.73827 39.60938, -78.73779 39.60977, -78.73718 39.61032, -78.73663 39.61071, -78.73563 39.61148, -78.73496 39.61209, -78.73428 39.61262, -78.73345 39.61333, -78.7329 39.61382, -78.73275 39.6141, -78.73239 39.61466, -78.73234 39.61509, -78.7324 39.61559, -78.73257 39.61605, -78.73281 39.61667, -78.73287 39.61683, -78.73288 39.61683, -78.73306 39.61727, -78.73322 39.61767, -78.73315 39.61782, -78.73316 39.61822, -78.73341 39.61874, -78.73349 39.61917, -78.73367 39.61961, -78.73384 39.61991, -78.73431 39.62049, -78.73531 39.62182, -78.73607 39.62284, -78.73639 39.62305, -78.73687 39.62344, -78.73711 39.62352, -78.73729 39.62352, -78.73761 39.62358, -78.7378 39.62379, -78.73859 39.62422, -78.73914 39.62445, -78.73961 39.62481, -78.74022 39.62496, -78.74123 39.62528, -78.74231 39.62562, -78.74337 39.62597, -78.74392 39.62626, -78.74445 39.62653, -78.74501 39.62671, -78.74567 39.62694, -78.74611 39.62701, -78.74666 39.62711, -78.74704 39.6272, -78.74748 39.62732, -78.74784 39.62735, -78.74809 39.62729, -78.74829 39.62721, -78.74853 39.62713, -78.74872 39.62704, -78.74892 39.62695, -78.7494 39.62689, -78.74976 39.6268, -78.7502 39.62654, -78.75036 39.62652, -78.75055 39.62645, -78.75084 39.62622, -78.75137 39.62594, -78.75166 39.62579, -78.75201 39.62558, -78.75228 39.6255, -78.75261 39.62526, -78.75308 39.62502, -78.75366 39.62477, -78.75443 39.62453, -78.75504 39.62433, -78.75529 39.62429, -78.75562 39.62417, -78.75586 39.62403, -78.75605 39.6239, -78.75618 39.6238, -78.75652 39.62361, -78.75685 39.62342, -78.75696 39.62334, -78.75744 39.62301, -78.7579 39.62263, -78.75877 39.62198, -78.75991 39.62118, -78.76049 39.62092, -78.76075 39.62077, -78.76096 39.62059, -78.76126 39.62046, -78.76145 39.62035, -78.76187 39.62002, -78.76262 39.61961, -78.76301 39.61944, -78.76334 39.61937, -78.76362 39.61935, -78.764 39.61942, -78.76442 39.61957, -78.76502 39.61986, -78.76525 39.62014, -78.76565 39.62033, -78.76632 39.62052, -78.76741 39.62084, -78.76807 39.62112, -78.76874 39.62143, -78.76925 39.62159, -78.76961 39.62161, -78.77063 39.62156, -78.77138 39.62156, -78.77183 39.62163, -78.77247 39.62187, -78.7732 39.62209, -78.77373 39.62224, -78.77458 39.62236, -78.7751 39.62236, -78.77549 39.62224, -78.77566 39.62224, -78.77597 39.62214, -78.77626 39.62223, -78.77652 39.62245, -78.77667 39.62292, -78.77672 39.6235, -78.77668 39.62395, -78.77668 39.62422, -78.77657 39.62452, -78.77635 39.62509, -78.7762 39.62573, -78.77615 39.62635, -78.77623 39.62666, -78.7763 39.62702, -78.77623 39.62745, -78.77584 39.62818, -78.77556 39.62847, -78.77535 39.62879, -78.77498 39.62925, -78.77494 39.62949, -78.77472 39.62975, -78.77434 39.63028, -78.77369 39.63115, -78.77286 39.6323, -78.77248 39.6328, -78.77226 39.63294, -78.77209 39.63335, -78.77191 39.63365, -78.77167 39.63417, -78.77115 39.63489, -78.77074 39.6355, -78.77039 39.63593, -78.77017 39.63624, -78.76979 39.63674, -78.76906 39.63771, -78.76832 39.63867, -78.76831 39.63889, -78.76803 39.63946, -78.76764 39.63994, -78.76668 39.64119, -78.76572 39.64236, -78.76499 39.64352, -78.76476 39.64384, -78.76463 39.64408, -78.76448 39.64426, -78.76434 39.64456, -78.76421 39.64499, -78.76418 39.64561, -78.76529 39.64898, -78.76569 39.64917, -78.76606 39.64915, -78.76671 39.64903, -78.76705 39.64892, -78.7676 39.64848, -78.76801 39.64808, -78.76844 39.64759, -78.76871 39.64733, -78.76921 39.64703, -78.76966 39.64688, -78.77071 39.64673, -78.77134 39.64666, -78.77192 39.64666, -78.77235 39.64668, -78.77271 39.64666, -78.77331 39.64661, -78.7736 39.64653, -78.77467 39.64629, -78.77513 39.64614, -78.77528 39.64613, -78.77542 39.64613, -78.77558 39.64613, -78.77572 39.6461, -78.77615 39.64589, -78.77666 39.64555, -78.77689 39.64533, -78.77724 39.64497, -78.77756 39.6444, -78.7777 39.64401, -78.77792 39.64344, -78.77819 39.64299, -78.77823 39.64272, -78.77834 39.64257, -78.77847 39.64228, -78.77858 39.64187, -78.77872 39.64161, -78.77913 39.64098, -78.77939 39.64055, -78.77965 39.64021, -78.78003 39.63949, -78.78043 39.63887, -78.78061 39.63835, -78.78082 39.63791, -78.78118 39.63762, -78.78153 39.63749, -78.7819 39.63743, -78.78243 39.63739, -78.78322 39.63743, -78.78394 39.63755, -78.78495 39.63765, -78.78645 39.63786, -78.78836 39.63826, -78.79019 39.63873, -78.79062 39.63887, -78.79095 39.63886, -78.79131 39.63877, -78.79168 39.63864, -78.79205 39.63843, -78.79269 39.63811, -78.79313 39.63798, -78.79353 39.63795, -78.79387 39.638, -78.79412 39.63812, -78.79436 39.63826, -78.79453 39.63825, -78.79489 39.63818, -78.79534 39.63806, -78.79574 39.63781, -78.79595 39.63763, -78.79626 39.63719, -78.7964 39.63676, -78.79651 39.63639, -78.79656 39.63608, -78.7968 39.63555, -78.79692 39.6348, -78.79697 39.63437, -78.79694 39.6341, -78.797 39.63368, -78.79702 39.63316, -78.79714 39.63285, -78.79727 39.63217, -78.79738 39.63158, -78.79748 39.63088, -78.79755 39.63029, -78.79771 39.62966, -78.79784 39.62937, -78.79807 39.6292, -78.79841 39.6291, -78.79891 39.62906, -78.79946 39.62908, -78.79998 39.62918, -78.80039 39.6293, -78.80063 39.62932, -78.801 39.62922, -78.80128 39.6291, -78.80171 39.62876, -78.80194 39.62845, -78.80205 39.6279, -78.80198 39.62724, -78.80176 39.62612, -78.80157 39.62551, -78.80135 39.62498, -78.80087 39.62427, -78.80052 39.62365, -78.80033 39.62319, -78.79997 39.62245, -78.79973 39.62196, -78.79935 39.62127, -78.79889 39.62066, -78.79861 39.62035, -78.79815 39.61948, -78.79791 39.61879, -78.79777 39.6181, -78.7978 39.61796, -78.79787 39.61781, -78.79783 39.61739, -78.79773 39.61704, -78.79765 39.61675, -78.79754 39.61644, -78.79739 39.61584, -78.7974 39.61583, -78.7972 39.61501, -78.79709 39.61472, -78.797 39.6146, -78.79669 39.61423, -78.79648 39.61408, -78.79647 39.61408, -78.79639 39.6138, -78.79625 39.61341, -78.79609 39.61311, -78.79595 39.61284, -78.7959 39.61265, -78.79578 39.61209, -78.79572 39.61135, -78.79564 39.61058, -78.79555 39.61027, -78.79552 39.60932, -78.79561 39.60864, -78.79573 39.60827, -78.79591 39.60756, -78.79617 39.60685, -78.79648 39.60638, -78.79689 39.60593, -78.79734 39.60562, -78.79767 39.60548, -78.79804 39.60542, -78.79846 39.60544, -78.7988 39.60548, -78.79905 39.6055, -78.79945 39.60551, -78.79979 39.60565, -78.8002 39.60594, -78.80056 39.60627, -78.80063 39.60649, -78.80067 39.60663, -78.80096 39.60689, -78.80102 39.607, -78.801 39.60704, -78.8011 39.60722, -78.80133 39.60733, -78.80188 39.60746, -78.80268 39.60756, -78.80358 39.60756, -78.80417 39.60754, -78.80502 39.60757, -78.80566 39.60768, -78.80634 39.60792, -78.80727 39.60829, -78.80799 39.60859, -78.80851 39.60871, -78.80888 39.60867, -78.80932 39.6085, -78.80959 39.60823, -78.80992 39.60786, -78.81006 39.60764, -78.81004 39.60747, -78.80996 39.60721, -78.80996 39.60697, -78.81012 39.60648, -78.81033 39.60582, -78.81055 39.60515, -78.8108 39.60477, -78.811 39.60433, -78.81133 39.60352, -78.81158 39.60275, -78.81193 39.60187, -78.81207 39.60177, -78.81231 39.60127, -78.81253 39.60074, -78.81264 39.60025, -78.81258 39.59987, -78.81247 39.59941, -78.81228 39.59901, -78.81222 39.59876, -78.81227 39.5985, -78.81238 39.59825, -78.81789 39.59491, -78.8189 39.5943, -78.81955 39.5939, -78.82557 39.59025, -78.82585 39.58999, -78.82616 39.58954, -78.8263 39.58921, -78.82639 39.58888, -78.82646 39.58848, -78.82652 39.58809, -78.8267 39.58774, -78.82686 39.58747, -78.82694 39.58716, -78.82698 39.5868, -78.82714 39.58647, -78.8274 39.58599, -78.82745 39.58583, -78.82744 39.58534, -78.82741 39.5848, -78.82734 39.58426, -78.82726 39.58402, -78.82706 39.58371, -78.827 39.58359, -78.82705 39.58348, -78.82699 39.5833, -78.8269 39.58291, -78.8268 39.58212, -78.82654 39.58129, -78.82622 39.58037, -78.82626 39.58015, -78.82629 39.57973, -78.82637 39.57881, -78.82653 39.57796, -78.82656 39.57747, -78.82646 39.57713, -78.82625 39.57683, -78.82582 39.57653, -78.82549 39.57641, -78.8147 39.56822, -78.81421 39.56646, -78.81455 39.56575, -78.81512 39.56462, -78.81564 39.56389, -78.81608 39.56324, -78.81639 39.56282, -78.81654 39.5626, -78.81681 39.56247, -78.81702 39.56234, -78.81732 39.5622, -78.81784 39.56216, -78.81817 39.56218, -78.81886 39.56222, -78.81945 39.56224, -78.82009 39.56218, -78.82056 39.56217, -78.82078 39.5621, -78.82134 39.56205, -78.82177 39.56201, -78.82223 39.56202, -78.823 39.56208, -78.82338 39.56207, -78.8235 39.562, -78.82357 39.56194, -78.82363 39.56199, -78.82371 39.56207, -78.8239 39.56217, -78.82474 39.56246, -78.82566 39.56285, -78.82631 39.56321, -78.82703 39.56361, -78.8273 39.5639, -78.82738 39.56414, -78.82736 39.56438, -78.82745 39.56453, -78.82775 39.56467, -78.82866 39.56509, -78.82938 39.5654, -78.83011 39.56572, -78.8308 39.56588, -78.83182 39.56607, -78.83278 39.56621, -78.83343 39.56644, -78.83467 39.56669, -78.83648 39.56726, -78.83722 39.56746, -78.83777 39.56757, -78.83828 39.56762, -78.83879 39.56757, -78.83933 39.56741, -78.8398 39.56721, -78.84009 39.567, -78.84049 39.56654, -78.84084 39.56613, -78.84122 39.56582, -78.84153 39.56545, -78.84179 39.56505, -78.84196 39.56473, -78.84229 39.56414, -78.84248 39.56392, -78.84282 39.56381, -78.84316 39.56375, -78.84364 39.56361, -78.84444 39.56349, -78.84491 39.56343, -78.84588 39.56333, -78.8465 39.56321, -78.84728 39.56299, -78.84792 39.56271, -78.848 39.56261, -78.84857 39.56235, -78.84917 39.56198, -78.84956 39.56179, -78.84997 39.56151, -78.85047 39.56117, -78.85094 39.56074, -78.85114 39.56046, -78.85134 39.56021, -78.85138 39.55998, -78.8514 39.55965, -78.85131 39.55863, -78.8513 39.55809, -78.8513 39.55739, -78.85131 39.55673, -78.85139 39.55593, -78.85139 39.55572, -78.85142 39.55528, -78.85153 39.55485, -78.85164 39.55427, -78.85178 39.55391, -78.85189 39.55307, -78.85208 39.55231, -78.85222 39.55196, -78.85229 39.55173, -78.8525 39.55149, -78.85264 39.55124, -78.85295 39.55095, -78.85353 39.55028, -78.85408 39.54973, -78.85437 39.54931, -78.8548 39.54887, -78.85537 39.54829, -78.85622 39.54739, -78.8566 39.54696, -78.85677 39.54674, -78.85695 39.54651, -78.85708 39.54642, -78.85714 39.54634, -78.8572 39.54623, -78.85737 39.54603, -78.85761 39.54577, -78.85778 39.54555, -78.85818 39.54524, -78.85832 39.54506, -78.85863 39.54463, -78.85889 39.54432, -78.859 39.54418, -78.85921 39.54396, -78.85975 39.54341, -78.85994 39.54327, -78.86017 39.54295, -78.8605 39.54271, -78.86095 39.54232, -78.86119 39.54199, -78.86126 39.54185, -78.86138 39.54165, -78.86158 39.54147, -78.86181 39.54136, -78.86224 39.54127, -78.86256 39.54126, -78.86284 39.54129, -78.86307 39.54131, -78.86307 39.54135, -78.863 39.54141, -78.86309 39.54145, -78.86314 39.54145, -78.86343 39.54145, -78.86378 39.5414, -78.86424 39.54139, -78.86462 39.54126, -78.86504 39.54109, -78.86574 39.54082, -78.86631 39.54058, -78.86681 39.54048, -78.8672 39.54043, -78.86771 39.5404, -78.86809 39.54025, -78.86834 39.54025, -78.87022 39.53795, -78.87013 39.53237, -78.87025 39.53174, -78.87043 39.53137, -78.87067 39.53102, -78.87109 39.53036, -78.87126 39.52992, -78.87144 39.52951, -78.87168 39.52909, -78.87185 39.52885, -78.87209 39.52854, -78.87236 39.52811, -78.87259 39.5277, -78.87316 39.52688, -78.87392 39.52557, -78.87452 39.52461, -78.87462 39.52425, -78.87474 39.52373, -78.87482 39.52341, -78.87509 39.52325, -78.87551 39.52297, -78.87645 39.52239, -78.87715 39.52208, -78.87758 39.52192, -78.87813 39.5218, -78.87874 39.52181, -78.87916 39.52187, -78.87953 39.52194, -78.88012 39.52215, -78.88066 39.52239, -78.88105 39.52255, -78.8814 39.52275, -78.88177 39.52286, -78.88205 39.52291, -78.88251 39.52302, -78.88302 39.52316, -78.88333 39.52315, -78.88358 39.52309, -78.88389 39.52311, -78.88437 39.52312, -78.88493 39.52307, -78.88551 39.52315, -78.88594 39.52318, -78.886 39.52325, -78.88646 39.52336, -78.88688 39.52348, -78.88703 39.52363, -78.88722 39.52391, -78.88741 39.52412, -78.8878 39.52454, -78.88809 39.52489, -78.88846 39.52522, -78.88866 39.52543, -78.88893 39.52566, -78.88924 39.5257, -78.88972 39.52568, -78.8904 39.52564, -78.89066 39.52553, -78.89107 39.52545, -78.89141 39.52545, -78.89195 39.5253, -78.89257 39.52507, -78.89312 39.52472, -78.89365 39.52424, -78.89393 39.52368, -78.89407 39.52325, -78.89407 39.52276, -78.89395 39.52218, -78.89378 39.52171, -78.89345 39.52123, -78.89326 39.52106, -78.893 39.5207, -78.89261 39.52019, -78.89231 39.51972, -78.892 39.51927, -78.89178 39.51886, -78.89164 39.51867, -78.89166 39.51828, -78.89177 39.5175, -78.89187 39.51669, -78.89205 39.51582, -78.89233 39.51496, -78.89257 39.51413, -78.89281 39.51378, -78.8932 39.51344, -78.89367 39.51319, -78.89418 39.51305, -78.89464 39.51298, -78.89514 39.51302, -78.89575 39.5131, -78.89623 39.51308, -78.89679 39.51304, -78.89737 39.51294, -78.89787 39.5129, -78.89865 39.51288, -78.89952 39.51295, -78.90097 39.51306, -78.90173 39.5131, -78.9025 39.51316, -78.9031 39.51314, -78.90366 39.51305, -78.90434 39.51279, -78.90487 39.51247, -78.90547 39.51197, -78.90578 39.51167, -78.90585 39.51145, -78.90584 39.51104, -78.90571 39.51056, -78.90549 39.51031, -78.90526 39.50989, -78.90502 39.50922, -78.90486 39.50872, -78.90467 39.50831, -78.90446 39.50756, -78.90431 39.50683, -78.9042 39.50599, -78.90418 39.50532, -78.90431 39.50461, -78.90457 39.50404, -78.90481 39.50349, -78.90492 39.50316, -78.90538 39.5022, -78.90555 39.50186, -78.90569 39.50163, -78.90598 39.5013, -78.9062 39.50101, -78.9064 39.50072, -78.90684 39.50012, -78.90703 39.49976, -78.90732 39.49922, -78.90782 39.49852, -78.90845 39.49763, -78.90862 39.49741, -78.90916 39.49684, -78.90959 39.49643, -78.91006 39.49618, -78.91059 39.49596, -78.91123 39.49582, -78.91191 39.49568, -78.91225 39.49566, -78.9125 39.49557, -78.91306 39.49519, -78.91352 39.49473, -78.91383 39.49418, -78.91404 39.49369, -78.91421 39.49325, -78.91435 39.49316, -78.91447 39.49285, -78.91449 39.49246, -78.91447 39.49199, -78.91449 39.49137, -78.91463 39.49087, -78.91491 39.49023, -78.91522 39.48973, -78.91529 39.48961, -78.91549 39.4894, -78.91564 39.48898, -78.916 39.48813, -78.9162 39.48781, -78.91643 39.48717, -78.91666 39.48679, -78.91689 39.48658, -78.91708 39.48642, -78.91753 39.48634, -78.91784 39.48636, -78.91856 39.4865, -78.91974 39.48678, -78.92052 39.48693, -78.92107 39.48712, -78.92172 39.48735, -78.92267 39.48756, -78.92349 39.4877, -78.9245 39.4878, -78.9249 39.48784, -78.92527 39.48784, -78.926 39.48783, -78.92658 39.48776, -78.92714 39.48773, -78.92789 39.4877, -78.92857 39.48764, -78.92954 39.48744, -78.93021 39.48729, -78.93058 39.48727, -78.93101 39.48722, -78.93165 39.48713, -78.93251 39.48697, -78.9329 39.48682, -78.93336 39.48674, -78.9344 39.48647, -78.93519 39.48623, -78.93574 39.48599, -78.93678 39.48552, -78.93682 39.48548, -78.93689 39.48535, -78.93696 39.48526, -78.93706 39.48505, -78.93731 39.48494, -78.93786 39.48474, -78.93814 39.48462, -78.93843 39.48438, -78.93865 39.48421, -78.94236 39.4789, -78.94233 39.47867, -78.94235 39.47856, -78.94227 39.47839, -78.94205 39.4779, -78.94204 39.47773, -78.94201 39.47747, -78.9418 39.47713, -78.94147 39.47669, -78.94124 39.47645, -78.94116 39.47625, -78.94095 39.47611, -78.94044 39.47586, -78.94011 39.47573, -78.93983 39.47566, -78.93959 39.47549, -78.9393 39.4752, -78.93918 39.47492, -78.93911 39.47478, -78.93915 39.47456, -78.93933 39.47425, -78.93959 39.47402, -78.93985 39.47386, -78.94021 39.47344, -78.94033 39.47325, -78.94047 39.473, -78.94067 39.47251, -78.94077 39.47229, -78.94096 39.47202, -78.94113 39.47178, -78.94133 39.47161, -78.94143 39.4715, -78.94156 39.47127, -78.94205 39.47064, -78.94273 39.46996, -78.94341 39.46937, -78.94384 39.46905, -78.94428 39.46882, -78.94462 39.46851, -78.9448 39.46839, -78.94485 39.46821, -78.94517 39.46794, -78.94557 39.46755, -78.94618 39.46703, -78.94635 39.46684, -78.94667 39.46679, -78.94726 39.46668, -78.94812 39.46641, -78.94925 39.4661, -78.95 39.46584, -78.95064 39.46556, -78.95129 39.46507, -78.95187 39.4647, -78.95244 39.46445, -78.95303 39.46431, -78.95373 39.46427, -78.95438 39.46434, -78.95496 39.46448, -78.95583 39.46467, -78.95624 39.46469, -78.95671 39.46467, -78.95725 39.46455, -78.95775 39.46442, -78.95813 39.46423, -78.95859 39.46388, -78.95897 39.46348, -78.95928 39.46315, -78.9596 39.46257, -78.95978 39.46209, -78.95986 39.46162, -78.95985 39.46121, -78.95979 39.46058, -78.95967 39.46027, -78.95958 39.45993, -78.9594 39.45951, -78.9591 39.45909, -78.95852 39.45851, -78.95808 39.45804, -78.95761 39.45756, -78.95733 39.45734, -78.95705 39.45711, -78.9567 39.45664, -78.95639 39.45616, -78.95619 39.45602, -78.95568 39.45572, -78.95529 39.45541, -78.95508 39.45533, -78.95494 39.45522, -78.95474 39.45515, -78.95463 39.455, -78.95454 39.45487, -78.95455 39.45467, -78.9548 39.45416, -78.95506 39.45391, -78.95563 39.45345, -78.95636 39.45294, -78.95678 39.45281, -78.9573 39.45281, -78.9577 39.45276, -78.95794 39.45269, -78.9583 39.45263, -78.95865 39.45253, -78.95881 39.45238, -78.95902 39.45226, -78.95945 39.45212, -78.95976 39.45203, -78.95999 39.45202, -78.96034 39.45189, -78.96059 39.45168, -78.96073 39.45149, -78.96084 39.45109, -78.96081 39.45077, -78.96061 39.45044, -78.96028 39.45014, -78.95977 39.44985, -78.9592 39.44955, -78.95875 39.44928, -78.95825 39.44892, -78.95795 39.44864, -78.95739 39.44823, -78.95686 39.44782, -78.95661 39.44752, -78.95653 39.44733, -78.95647 39.44696, -78.95635 39.44633, -78.95617 39.44578, -78.95615 39.44533, -78.956 39.44471, -78.956 39.44426, -78.95599 39.44287, -78.95598 39.44239, -78.95587 39.44182, -78.95591 39.44157, -78.95606 39.44127, -78.95623 39.44102, -78.95649 39.44079, -78.9568 39.44062, -78.95718 39.44046, -78.9576 39.44039, -78.958 39.44038, -78.95834 39.44037, -78.95896 39.44028, -78.95947 39.44019, -78.96007 39.44009, -78.96094 39.43994, -78.9616 39.43987, -78.96202 39.43986, -78.96255 39.43986, -78.96309 39.43977, -78.96334 39.4397, -78.96361 39.43947, -78.96377 39.43933, -78.96393 39.43922, -78.96406 39.43904, -78.96407 39.43891, -78.96405 39.43875, -78.96428 39.4386, -78.96456 39.43853, -78.96486 39.43856, -78.96519 39.43869, -78.99486 39.45479, -78.99792 39.45645, -78.99898 39.45703, -79.01604 39.46628, -79.01663 39.46687, -79.01696 39.46713, -79.01702 39.46726, -79.01709 39.46737, -79.01743 39.46758, -79.01759 39.46768, -79.01769 39.4677, -79.01768 39.46771, -79.01775 39.46772, -79.01793 39.46784, -79.01809 39.46793, -79.01821 39.46799, -79.01837 39.46804, -79.01859 39.46808, -79.01879 39.46808, -79.01913 39.46797, -79.01944 39.46783, -79.01976 39.46767, -79.01991 39.46755, -79.02008 39.46749, -79.02024 39.46741, -79.02041 39.46731, -79.02063 39.46728, -79.02075 39.46723, -79.02089 39.46719, -79.02111 39.46713, -79.02116 39.46713, -79.02136 39.46705, -79.02136 39.46705, -79.02146 39.46701, -79.022 39.46683, -79.0229 39.46661, -79.02344 39.46649, -79.02402 39.4663, -79.02517 39.46599, -79.02587 39.46571, -79.02648 39.46555, -79.027 39.46541, -79.0275 39.46535, -79.02823 39.46519, -79.0288 39.4651, -79.0296 39.46521, -79.03013 39.46543, -79.03051 39.46559, -79.03103 39.46598, -79.03146 39.46619, -79.03218 39.46648, -79.03275 39.4668, -79.03312 39.46705, -79.03351 39.46746, -79.0338 39.46797, -79.03409 39.46823, -79.03452 39.46888, -79.03488 39.46969, -79.03532 39.47042, -79.03543 39.47067, -79.03545 39.47093, -79.03549 39.47116, -79.03558 39.47131, -79.03552 39.47167, -79.03536 39.47225, -79.03531 39.47274, -79.03535 39.47313, -79.03554 39.47365, -79.03572 39.47422, -79.03584 39.47469, -79.03588 39.47507, -79.036 39.47573, -79.03623 39.47615, -79.03652 39.47669, -79.04415 39.47985, -79.04437 39.48016, -79.04451 39.48045, -79.04473 39.48081, -79.04488 39.4812, -79.04489 39.48152, -79.04499 39.48174, -79.04519 39.48205, -79.04534 39.48247, -79.04556 39.48295, -79.04556 39.48295, -79.04555 39.48295, -79.0458 39.48323, -79.04591 39.48336, -79.04615 39.48353, -79.04651 39.48366, -79.04666 39.48371, -79.04727 39.48383, -79.04768 39.48384, -79.04814 39.48382, -79.04821 39.48382, -79.04835 39.4838, -79.04835 39.4838, -79.04836 39.4838, -79.04914 39.4837, -79.04974 39.48361, -79.05028 39.48342, -79.05078 39.4832, -79.0513 39.48296, -79.05179 39.48268, -79.05221 39.4824, -79.05264 39.48199, -79.05276 39.48188, -79.0529 39.48172, -79.05306 39.48157, -79.05317 39.48142, -79.05344 39.48106, -79.05353 39.48084, -79.05367 39.48055, -79.05375 39.48026, -79.05383 39.48002, -79.0539 39.47991, -79.05395 39.47965, -79.054 39.47933, -79.05407 39.47906, -79.0541 39.47855, -79.05413 39.47833, -79.05419 39.47757, -79.05419 39.47757, -79.05419 39.47746, -79.05421 39.47705, -79.05426 39.4768, -79.0543 39.47655, -79.05428 39.4764, -79.05429 39.47623, -79.05433 39.47609, -79.05438 39.47584, -79.0544 39.4755, -79.05444 39.47518, -79.05449 39.47499, -79.05448 39.47478, -79.05454 39.47456, -79.05455 39.47439, -79.05457 39.47415, -79.05462 39.47391, -79.05467 39.47372, -79.05469 39.47365, -79.05488 39.47322, -79.055 39.47283, -79.05546 39.47193, -79.05556 39.47166, -79.0557 39.47153, -79.05586 39.47135, -79.05587 39.47135, -79.056 39.4712, -79.05666 39.47105, -79.05683 39.47099, -79.05693 39.47096, -79.05701 39.47096, -79.0571 39.47097, -79.05724 39.47101, -79.05738 39.47103, -79.05763 39.47103, -79.05791 39.47107, -79.05812 39.47118, -79.05859 39.47141, -79.05916 39.47167, -79.05951 39.47182, -79.05973 39.47199, -79.05982 39.4721, -79.05985 39.4722, -79.05988 39.47238, -79.05988 39.47238, -79.0599 39.4725, -79.06007 39.47262, -79.06027 39.47284, -79.0604 39.47326, -79.06056 39.47358, -79.06059 39.47362, -79.06106 39.47414, -79.06152 39.47488, -79.06181 39.47533, -79.06181 39.47533, -79.06226 39.47599, -79.06268 39.47657, -79.06276 39.47667, -79.06286 39.47691, -79.06296 39.47703, -79.06295 39.47703, -79.06331 39.47759, -79.06372 39.47821, -79.06419 39.47879, -79.06416 39.4788, -79.06417 39.4788, -79.06486 39.47937, -79.06519 39.47961, -79.06578 39.47997, -79.06634 39.48033, -79.06683 39.48052, -79.06692 39.48056, -78.92842 39.72277, -78.65851 39.72288, -78.50034 39.72284, -78.49359 39.72269, -78.38124 39.72257, -78.34271 39.72257, -78.34274 39.72251, -78.34284 39.72224, -78.34304 39.722, -78.34325 39.72187, -78.34346 39.7218, -78.34378 39.72176, -78.34406 39.72179, -78.34439 39.72198, -78.3447 39.72205, -78.34535 39.72202, -78.34548 39.72197, -78.34577 39.72192, -78.34595 39.72182, -78.34608 39.72172, -78.34609 39.72169, -78.34615 39.7215, -78.34615 39.72139, -78.34609 39.72115, -78.34603 39.72101, -78.3459 39.72077, -78.3456 39.72033, -78.34461 39.71913, -78.34443 39.71879, -78.34438 39.71863, -78.34427 39.71838, -78.34406 39.71807, -78.34389 39.7179, -78.34317 39.71731, -78.34267 39.717, -78.34244 39.71689, -78.3421 39.7168, -78.34178 39.71668, -78.34132 39.71646, -78.34085 39.71626, -78.34025 39.71609, -78.34002 39.71606, -78.33962 39.71608, -78.33942 39.71611, -78.33929 39.71616, -78.33917 39.71623, -78.33892 39.71634, -78.33879 39.71637, -78.33859 39.71652, -78.33836 39.71674, -78.33828 39.71687, -78.33811 39.71721, -78.33798 39.71738, -78.33767 39.71795, -78.33755 39.71807, -78.33742 39.71815, -78.33702 39.71848, -78.33688 39.71868, -78.33681 39.71883, -78.33665 39.71934, -78.33645 39.71956, -78.33629 39.71966, -78.33605 39.7197, -78.33564 39.71969, -78.33534 39.71963, -78.3345 39.71961, -78.33434 39.71958, -78.33414 39.71949, -78.33404 39.71943, -78.33377 39.71923, -78.3335 39.71896, -78.33334 39.71878, -78.3332 39.71852, -78.33313 39.7183, -78.33311 39.718, -78.33306 39.71773, -78.33281 39.71714, -78.33278 39.71712, -78.33272 39.71692, -78.33259 39.71661, -78.33256 39.71659, -78.33258 39.71641, -78.33279 39.71619, -78.33283 39.71608, -78.33281 39.71594, -78.33277 39.71586, -78.33244 39.71552, -78.33197 39.71465, -78.3317 39.71442, -78.33116 39.71411, -78.33042 39.71352, -78.33008 39.71315, -78.3295 39.71268, -78.32944 39.71257, -78.32944 39.71245, -78.32956 39.71223, -78.32964 39.71213, -78.33001 39.71182, -78.33028 39.71167, -78.33048 39.7116, -78.33072 39.71158, -78.33091 39.71159, -78.3317 39.71181, -78.33206 39.71193, -78.33264 39.7122, -78.33297 39.71238, -78.33331 39.71261, -78.33354 39.71272, -78.33368 39.71274, -78.33392 39.71269, -78.33396 39.71266, -78.3342 39.71257, -78.33429 39.71244, -78.33435 39.712, -78.33433 39.71199, -78.3344 39.71174, -78.33456 39.71143, -78.33463 39.71135, -78.33468 39.71123, -78.33471 39.71106, -78.33469 39.71087, -78.33461 39.71049, -78.33451 39.71015, -78.33435 39.70982, -78.33409 39.70957, -78.334 39.70951, -78.33359 39.70931, -78.33339 39.70926, -78.33281 39.70901, -78.33228 39.70876, -78.33207 39.70868, -78.3316 39.70857, -78.3314 39.70855, -78.33098 39.70855, -78.33071 39.70855, -78.33042 39.70847, -78.32983 39.7082, -78.32942 39.70797, -78.32928 39.70792, -78.32853 39.70768, -78.32806 39.70757, -78.32729 39.70728, -78.32618 39.70668, -78.32518 39.70606, -78.32511 39.70601, -78.3249 39.70577, -78.32465 39.70548, -78.3245 39.70535, -78.32431 39.70524, -78.32418 39.7052, -78.32397 39.70516, -78.3236 39.70514, -78.32344 39.70504, -78.32301 39.70458, -78.32241 39.70413, -78.32172 39.70352, -78.32142 39.70323, -78.321 39.7029, -78.32073 39.70281, -78.32013 39.70276, -78.31978 39.7027, -78.31877 39.70262, -78.31836 39.70251, -78.31823 39.70243, -78.31818 39.70238, -78.31814 39.70222, -78.31815 39.70139, -78.31812 39.70123, -78.31796 39.70087, -78.31765 39.70038, -78.31758 39.70021, -78.31747 39.69996, -78.31743 39.69962, -78.31747 39.69937, -78.31757 39.69916, -78.31777 39.69884, -78.31782 39.6988, -78.31832 39.69809, -78.31866 39.69768, -78.31907 39.6973, -78.31934 39.69698, -78.31969 39.69652, -78.31989 39.69621, -78.31992 39.69599, -78.31989 39.69581, -78.31965 39.69519, -78.31956 39.69502, -78.3193 39.6947, -78.31907 39.6945, -78.31858 39.69423, -78.31835 39.69408, -78.31779 39.69365, -78.31747 39.69343, -78.31715 39.69327, -78.31682 39.69316, -78.31662 39.69313, -78.31635 39.69315, -78.31621 39.69317, -78.31575 39.69331, -78.31539 39.69346, -78.31485 39.69363, -78.31467 39.69367, -78.31443 39.69365, -78.31424 39.6936, -78.31413 39.69355, -78.31381 39.69334, -78.31361 39.69311, -78.31351 39.69284, -78.31348 39.69261, -78.31351 39.6923, -78.31361 39.69187, -78.31369 39.69175, -78.31408 39.69135, -78.31541 39.69012, -78.3161 39.68951, -78.31648 39.68924, -78.31664 39.68919, -78.31695 39.68915, -78.31718 39.68914, -78.31786 39.68915, -78.31854 39.68921, -78.31857 39.6892, -78.31904 39.68923, -78.31918 39.68922, -78.3198 39.68928, -78.3202 39.68933, -78.32032 39.68937, -78.32113 39.68945, -78.32132 39.68951, -78.32175 39.68958, -78.32215 39.6896, -78.3223 39.68959, -78.32246 39.68955, -78.32273 39.68941, -78.32284 39.68928, -78.3229 39.68919, -78.32312 39.68859, -78.32315 39.68827, -78.32311 39.68814, -78.32305 39.68802, -78.32252 39.68756, -78.32233 39.68744, -78.3222 39.68739, -78.32163 39.6872, -78.32109 39.6871, -78.32079 39.68707, -78.32069 39.68704, -78.32035 39.68701, -78.32028 39.68698, -78.31992 39.68695, -78.31867 39.68696, -78.3181 39.6868, -78.31791 39.68678, -78.31762 39.6868, -78.31743 39.68679, -78.31696 39.68666, -78.31627 39.68639, -78.31554 39.68604, -78.31534 39.68591, -78.31521 39.68579, -78.31503 39.68551, -78.31494 39.68533, -78.31496 39.68532, -78.31488 39.68503, -78.31492 39.68469, -78.31505 39.68442, -78.31512 39.68432, -78.31535 39.68405, -78.3157 39.68373, -78.31614 39.68344, -78.31642 39.68331, -78.31668 39.68327, -78.31703 39.68329, -78.31739 39.68336, -78.31752 39.68342, -78.31804 39.68355, -78.3191 39.68387, -78.31967 39.6841, -78.32009 39.68426, -78.32024 39.68433, -78.32032 39.68436, -78.32046 39.68444, -78.32076 39.68459, -78.32129 39.68479, -78.32149 39.68483, -78.32167 39.68483, -78.32181 39.68479, -78.32224 39.68453, -78.32264 39.68422, -78.32296 39.6839, -78.32303 39.68368, -78.32301 39.6836, -78.3229 39.68334, -78.32274 39.68307, -78.32263 39.68291, -78.32174 39.6821, -78.32144 39.68204, -78.32099 39.68201, -78.32092 39.68199, -78.32027 39.68196, -78.32008 39.68198, -78.31998 39.68204, -78.3199 39.68216, -78.31975 39.68229, -78.31958 39.68229, -78.31892 39.68213, -78.3186 39.68201, -78.31845 39.68192, -78.31828 39.68177, -78.31818 39.68164, -78.31812 39.68152, -78.31805 39.68112, -78.31811 39.68074, -78.31823 39.68039, -78.31828 39.68033, -78.31911 39.67988, -78.31979 39.67954, -78.3205 39.67912, -78.321 39.67908, -78.32117 39.679, -78.32128 39.67891, -78.3214 39.6787, -78.32134 39.67833, -78.3212 39.67813, -78.32065 39.6777, -78.32045 39.67757, -78.32005 39.67737, -78.31998 39.67731, -78.31991 39.67724, -78.31982 39.67703, -78.31979 39.67687, -78.31982 39.6767, -78.31996 39.67652, -78.32016 39.6764, -78.32026 39.67637, -78.32047 39.67637, -78.32075 39.67641, -78.32111 39.67648, -78.32137 39.67657, -78.32149 39.67664, -78.32223 39.67687, -78.32323 39.67746, -78.3234 39.6775, -78.32387 39.67768, -78.32421 39.6777, -78.32427 39.67768, -78.32477 39.67763, -78.3249 39.67759, -78.32501 39.67755, -78.32518 39.67747, -78.32531 39.67738, -78.32576 39.677, -78.326 39.67689, -78.32628 39.67681, -78.32659 39.67679, -78.32692 39.67684, -78.32715 39.67692, -78.32755 39.67714, -78.32802 39.67742, -78.32823 39.67758, -78.32863 39.6778, -78.32897 39.67793, -78.32916 39.67804, -78.32964 39.67842, -78.33007 39.67855, -78.33035 39.67868, -78.33049 39.67881, -78.33059 39.67894, -78.33068 39.67901, -78.33078 39.67905, -78.331 39.67911, -78.33202 39.67928, -78.33242 39.67945, -78.3325 39.67947, -78.33263 39.67955, -78.33282 39.6796, -78.33398 39.68003, -78.33444 39.68028, -78.3352 39.68058, -78.33565 39.68069, -78.3361 39.68075, -78.33671 39.68071, -78.33725 39.68058, -78.33728 39.68056, -78.33769 39.68045, -78.33816 39.68023, -78.33851 39.67997, -78.3389 39.67962, -78.3394 39.67933, -78.33984 39.67912, -78.34004 39.679, -78.34048 39.67867, -78.34104 39.67833, -78.34116 39.67828, -78.34135 39.67816, -78.3417 39.67798, -78.34204 39.67775, -78.34239 39.67747, -78.34249 39.67737, -78.34259 39.67721, -78.34265 39.67716, -78.34306 39.67667, -78.34337 39.67626, -78.34352 39.676, -78.34352 39.67594, -78.34359 39.6757, -78.34356 39.67547, -78.34348 39.67532, -78.34338 39.6752, -78.34322 39.67506, -78.34312 39.67499, -78.34212 39.67425, -78.34151 39.67376, -78.34121 39.67351, -78.34088 39.67317, -78.3407 39.67288, -78.34066 39.67278, -78.34064 39.67233, -78.34058 39.67219, -78.34044 39.67201, -78.34028 39.6719, -78.33985 39.67177, -78.33956 39.67171, -78.33907 39.67166, -78.3387 39.67153, -78.33829 39.67132, -78.33812 39.67121, -78.3373 39.67084, -78.33711 39.67079, -78.33658 39.67074, -78.33649 39.67071, -78.33632 39.6706, -78.33618 39.67036, -78.3361 39.67005, -78.33602 39.66921, -78.33583 39.66868, -78.33556 39.66809, -78.33555 39.66796, -78.33558 39.66756, -78.33556 39.6675, -78.33544 39.66737, -78.33521 39.6672, -78.33445 39.66683, -78.33418 39.66668, -78.33408 39.66666, -78.33405 39.66664, -78.33368 39.66658, -78.33348 39.66653, -78.33331 39.66639, -78.33325 39.66626, -78.33322 39.66604, -78.33322 39.66578, -78.33329 39.66534, -78.33342 39.66482, -78.33342 39.66473, -78.33357 39.66383, -78.33368 39.66353, -78.33384 39.66324, -78.33393 39.66311, -78.3342 39.66292, -78.33437 39.66289, -78.33472 39.66291, -78.33518 39.66299, -78.33553 39.66308, -78.33582 39.66318, -78.33652 39.66348, -78.33695 39.66363, -78.337 39.66366, -78.3376 39.66384, -78.33788 39.66391, -78.3384 39.6641, -78.33894 39.66427, -78.33896 39.66429, -78.33928 39.66436, -78.33965 39.66433, -78.34004 39.66424, -78.3403 39.66415, -78.34063 39.66401, -78.34081 39.66396, -78.34128 39.66375, -78.34192 39.6635, -78.34202 39.66348, -78.34233 39.66332, -78.34264 39.66313, -78.34281 39.66298, -78.34299 39.66274, -78.34317 39.6626, -78.3433 39.66255, -78.34359 39.66237, -78.34394 39.66219, -78.34434 39.662, -78.34484 39.66187, -78.34495 39.66185, -78.34585 39.66164, -78.34619 39.66159, -78.34655 39.66157, -78.34685 39.66149, -78.34712 39.66126, -78.34731 39.66114, -78.34768 39.66106, -78.34814 39.661, -78.34818 39.66098, -78.34852 39.66091, -78.34885 39.66082, -78.34915 39.6607, -78.34933 39.66064, -78.34957 39.66062, -78.35019 39.66063, -78.35041 39.66063, -78.35088 39.66066, -78.35108 39.6607, -78.35172 39.66093, -78.35244 39.66115, -78.35322 39.66133, -78.35388 39.66154, -78.35402 39.66167, -78.35415 39.66189, -78.35421 39.66211, -78.35423 39.66227, -78.3545 39.66281, -78.35457 39.6629, -78.35471 39.66301, -78.35546 39.66357, -78.35581 39.66376, -78.35599 39.66384, -78.35615 39.66389, -78.35639 39.66391, -78.35696 39.66391, -78.35726 39.66387, -78.35746 39.66383, -78.35759 39.66377, -78.35768 39.6637, -78.35769 39.66357, -78.35759 39.66334, -78.35749 39.66315, -78.35732 39.66293, -78.35722 39.66276, -78.357 39.66223, -78.35669 39.66175, -78.35641 39.66145, -78.35633 39.66139, -78.35614 39.66129, -78.35578 39.66102, -78.35548 39.66073, -78.35527 39.66048, -78.35522 39.66037, -78.35519 39.66035, -78.35518 39.66021, -78.35522 39.66014, -78.35529 39.6601, -78.35574 39.65993, -78.35623 39.65979, -78.3566 39.65971, -78.35691 39.65966, -78.35739 39.6597, -78.35775 39.65975, -78.35887 39.66004, -78.3602 39.66036, -78.36036 39.66046, -78.36039 39.66056, -78.36042 39.66058, -78.36048 39.66084, -78.36052 39.66093, -78.36061 39.66103, -78.36065 39.66105, -78.36102 39.66108, -78.36219 39.66106, -78.36237 39.66109, -78.3628 39.6608, -78.36309 39.66066, -78.36323 39.66057, -78.36343 39.66041, -78.36358 39.66013, -78.36361 39.65994, -78.3636 39.65989, -78.36341 39.65958, -78.36309 39.65928, -78.36294 39.65893, -78.36282 39.65873, -78.36257 39.65849, -78.36248 39.65843, -78.36223 39.65831, -78.36122 39.65793, -78.36098 39.65775, -78.36055 39.65769, -78.36012 39.65754, -78.35963 39.65729, -78.35946 39.65722, -78.35911 39.65714, -78.35868 39.6571, -78.3583 39.65712, -78.35813 39.65718, -78.3579 39.6573, -78.35777 39.65741, -78.35765 39.65755, -78.3575 39.6577, -78.35745 39.65773, -78.3574 39.65774, -78.35726 39.65769, -78.3571 39.65757, -78.35691 39.65736, -78.35676 39.65706, -78.35664 39.65691, -78.35658 39.65686, -78.35624 39.65672, -78.35603 39.65658, -78.356 39.65652, -78.35597 39.65629, -78.35581 39.65616, -78.35564 39.65607, -78.35497 39.65594, -78.35431 39.65576, -78.35382 39.65554, -78.35326 39.65522, -78.35268 39.65515, -78.35204 39.65499, -78.35171 39.65496, -78.35159 39.65492, -78.35044 39.65477, -78.35038 39.65475, -78.35032 39.65476, -78.35019 39.65474, -78.34975 39.65469, -78.34956 39.65464, -78.34894 39.65458, -78.3485 39.65449, -78.34821 39.65448, -78.34731 39.65439, -78.34694 39.65431, -78.34663 39.6542, -78.3464 39.65409, -78.34592 39.65378, -78.345 39.65334, -78.34432 39.65309, -78.34395 39.653, -78.34392 39.65298, -78.3437 39.65294, -78.3435 39.65294, -78.3432 39.65297, -78.34291 39.65301, -78.34233 39.65304, -78.34144 39.65293, -78.34097 39.65298, -78.34067 39.653, -78.34057 39.65298, -78.34036 39.65288, -78.34005 39.65268, -78.33995 39.65259, -78.3398 39.65231, -78.3397 39.65193, -78.33973 39.65159, -78.33985 39.6511, -78.3399 39.65062, -78.33999 39.65024, -78.34014 39.64977, -78.34027 39.64936, -78.34053 39.64881, -78.34063 39.6487, -78.34083 39.64863, -78.34112 39.64867, -78.34146 39.64886, -78.34173 39.64897, -78.342 39.64907, -78.34215 39.6491, -78.34254 39.64925, -78.34311 39.64942, -78.34325 39.64949, -78.34382 39.64962, -78.34484 39.64977, -78.34496 39.64979, -78.34553 39.64982, -78.34568 39.64977, -78.34571 39.64976, -78.34582 39.6497, -78.34602 39.64954, -78.34612 39.6494, -78.34611 39.64914, -78.34605 39.64898, -78.346 39.64894, -78.34585 39.64865, -78.34528 39.648, -78.34516 39.64785, -78.34487 39.64731, -78.34476 39.64707, -78.34464 39.64693, -78.34462 39.64686, -78.34442 39.64662, -78.34412 39.64636, -78.3441 39.64632, -78.34405 39.64631, -78.34379 39.64612, -78.34365 39.64593, -78.34364 39.64589, -78.34356 39.64581, -78.34273 39.64435, -78.34262 39.6442, -78.34226 39.64388, -78.3419 39.64374, -78.34131 39.64355, -78.34121 39.6435, -78.34116 39.6435, -78.34057 39.64332, -78.34044 39.64326, -78.33943 39.64302, -78.33808 39.64266, -78.33805 39.64264, -78.3374 39.64247, -78.33699 39.6423, -78.33692 39.64229, -78.33644 39.64213, -78.33612 39.64199, -78.33582 39.64192, -78.33562 39.6419, -78.33533 39.64184, -78.33498 39.64167, -78.33484 39.64158, -78.3343 39.64115, -78.33406 39.64091, -78.33396 39.64074, -78.33393 39.64063, -78.33394 39.64039, -78.33415 39.63996, -78.3343 39.63953, -78.3343 39.63953, -78.33429 39.63904, -78.33421 39.63854, -78.33421 39.63853, -78.33488 39.63874, -78.33632 39.63897, -78.33818 39.63919, -78.33999 39.63949, -78.34275 39.63979, -78.34458 39.63996, -78.3461 39.64014, -78.34729 39.64043, -78.34893 39.64091, -78.34989 39.64114, -78.35107 39.64139, -78.35108 39.64139, -78.35108 39.64139, -78.35181 39.64138, -78.35223 39.64148, -78.35223 39.64148, -78.35223 39.64148, -78.35249 39.64148, -78.35285 39.64137, -78.35321 39.64136, -78.3547 39.64148, -78.35558 39.64155, -78.35558 39.64155, -78.35558 39.64155, -78.35625 39.64144, -78.35668 39.64143, -78.35746 39.6411, -78.35832 39.64069, -78.35898 39.64017, -78.3597 39.63944, -78.36014 39.63906, -78.36024 39.63822, -78.36045 39.63717, -78.36026 39.63654, -78.35997 39.63581, -78.35954 39.63529, -78.35817 39.63439, -78.35723 39.63371, -78.35669 39.6333, -78.35609 39.63276, -78.35505 39.6316, -78.35459 39.63084, -78.35429 39.6298, -78.35447 39.62895, -78.35479 39.62825, -78.35537 39.62751, -78.35606 39.62702, -78.35693 39.62671, -78.35805 39.62646, -78.35883 39.62649, -78.36002 39.62667, -78.36146 39.62709, -78.36245 39.62738, -78.36406 39.62793, -78.3652 39.62848, -78.36676 39.62938, -78.36756 39.62989, -78.36898 39.6305, -78.37027 39.63084, -78.37124 39.63109, -78.37205 39.63116, -78.37273 39.6312, -78.37374 39.63132, -78.37434 39.63142, -78.37434 39.63142, -78.37434 39.63142, -78.37496 39.63141, -78.37597 39.63123, -78.37711 39.63091, -78.37834 39.63055, -78.37941 39.63036, -78.38033 39.63022, -78.38131 39.62977, -78.38239 39.6292, -78.38311 39.62862, -78.38366 39.62772, -78.38398 39.62711, -78.38474 39.62421)))

A simple plot of a map with geom_sf()

  • The geom_sf() function creates a map based on the features in the data.
basic_counties <- ggplot(data = md_county_map) +
  geom_sf()+
  theme(plot.caption = element_text(size = 10, hjust = 0),
    panel.grid.minor = element_line(linetype = "blank"),
    axis.title = element_text(size = 13),
    axis.text.y = element_text(size = 16),
    plot.title = element_text(size = 16),
    panel.background = element_rect(fill = NA,
        linetype = "dashed")) +labs(title = "Map of counties in Maryland",
    x = "latitude", y = "longitude", colour = "red",
    subtitle = "We are in... PGC!", caption = "I am a caption. Just letting you know the context of the dataset and its limitations.")


detailed_counties <- ggplot(data = md_county_map_detailed) + geom_sf() + theme(plot.subtitle = element_text(size = 10, hjust = 0),
    axis.title = element_text(size = 13),
    axis.text.x = element_text(size = 16),
    axis.text.y = element_text(size = 16),
    plot.title = element_text(size = 16),
    panel.background = element_rect(fill = NA)) +labs(title = "Map of counties in Maryland: detailed",
    x = "longitude", y = "latitude", subtitle = "Helpful details here: no insights in this map just yet",
    caption = "This is where you can add helpful contextual information about your dataset and limitations making inferences")

basic_counties / detailed_counties

basic_counties

detailed_counties

Finding more data and merging

foreclosures <- read_csv("Maryland_Foreclosure_Data_by_County_20240311.csv")
## Rows: 96 Columns: 27
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (2): Date, Type
## dbl (25): Allegany County, Anne Arundel County, Baltimore City, Baltimore Co...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(foreclosures)
## # A tibble: 6 × 27
##   Date            Type  `Allegany County` `Anne Arundel County` `Baltimore City`
##   <chr>           <chr>             <dbl>                 <dbl>            <dbl>
## 1 02/01/2024 12:… Noti…                76                   522              769
## 2 02/01/2024 12:… Noti…                11                    47              156
## 3 02/01/2024 12:… Fore…                 7                    15               45
## 4 01/01/2024 12:… Noti…                83                   535              914
## 5 01/01/2024 12:… Noti…                17                    56              123
## 6 01/01/2024 12:… Fore…                 7                    12               54
## # ℹ 22 more variables: `Baltimore County` <dbl>, `Calvert County` <dbl>,
## #   `Caroline County` <dbl>, `Carroll County` <dbl>, `Cecil County` <dbl>,
## #   `Charles County` <dbl>, `Dorchester County` <dbl>,
## #   `Frederick County` <dbl>, `Garrett County` <dbl>, `Harford County` <dbl>,
## #   `Howard County` <dbl>, `Kent County` <dbl>, `Montgomery County` <dbl>,
## #   `Prince George's County` <dbl>, `Queen Anne's County` <dbl>,
## #   `St. Mary's County` <dbl>, `Somerset County` <dbl>, …
colnames(foreclosures)
##  [1] "Date"                   "Type"                   "Allegany County"       
##  [4] "Anne Arundel County"    "Baltimore City"         "Baltimore County"      
##  [7] "Calvert County"         "Caroline County"        "Carroll County"        
## [10] "Cecil County"           "Charles County"         "Dorchester County"     
## [13] "Frederick County"       "Garrett County"         "Harford County"        
## [16] "Howard County"          "Kent County"            "Montgomery County"     
## [19] "Prince George's County" "Queen Anne's County"    "St. Mary's County"     
## [22] "Somerset County"        "Talbot County"          "Washington County"     
## [25] "Wicomico County"        "Worcester County"       "(blank)"
  • Clean up the data:
    • remove the “(blank)” column
    • filter down to just the “Notice of Foreclosure” type
    • convert the Date column into a proper data format with lubridate
    • reshape the data with a column for county, so that we can merge in with the map/spatial data
    • remove the “County” part of the county names, to match what’s in the map data
  • Merge the cleaned up data with the map data
colnames(foreclosures)
##  [1] "Date"                   "Type"                   "Allegany County"       
##  [4] "Anne Arundel County"    "Baltimore City"         "Baltimore County"      
##  [7] "Calvert County"         "Caroline County"        "Carroll County"        
## [10] "Cecil County"           "Charles County"         "Dorchester County"     
## [13] "Frederick County"       "Garrett County"         "Harford County"        
## [16] "Howard County"          "Kent County"            "Montgomery County"     
## [19] "Prince George's County" "Queen Anne's County"    "St. Mary's County"     
## [22] "Somerset County"        "Talbot County"          "Washington County"     
## [25] "Wicomico County"        "Worcester County"       "(blank)"
foreclosures$`(blank)` <- NULL # removes the column
colnames(foreclosures)
##  [1] "Date"                   "Type"                   "Allegany County"       
##  [4] "Anne Arundel County"    "Baltimore City"         "Baltimore County"      
##  [7] "Calvert County"         "Caroline County"        "Carroll County"        
## [10] "Cecil County"           "Charles County"         "Dorchester County"     
## [13] "Frederick County"       "Garrett County"         "Harford County"        
## [16] "Howard County"          "Kent County"            "Montgomery County"     
## [19] "Prince George's County" "Queen Anne's County"    "St. Mary's County"     
## [22] "Somerset County"        "Talbot County"          "Washington County"     
## [25] "Wicomico County"        "Worcester County"
# filter to one type of foreclosure
unique(foreclosures$Type)
## [1] "Notice of Intent to Foreclose"     "Notice of Foreclosure"            
## [3] "Foreclosure Property Registration"
nrow(foreclosures)
## [1] 96
foreclosures <- filter(foreclosures, Type %in% "Notice of Foreclosure")
unique(foreclosures$Type)
## [1] "Notice of Foreclosure"
nrow(foreclosures)
## [1] 32
# convert the Date column to date-type data
head(foreclosures$Date)
## [1] "02/01/2024 12:00:00 AM" "01/01/2024 12:00:00 AM" "12/01/2023 12:00:00 AM"
## [4] "11/01/2023 12:00:00 AM" "10/01/2023 12:00:00 AM" "09/01/2023 12:00:00 AM"
foreclosures <- mutate(foreclosures, Date = mdy_hms(Date))
head(foreclosures$Date)
## [1] "2024-02-01 UTC" "2024-01-01 UTC" "2023-12-01 UTC" "2023-11-01 UTC"
## [5] "2023-10-01 UTC" "2023-09-01 UTC"
# reshape the data
colnames(foreclosures)
##  [1] "Date"                   "Type"                   "Allegany County"       
##  [4] "Anne Arundel County"    "Baltimore City"         "Baltimore County"      
##  [7] "Calvert County"         "Caroline County"        "Carroll County"        
## [10] "Cecil County"           "Charles County"         "Dorchester County"     
## [13] "Frederick County"       "Garrett County"         "Harford County"        
## [16] "Howard County"          "Kent County"            "Montgomery County"     
## [19] "Prince George's County" "Queen Anne's County"    "St. Mary's County"     
## [22] "Somerset County"        "Talbot County"          "Washington County"     
## [25] "Wicomico County"        "Worcester County"
fore_long <- pivot_longer(foreclosures, 
                          cols = `Allegany County`:`Worcester County`,
                          names_to = "county", 
                          values_to = "foreclosures")
head(fore_long)
## # A tibble: 6 × 4
##   Date                Type                  county              foreclosures
##   <dttm>              <chr>                 <chr>                      <dbl>
## 1 2024-02-01 00:00:00 Notice of Foreclosure Allegany County               11
## 2 2024-02-01 00:00:00 Notice of Foreclosure Anne Arundel County           47
## 3 2024-02-01 00:00:00 Notice of Foreclosure Baltimore City               156
## 4 2024-02-01 00:00:00 Notice of Foreclosure Baltimore County             108
## 5 2024-02-01 00:00:00 Notice of Foreclosure Calvert County                14
## 6 2024-02-01 00:00:00 Notice of Foreclosure Caroline County               10
# an alternative way to specify columns
fore_long2 <- pivot_longer(foreclosures,
                           cols = matches("(County)|(City)"), 
                           names_to = "county",
                           values_to = "foreclosures")
head(fore_long2)
## # A tibble: 6 × 4
##   Date                Type                  county              foreclosures
##   <dttm>              <chr>                 <chr>                      <dbl>
## 1 2024-02-01 00:00:00 Notice of Foreclosure Allegany County               11
## 2 2024-02-01 00:00:00 Notice of Foreclosure Anne Arundel County           47
## 3 2024-02-01 00:00:00 Notice of Foreclosure Baltimore City               156
## 4 2024-02-01 00:00:00 Notice of Foreclosure Baltimore County             108
## 5 2024-02-01 00:00:00 Notice of Foreclosure Calvert County                14
## 6 2024-02-01 00:00:00 Notice of Foreclosure Caroline County               10
  • Merging data can be tricky
    • Do lots of checks before and after merging
# look at the data frames we want to merge
head(fore_long)
## # A tibble: 6 × 4
##   Date                Type                  county              foreclosures
##   <dttm>              <chr>                 <chr>                      <dbl>
## 1 2024-02-01 00:00:00 Notice of Foreclosure Allegany County               11
## 2 2024-02-01 00:00:00 Notice of Foreclosure Anne Arundel County           47
## 3 2024-02-01 00:00:00 Notice of Foreclosure Baltimore City               156
## 4 2024-02-01 00:00:00 Notice of Foreclosure Baltimore County             108
## 5 2024-02-01 00:00:00 Notice of Foreclosure Calvert County                14
## 6 2024-02-01 00:00:00 Notice of Foreclosure Caroline County               10
head(md_county_map)
## Simple feature collection with 6 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.06692 ymin: 38.31896 xmax: -75.70742 ymax: 39.72288
## Geodetic CRS:  WGS 84
##   OBJECTID         county district county_fip countynum          creation_d
## 1        1       Allegany        6          1         1 2007-08-07 20:00:00
## 2        2   Anne Arundel        5          3         2 2007-01-08 19:00:00
## 3        3      Baltimore        4          5         3 2009-11-16 19:00:00
## 4        4 Baltimore City        0        510        24 2006-04-17 20:00:00
## 5        5        Calvert        5          9         4 2007-01-08 19:00:00
## 6        6       Caroline        2         11         5 2007-05-20 20:00:00
##            last_updat shape_Length shape_Area                       geometry
## 1 2012-01-19 19:00:00    2.6488703 0.11494995 MULTIPOLYGON (((-78.38474 3...
## 2 2008-06-30 20:00:00    2.2298037 0.12117518 MULTIPOLYGON (((-76.53695 3...
## 3 2012-02-14 19:00:00    2.8951218 0.16815116 MULTIPOLYGON (((-76.44945 3...
## 4 2009-11-15 19:00:00    0.6428553 0.02481090 MULTIPOLYGON (((-76.52967 3...
## 5 2008-07-07 20:00:00    1.4357386 0.05935892 MULTIPOLYGON (((-76.52993 3...
## 6 2010-01-27 19:00:00    1.7949442 0.08731723 MULTIPOLYGON (((-75.74764 3...
# simplify the map data for merging
md_county_geometry <- select(md_county_map, county, geometry)

# check/compare the values of the columns you want to merge on
unique(fore_long$county)
##  [1] "Allegany County"        "Anne Arundel County"    "Baltimore City"        
##  [4] "Baltimore County"       "Calvert County"         "Caroline County"       
##  [7] "Carroll County"         "Cecil County"           "Charles County"        
## [10] "Dorchester County"      "Frederick County"       "Garrett County"        
## [13] "Harford County"         "Howard County"          "Kent County"           
## [16] "Montgomery County"      "Prince George's County" "Queen Anne's County"   
## [19] "St. Mary's County"      "Somerset County"        "Talbot County"         
## [22] "Washington County"      "Wicomico County"        "Worcester County"
unique(md_county_geometry$county)
##  [1] "Allegany"        "Anne Arundel"    "Baltimore"       "Baltimore City" 
##  [5] "Calvert"         "Caroline"        "Carroll"         "Cecil"          
##  [9] "Charles"         "Dorchester"      "Frederick"       "Garrett"        
## [13] "Harford"         "Howard"          "Kent"            "Montgomery"     
## [17] "Prince George's" "Queen Anne's"    "Somerset"        "St. Mary's"     
## [21] "Talbot"          "Washington"      "Wicomico"        "Worcester"
sum(! fore_long$county %in% md_county_geometry$county)
## [1] 736
sum(! md_county_geometry$county %in% fore_long$county)
## [1] 23
# clean up columns so the values will match for merging
# the gsub(x, y, z) function substitutes every instance of "x" in "z"
# with the string "y"
fore_long <- mutate(fore_long, county = gsub(" County", "", county))
unique(fore_long$county)
##  [1] "Allegany"        "Anne Arundel"    "Baltimore City"  "Baltimore"      
##  [5] "Calvert"         "Caroline"        "Carroll"         "Cecil"          
##  [9] "Charles"         "Dorchester"      "Frederick"       "Garrett"        
## [13] "Harford"         "Howard"          "Kent"            "Montgomery"     
## [17] "Prince George's" "Queen Anne's"    "St. Mary's"      "Somerset"       
## [21] "Talbot"          "Washington"      "Wicomico"        "Worcester"
unique(md_county_geometry$county)
##  [1] "Allegany"        "Anne Arundel"    "Baltimore"       "Baltimore City" 
##  [5] "Calvert"         "Caroline"        "Carroll"         "Cecil"          
##  [9] "Charles"         "Dorchester"      "Frederick"       "Garrett"        
## [13] "Harford"         "Howard"          "Kent"            "Montgomery"     
## [17] "Prince George's" "Queen Anne's"    "Somerset"        "St. Mary's"     
## [21] "Talbot"          "Washington"      "Wicomico"        "Worcester"
sum(! fore_long$county %in% md_county_geometry$county)
## [1] 0
sum(! md_county_geometry$county %in% fore_long$county)
## [1] 0
# merge() is a base R function that has a method for `sf` objects
nrow(md_county_geometry)
## [1] 24
nrow(fore_long)
## [1] 768
md_fore_map_all <- merge(md_county_geometry, fore_long, by = "county", all = FALSE)
nrow(md_fore_map_all)
## [1] 768
head(md_fore_map_all)
## Simple feature collection with 6 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.06692 ymin: 39.43853 xmax: -78.31348 ymax: 39.72288
## Geodetic CRS:  WGS 84
##     county       Date                  Type foreclosures
## 1 Allegany 2024-02-01 Notice of Foreclosure           11
## 2 Allegany 2022-12-01 Notice of Foreclosure           13
## 3 Allegany 2023-05-01 Notice of Foreclosure           12
## 4 Allegany 2021-11-01 Notice of Foreclosure            3
## 5 Allegany 2022-04-01 Notice of Foreclosure           14
## 6 Allegany 2022-09-01 Notice of Foreclosure           11
##                         geometry
## 1 MULTIPOLYGON (((-78.38474 3...
## 2 MULTIPOLYGON (((-78.38474 3...
## 3 MULTIPOLYGON (((-78.38474 3...
## 4 MULTIPOLYGON (((-78.38474 3...
## 5 MULTIPOLYGON (((-78.38474 3...
## 6 MULTIPOLYGON (((-78.38474 3...
# the dplyr package has join() functions
md_fore_map_all2 <- left_join(md_county_geometry, fore_long, by = "county")
head(md_fore_map_all2)
## Simple feature collection with 6 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -79.06692 ymin: 39.43853 xmax: -78.31348 ymax: 39.72288
## Geodetic CRS:  WGS 84
##     county       Date                  Type foreclosures
## 1 Allegany 2024-02-01 Notice of Foreclosure           11
## 2 Allegany 2024-01-01 Notice of Foreclosure           17
## 3 Allegany 2023-12-01 Notice of Foreclosure           10
## 4 Allegany 2023-11-01 Notice of Foreclosure           13
## 5 Allegany 2023-10-01 Notice of Foreclosure            9
## 6 Allegany 2023-09-01 Notice of Foreclosure           18
##                         geometry
## 1 MULTIPOLYGON (((-78.38474 3...
## 2 MULTIPOLYGON (((-78.38474 3...
## 3 MULTIPOLYGON (((-78.38474 3...
## 4 MULTIPOLYGON (((-78.38474 3...
## 5 MULTIPOLYGON (((-78.38474 3...
## 6 MULTIPOLYGON (((-78.38474 3...

Some example plots

  • Mapping the fill to foreclosures
    • the data has a row for each county (24) for each date (32) (24 * 32 = 768 rows)
    • if we ignore Date, we don’t get a very meaningful result
ggplot(data = md_fore_map_all) +
  geom_sf(aes(fill = foreclosures))+
  scale_fill_distiller(palette = "Reds", direction = 1) +
  theme(plot.caption = element_text(size = 12, hjust = 0),
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12),
    panel.grid.minor = element_line(linetype = "blank"),
    axis.title = element_text(size = 12),
    plot.title = element_text(size = 15),
    panel.background = element_rect(fill = NA,
            linetype = "dashed")) +
            labs(title = "Number of foreclosures in Maryland counties (YMin - YMax)", x = "", y = "", colour = "orange", subtitle = "County X had the most foreclosures", caption = "Source: opendata.maryland.gov")

  • We need to aggregate, or split!
    • Sum up foreclosures over Dates, then plot this sum
head(fore_long)
## # A tibble: 6 × 4
##   Date                Type                  county         foreclosures
##   <dttm>              <chr>                 <chr>                 <dbl>
## 1 2024-02-01 00:00:00 Notice of Foreclosure Allegany                 11
## 2 2024-02-01 00:00:00 Notice of Foreclosure Anne Arundel             47
## 3 2024-02-01 00:00:00 Notice of Foreclosure Baltimore City          156
## 4 2024-02-01 00:00:00 Notice of Foreclosure Baltimore               108
## 5 2024-02-01 00:00:00 Notice of Foreclosure Calvert                  14
## 6 2024-02-01 00:00:00 Notice of Foreclosure Caroline                 10
fore_grouped <- group_by(fore_long, county)
fore_total <- summarize(fore_grouped, 
                        total_foreclosures = sum(foreclosures, na.rm = TRUE))
head(fore_total)
## # A tibble: 6 × 2
##   county         total_foreclosures
##   <chr>                       <dbl>
## 1 Allegany                      321
## 2 Anne Arundel                 1681
## 3 Baltimore                    3077
## 4 Baltimore City               3640
## 5 Calvert                       404
## 6 Caroline                      157
# re-merge with the geometry info
md_fore_map_totals <- left_join(md_county_geometry, fore_total, by = "county")

# ggplot(data = md_fore_map_totals) + geom_sf(aes(fill = total_foreclosures))

ggplot(data = md_fore_map_totals) +
  geom_sf(aes(fill = total_foreclosures))+
  scale_fill_distiller(palette = "Reds", direction = 1) +
  theme(plot.caption = element_text(size = 12, hjust = 0),
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12),
    panel.grid.minor = element_line(linetype = "blank"),
    axis.title = element_text(size = 12),
    plot.title = element_text(size = 15),
    panel.background = element_rect(fill = NA,
            linetype = "dashed")) +
            labs(title = "Number of foreclosures in Maryland counties (YMin - YMax)", x = "", y = "", colour = "orange", subtitle = "County X had the most foreclosures", caption = "Source: opendata.maryland.gov")

summary(md_fore_map_totals$total_foreclosures)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    68.0   170.5   412.5   874.3   852.8  4324.0
#Create a lollipop plot to see the distribution of foreclosures by county

lol <- ggplot(data = md_fore_map_totals) +
  geom_segment(aes(x = reorder(county, total_foreclosures), xend = county, y = 0, yend = total_foreclosures)) +
  geom_point(aes(x = reorder(county, total_foreclosures), y = total_foreclosures)) +
  coord_flip() +
  theme(plot.caption = element_text(size = 12, hjust = 0),
    axis.text.x = element_text(size = 16),
    axis.text.y = element_text(size = 16),
    panel.grid.minor = element_line(linetype = "blank"),
    axis.title = element_text(size = 14),
    axis.title.x = element_text(angle = 0, hjust = 1, margin = margin(t = 10)),
    plot.title = element_text(size = 20),
    panel.background = element_rect(fill = NA,
            linetype = "dashed")) +
            labs(title = "Number of foreclosures in Maryland counties (X-Y)", x = "", y = "foreclosures", colour = "orange", subtitle = "Prince Georges County topped the charts with 4324 foreclosures", caption = "Source: opendata.maryland.gov")
ggsave(lol, filename = "lollipop.png", width = 10, height = 8, dpi = 700)
  • Adjusting the colors with scale_fill_distiller()
    • a version of scale_fill_brewer that is designed for continuous data
    • the classic Color Brewer scales are for categorical/discrete data
ggplot(data = md_fore_map_totals) + geom_sf(aes(fill = total_foreclosures)) +
  scale_fill_distiller(palette = "Reds", direction = 1)+
  theme_minimal()

  • Another option: scale_fill_fermenter()
    • creates bins
ggplot(data = md_fore_map_totals) + geom_sf(aes(fill = total_foreclosures)) +
  scale_fill_fermenter(palette = "Reds", direction = 1)+
  theme_minimal()

  • Now go back to non-aggregated data, and use Date to make plots over time
# ggplot(data = md_fore_map_all) +
#   geom_sf(aes(fill = foreclosures)) + 
#   scale_fill_distiller(palette = "Reds", direction = 1) +
#   facet_wrap(~ Date)+
#   theme_minimal()

facetedChoropleth <- ggplot(data = md_fore_map_all) +
  geom_sf(aes(fill = foreclosures))+
  scale_fill_distiller(palette = "Reds", direction = 1) +
  theme(plot.caption = element_text(size = 12, hjust = 0),
    strip.text = element_text(size = 10),
    strip.background = element_blank(),
    #remove x-axis text
    axis.text.x = element_blank(),
    # remove y-axis text
    axis.text.y = element_blank(),
    panel.grid.minor = element_line(linetype = "blank"),
    axis.title = element_text(size = 0),
    plot.title = element_text(size = 20),
    panel.spacing = unit(.25, "cm"),
    legend.position = "right",
    #legend.justification = c(0.5, 0.5),
    #legend.direction = "horizontal",
    legend.title = element_text(size = 12),
    legend.text = element_text(size = 12),
    legend.background = element_rect(),
    panel.background = element_rect(fill = NA,
            linetype = "dashed")) +
            labs(title = "Number of foreclosures in MD counties",
                 x = "",
                 y = "",
                 colour = "orange",
                 subtitle = "BGC had the most foreclosures",
                 caption = "Source: opendata.maryland.gov")+
    facet_wrap(~Date, labeller = label_wrap_gen(10))
facetedChoropleth

# Save the faceted choropleth plot
ggsave(facetedChoropleth, filename = "facetedChoropleth.png", width = 10, height = 8, dpi = 700)
# Export the data to a CSV file
write.csv(md_fore_map_totals, "md_fore_map_totals.csv")

Upshot