How did I mess up this Lambert projection so badly?

by Gregory   Last Updated October 10, 2019 04:22 AM

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.


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() +

enter image description here

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)) 

enter image description here

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)) 

enter image description here

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?

Related Questions

Updated October 07, 2016 09:09 AM

Updated February 17, 2018 04:22 AM

Updated August 28, 2017 07:22 AM

Updated August 24, 2017 03:22 AM

Updated March 05, 2018 14:22 PM