I have a feeling that this question will illustrate my ignorance of projections. Please feel free to point me to some resource with both practical and theoretical guidance on creating custom projections for specific purposes.
I'm going to analyze some spatial data in New England and given the analysis, it makes sense to use an equal-area projection. I thought I'd just roll my own with R based on this answer, centered on my area of interest and with false northing and easting to keep coordinates positive, as follows:
# Lambert equal-area projection laea_centered <- "+proj=laea +lat_0=-70.30744 +lon_0=43.15268" coord_shift <- "+x_0=12019341.4 +y_0=1730136" proj_ref <- " +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs" laea_proj4 <- paste(laea_centered, coord_shift, proj_ref, sep = " ")
Here's a map of New England for perspective.
library(rnaturalearth) library(sf) library(dplyr) library(ggplot2) states_sf <- ne_states(country = "united states of america", returnclass = "sf") states_names <- c("Maine", "New Hampshire", "Vermont", "Connecticut", "Rhode Island", "Massachusetts") states_sf <- filter(states_sf, name %in% states_names) ggplot(states_sf) + geom_sf() + theme_bw()
But when I project and replot the data, it doesn't look as expected.
states_projected_sf <- st_transform(states_sf, crs = laea_proj4) ggplot(states_projected_sf) + geom_sf() + coord_sf(datum = st_crs(states_projected_sf)) + theme_bw() + theme(axis.text.x = element_text(angle = 90, hjust = 1))
Just for grins and to further illustrate how absurdly I've managed to mangle this, here's the projected map with geographic coordinates and graticule.
ggplot(states_projected_sf) + geom_sf() + coord_sf() + theme_bw() + theme(axis.text.x = element_text(angle = 90, hjust = 1))
I expected some distortion with the projection, and with an equal-area projection I didn't expect distances to be strictly maintained. But I didn't expect this level of distortion, so I'm assuming I did something wrong in specifying the projection. Can someone explain where I went wrong and how to do this better?