Skip to content

Make it easy to include US territories and state insets in the Albers projection

Notifications You must be signed in to change notification settings

uncoast-unconf/ggcart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ggcart

The goal of ggcart is to include Puerto Rico, the Virgin Islands and Guam in the traditional Albers maps. Also, ggcart will make it easier to map line, point and other data in the Albers projection.

Installation

You can install the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("uncoast-unconf/ggcart")

Examples

Sample datasets include information from the National Inventory of Dams and the National Bridge Inventory.

library(ggcart)
## Pull in sample data for mapping
head(bridges) ## Data slice from National Bridge Inventory
#>   st_abbv rectype rtnum           strcture latitude longitude year
#> 1      AK       1 10808    NO DATA ENTERED  0.00000    0.0000 2008
#> 2      AK       1 00391    CHINIAK HIGHWAY 57.60400 -152.4055 1974
#> 3      AK       1 80007            8000700 55.79634 -131.6278 1999
#> 4      AK       1 00966 MENDENHALL LOOP RD 58.40417 -134.5847 1985
#> 5      AK       1 06590    NO DATA ENTERED 56.34885 -132.7188 2004
#> 6      AK       1 NSPCY       DIMOND DRIVE 61.17722 -149.8447 1978
#>   bridgecond          geometry
#> 1          F          NaN, NaN
#> 2          F -3422682, 4855940
#> 3          G -2309931, 4058852
#> 4          F -2384415, 4382488
#> 5          G -2355319, 4139464
#> 6          G -3090509, 5070914

The standard Albers conic projection isn't great for points in Alaska, Hawaii, Puerto Rico, Guam and the U.S. Virgin Islands. (AK and HI are taken care of with AlbersUSA. )

# Map the dams sample data.
library(ggplot2)
ggplot() + geom_sf(data = dams) + coord_sf()

# Map the bridges sample data.
library(ggplot2)
ggplot() + geom_sf(data = bridges) + coord_sf()

To convert your own set of point data with a latitude and longitude to an sf object, try the following:

# To convert your own point data for use with ggcart
bridges <- read_sf("data-raw/bridges.csv", ## Replace with your own csv file
                   options = c("X_POSSIBLE_NAMES=longitude",
                               "Y_POSSIBLE_NAMES=latitude"))

Demonstration on how the shift/rotate/scale functionality within the transport_sf() function works. For this example we will be shifting Puerto Rico by 1300km west and 900km north, then rotate 90 degrees, then scale to 2 times the size.

### Demonstration of how the shift functionality works -----------
pr_centroid <- sf::st_centroid(sf::st_geometry(ggcart:::puerto_rico))

# define shift dimension points for visual reference on map
pt1 <- pr_centroid
pt2 <- pr_centroid + 1000*c(-1300,0)
pt3 <- pr_centroid + 1000*c(-1300,900)
# Create into two lines (pt1-->pt2, pt2-->pt3) in sf object
pts <- sf::st_multilinestring(list(rbind(pt1[[1]][1:2], pt2[[1]][1:2]),
                                   rbind(pt2[[1]][1:2], pt3[[1]][1:2])))
pts <- sf::st_sfc(pts)
pts <- sf::st_set_crs(pts, sf::st_crs(pr_centroid))
# plot the shift/rotate/scale to Puerto Rico
ggplot()+
  geom_sf(data=ggcart:::lower48)+
  geom_sf(data=ggcart:::puerto_rico, color="red")+
  geom_sf(data=ggcart:::transport_sf(sf=ggcart:::puerto_rico,
                            scale=2,
                            shift = c(-1300,900)*1000,
                            rotate=pi/2), color="blue")+
  geom_sf(data=pts, color="purple")+ 
  annotate(geom="text",
           x=c(mean(c(pt1[[1]][1], pt2[[1]][1])),
               mean(c(pt2[[1]][1], pt3[[1]][1]))),
           y=c(mean(c(pt1[[1]][2], pt2[[1]][2])),
               mean(c(pt2[[1]][2], pt3[[1]][2]))),
           label=c("1300km West","900km North"),
           angle=c(0,90),
           color="purple",
           vjust=-.2)

Almost there!

geom_sf_albersusa() exists - but has some trouble...

(And is not documented, and it outputs some warning messages, and it ignores some territories...)

library(tigris)
#> Warning: package 'tigris' was built under R version 3.4.4
#> To enable 
#> caching of data, set `options(tigris_use_cache = TRUE)` in your R script or .Rprofile.
#> 
#> Attaching package: 'tigris'
#> The following object is masked from 'package:graphics':
#> 
#>     plot
library(rmapshaper)
#> Warning: package 'rmapshaper' was built under R version 3.4.4
library(sf)
#> Warning: package 'sf' was built under R version 3.4.4
#> Linking to GEOS 3.6.1, GDAL 2.1.3, PROJ 4.9.3
library(dplyr)
#> Warning: package 'dplyr' was built under R version 3.4.4
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(ggplot2)
library(ggcart)


capture.output({map <- states(cb = TRUE) %>%
  st_as_sf(map) %>%
  ms_simplify(keep = .05) %>%
  st_transform(
    "+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs"
  )
})
#> Warning in strptime(x, fmt, tz = "GMT"): unknown timezone 'zone/tz/2018i.
#> 1.0/zoneinfo/America/Chicago'
#> [1] "\r  |                                                                       \r  |                                                                 |   0%\r  |                                                                       \r  |=                                                                |   1%\r  |                                                                       \r  |=                                                                |   2%\r  |                                                                       \r  |==                                                               |   3%\r  |                                                                       \r  |===                                                              |   4%\r  |                                                                       \r  |===                                                              |   5%\r  |                                                                       \r  |====                                                             |   6%\r  |                                                                       \r  |====                                                             |   7%\r  |                                                                       \r  |=====                                                            |   7%\r  |                                                                       \r  |=====                                                            |   8%\r  |                                                                       \r  |======                                                           |   9%\r  |                                                                       \r  |======                                                           |  10%\r  |                                                                       \r  |=======                                                          |  10%\r  |                                                                       \r  |=======                                                          |  11%\r  |                                                                       \r  |========                                                         |  12%\r  |                                                                       \r  |========                                                         |  13%\r  |                                                                       \r  |=========                                                        |  13%\r  |                                                                       \r  |=========                                                        |  14%\r  |                                                                       \r  |=========                                                        |  15%\r  |                                                                       \r  |==========                                                       |  15%\r  |                                                                       \r  |==========                                                       |  16%\r  |                                                                       \r  |===========                                                      |  16%\r  |                                                                       \r  |===========                                                      |  17%\r  |                                                                       \r  |============                                                     |  18%\r  |                                                                       \r  |============                                                     |  19%\r  |                                                                       \r  |=============                                                    |  19%\r  |                                                                       \r  |=============                                                    |  20%\r  |                                                                       \r  |=============                                                    |  21%\r  |                                                                       \r  |==============                                                   |  21%\r  |                                                                       \r  |==============                                                   |  22%\r  |                                                                       \r  |===============                                                  |  22%\r  |                                                                       \r  |===============                                                  |  23%\r  |                                                                       \r  |===============                                                  |  24%\r  |                                                                       \r  |================                                                 |  24%\r  |                                                                       \r  |================                                                 |  25%\r  |                                                                       \r  |=================                                                |  25%\r  |                                                                       \r  |=================                                                |  26%\r  |                                                                       \r  |=================                                                |  27%\r  |                                                                       \r  |==================                                               |  27%\r  |                                                                       \r  |==================                                               |  28%\r  |                                                                       \r  |===================                                              |  29%\r  |                                                                       \r  |===================                                              |  30%\r  |                                                                       \r  |====================                                             |  30%\r  |                                                                       \r  |====================                                             |  31%\r  |                                                                       \r  |====================                                             |  32%\r  |                                                                       \r  |=====================                                            |  32%\r  |                                                                       \r  |=====================                                            |  33%\r  |                                                                       \r  |======================                                           |  33%\r  |                                                                       \r  |======================                                           |  34%\r  |                                                                       \r  |=======================                                          |  35%\r  |                                                                       \r  |=======================                                          |  36%\r  |                                                                       \r  |========================                                         |  36%\r  |                                                                       \r  |========================                                         |  37%\r  |                                                                       \r  |========================                                         |  38%\r  |                                                                       \r  |=========================                                        |  38%\r  |                                                                       \r  |=========================                                        |  39%\r  |                                                                       \r  |==========================                                       |  39%\r  |                                                                       \r  |==========================                                       |  40%\r  |                                                                       \r  |==========================                                       |  41%\r  |                                                                       \r  |===========================                                      |  41%\r  |                                                                       \r  |===========================                                      |  42%\r  |                                                                       \r  |============================                                     |  43%\r  |                                                                       \r  |============================                                     |  44%\r  |                                                                       \r  |=============================                                    |  44%\r  |                                                                       \r  |=============================                                    |  45%\r  |                                                                       \r  |==============================                                   |  46%\r  |                                                                       \r  |==============================                                   |  47%\r  |                                                                       \r  |===============================                                  |  47%\r  |                                                                       \r  |===============================                                  |  48%\r  |                                                                       \r  |================================                                 |  49%\r  |                                                                       \r  |================================                                 |  50%\r  |                                                                       \r  |=================================                                |  50%\r  |                                                                       \r  |=================================                                |  51%\r  |                                                                       \r  |==================================                               |  52%\r  |                                                                       \r  |==================================                               |  53%\r  |                                                                       \r  |===================================                              |  53%\r  |                                                                       \r  |===================================                              |  54%\r  |                                                                       \r  |====================================                             |  55%\r  |                                                                       \r  |====================================                             |  56%\r  |                                                                       \r  |=====================================                            |  57%\r  |                                                                       \r  |======================================                           |  58%\r  |                                                                       \r  |======================================                           |  59%\r  |                                                                       \r  |=======================================                          |  59%\r  |                                                                       \r  |=======================================                          |  60%\r  |                                                                       \r  |========================================                         |  61%\r  |                                                                       \r  |========================================                         |  62%\r  |                                                                       \r  |=========================================                        |  63%\r  |                                                                       \r  |=========================================                        |  64%\r  |                                                                       \r  |==========================================                       |  64%\r  |                                                                       \r  |==========================================                       |  65%\r  |                                                                       \r  |===========================================                      |  66%\r  |                                                                       \r  |===========================================                      |  67%\r  |                                                                       \r  |============================================                     |  67%\r  |                                                                       \r  |============================================                     |  68%\r  |                                                                       \r  |=============================================                    |  69%\r  |                                                                       \r  |=============================================                    |  70%\r  |                                                                       \r  |==============================================                   |  70%\r  |                                                                       \r  |==============================================                   |  71%\r  |                                                                       \r  |===============================================                  |  72%\r  |                                                                       \r  |===============================================                  |  73%\r  |                                                                       \r  |================================================                 |  73%\r  |                                                                       \r  |================================================                 |  74%\r  |                                                                       \r  |=================================================                |  75%\r  |                                                                       \r  |=================================================                |  76%\r  |                                                                       \r  |==================================================               |  76%\r  |                                                                       \r  |==================================================               |  77%\r  |                                                                       \r  |==================================================               |  78%\r  |                                                                       \r  |===================================================              |  78%\r  |                                                                       \r  |===================================================              |  79%\r  |                                                                       \r  |====================================================             |  79%\r  |                                                                       \r  |====================================================             |  80%\r  |                                                                       \r  |====================================================             |  81%\r  |                                                                       \r  |=====================================================            |  81%\r  |                                                                       \r  |=====================================================            |  82%\r  |                                                                       \r  |======================================================           |  82%\r  |                                                                       \r  |======================================================           |  83%\r  |                                                                       \r  |======================================================           |  84%\r  |                                                                       \r  |=======================================================          |  84%\r  |                                                                       \r  |=======================================================          |  85%\r  |                                                                       \r  |========================================================         |  85%\r  |                                                                       \r  |========================================================         |  86%\r  |                                                                       \r  |========================================================         |  87%\r  |                                                                       \r  |=========================================================        |  87%\r  |                                                                       \r  |=========================================================        |  88%\r  |                                                                       \r  |==========================================================       |  88%\r  |                                                                       \r  |==========================================================       |  89%\r  |                                                                       \r  |==========================================================       |  90%\r  |                                                                       \r  |===========================================================      |  90%\r  |                                                                       \r  |===========================================================      |  91%\r  |                                                                       \r  |============================================================     |  92%\r  |                                                                       \r  |============================================================     |  93%\r  |                                                                       \r  |=============================================================    |  93%\r  |                                                                       \r  |=============================================================    |  94%\r  |                                                                       \r  |=============================================================    |  95%\r  |                                                                       \r  |==============================================================   |  95%\r  |                                                                       \r  |==============================================================   |  96%\r  |                                                                       \r  |===============================================================  |  96%\r  |                                                                       \r  |===============================================================  |  97%\r  |                                                                       \r  |================================================================ |  98%\r  |                                                                       \r  |================================================================ |  99%\r  |                                                                       \r  |=================================================================| 100%"
ggplot() + 
  ggcart:::geom_sf_albersusa(data = map, aes(geometry = st_geometry(map))) + 
  ggcart:::geom_sf_albersusa(data = bridges, aes(geometry = st_geometry(bridges)))
#> Warning: attribute variables are assumed to be spatially constant
#> throughout all geometries
#> Warning: attribute variables are assumed to be spatially constant
#> throughout all geometries

About

Make it easy to include US territories and state insets in the Albers projection

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages